Analytics

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 verwalteten Service an, der Metriken automatisch sammelt und visualisiert.

Eigenes System aufbauen

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 performanteste Ansatz, eine separate Komponente zu erstellen, die vom Root-Layout importiert wird. Dadurch wird die Client-Boundary ausschließlich auf die WebVitals-Komponente beschränkt.

Weitere Informationen finden Sie in der API-Referenz.

Web Vitals

Web Vitals sind eine Sammlung nützlicher Metriken, die das Nutzererlebnis einer Webseite erfassen sollen. Folgende Web Vitals sind enthalten:

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

'use client'

import { useReportWebVitals } from 'next/web-vitals'

export function WebVitals() {
  useReportWebVitals((metric) => {
    switch (metric.name) {
      case 'FCP': {
        // FCP-Ergebnisse verarbeiten
      }
      case 'LCP': {
        // LCP-Ergebnisse verarbeiten
      }
      // ...
    }
  })
}
'use client'

import { useReportWebVitals } from 'next/web-vitals'

export function WebVitals() {
  useReportWebVitals((metric) => {
    switch (metric.name) {
      case 'FCP': {
        // FCP-Ergebnisse verarbeiten
      }
      case 'LCP': {
        // LCP-Ergebnisse verarbeiten
      }
      // ...
    }
  })
}

Ergebnisse an externe Systeme senden

Sie können Ergebnisse an beliebige Endpunkte senden, um die Leistung Ihrer Seite bei echten Nutzern zu messen und zu verfolgen. Beispiel:

useReportWebVitals((metric) => {
  const body = JSON.stringify(metric)
  const url = 'https://example.com/analytics'

  // `navigator.sendBeacon()` verwenden, falls verfügbar, sonst auf `fetch()` zurückgreifen.
  if (navigator.sendBeacon) {
    navigator.sendBeacon(url, body)
  } else {
    fetch(url, { body, method: 'POST', keepalive: true })
  }
})

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) => {
  // `window.gtag` verwenden, wenn Sie Google Analytics wie in diesem Beispiel initialisiert haben:
  // https://github.com/vercel/next.js/blob/canary/examples/with-google-analytics/pages/_app.js
  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 eindeutig für aktuellen Seitenaufruf
    non_interaction: true, // vermeidet Beeinflussung der Absprungrate.
  })
})

Lesen Sie mehr über das Senden von Ergebnissen an Google Analytics.