Wie Sie Analytics zu Ihrer Next.js-Anwendung hinzufügen
Next.js bietet integrierte Unterstützung für das Messen und Berichten von Leistungsmetriken. Sie können entweder den useReportWebVitals-Hook verwenden, um die Berichterstattung selbst zu verwalten, oder alternativ bietet Vercel einen Managed Service an, der Metriken automatisch sammelt und visualisiert.
Für erweiterte Analyse- und Monitoring-Anforderungen bietet Next.js eine instrumentation-client.js|ts-Datei, die ausgeführt wird, bevor der Frontend-Code Ihrer Anwendung startet. Dies ist ideal für die Einrichtung globaler Analyse-, Fehlerverfolgungs- oder Performance-Monitoring-Tools.
Um sie zu verwenden, erstellen Sie eine instrumentation-client.js oder instrumentation-client.ts-Datei im Stammverzeichnis Ihrer Anwendung:
instrumentation-client.js
// Initialisieren Sie Analytics, bevor die App startetconsole.log('Analytics initialisiert')// Richten Sie die globale Fehlerverfolgung einwindow.addEventListener('error', (event) => { // Senden Sie den Fehler an Ihren Fehlerverfolgungsdienst reportError(event.error)})
'use client'import { useReportWebVitals } from 'next/web-vitals'export function WebVitals() { useReportWebVitals((metric) => { console.log(metric) })}
app/layout.js
import { WebVitals } from './_components/web-vitals'export default function Layout({ children }) { return ( <html> <body> <WebVitals /> {children} </body> </html> )}
Da der useReportWebVitals-Hook die 'use client'-Direktive erfordert, ist der performanteste Ansatz, eine separate Komponente zu erstellen, die vom Root-Layout importiert wird. Dies begrenzt die Client-Boundary ausschließlich auf die WebVitals-Komponente.
Weitere Informationen finden Sie in der API-Referenz.
Gut zu wissen: Wenn Sie Google Analytics verwenden, können Sie mit dem id-Wert manuell Metrikverteilungen erstellen (um Perzentile etc. zu berechnen).
useReportWebVitals((metric) => { // Verwenden Sie `window.gtag`, wenn Sie Google Analytics wie in diesem Beispiel initialisiert haben: // https://github.com/vercel/next.js/blob/canary/examples/with-google-analytics window.gtag('event', metric.name, { value: Math.round( metric.name === 'CLS' ? metric.value * 1000 : metric.value ), // Werte müssen Ganzzahlen sein event_label: metric.id, // ID, die für den aktuellen Seitenladen eindeutig ist non_interaction: true, // vermeidet Auswirkungen auf die Absprungrate. })})