Menu

Analytics

Next.js bietet integrierte Unterstützung zum Messen und Berichten von Leistungsmetriken. Sie können entweder den useReportWebVitals-Hook verwenden, um die Berichterstattung selbst zu verwalten, oder alternativ bietet Vercel einen verwalteten Dienst zur automatischen Erfassung und Visualisierung von Metriken.

Eigene Lösung entwickeln

app/_components/web-vitals.js
'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 leistungsfähigste Ansatz, eine separate Komponente zu erstellen, die das Stamm-Layout importiert. Dies beschränkt die Client-Grenze ausschließlich auf die WebVitals-Komponente.

Weitere Informationen in der API-Referenz.

Web Vitals

Web Vitals sind eine Reihe nützlicher Metriken, die darauf abzielen, die Nutzererfahrung einer Webseite zu erfassen. Folgende Web Vitals sind enthalten:

Sie können alle Ergebnisse dieser Metriken über die name-Eigenschaft behandeln.

app/_components/web-vitals.tsx
TypeScript
'use client'
 
import { useReportWebVitals } from 'next/web-vitals'
 
export function WebVitals() {
  useReportWebVitals((metric) => {
    switch (metric.name) {
      case 'FCP': {
        // FCP-Ergebnisse behandeln
      }
      case 'LCP': {
        // LCP-Ergebnisse behandeln
      }
      // ...
    }
  })
}

Ergebnisse an externe Systeme senden

Sie können Ergebnisse an jeden Endpunkt senden, um die Leistung echter Benutzer auf Ihrer Website zu messen und zu verfolgen. Zum Beispiel:

useReportWebVitals((metric) => {
  const body = JSON.stringify(metric)
  const url = 'https://example.com/analytics'
 
  // Verwenden Sie `navigator.sendBeacon()`, falls verfügbar, andernfalls fallen Sie auf `fetch()` zurück.
  if (navigator.sendBeacon) {
    navigator.sendBeacon(url, body)
  } else {
    fetch(url, { body, method: 'POST', keepalive: true })
  }
})

Hinweis: Bei Verwendung von Google Analytics kann die Verwendung des id-Werts es Ihnen ermöglichen, Metrikverteilungen manuell zu konstruieren (zur Berechnung von Perzentilen usw.)

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 zum aktuellen Seitenaufruf eindeutig ist
    non_interaction: true, // vermeidet Einfluss auf Absprungrate.
  })
})

Weitere Informationen zum Senden von Ergebnissen an Google Analytics.