First Contentful Paint (FCP)

Unterstützte Browser

  • Chrome: 60.
  • Edge: 79.
  • Firefox: 84.
  • Safari: 14.1.

Quelle

„First Contentful Paint“ (FCP) misst die Zeitspanne zwischen dem Zeitpunkt, zu dem der Nutzer die Seite aufgerufen hat, und dem Zeitpunkt, zu dem ein beliebiger Teil des Seiteninhalts auf dem Bildschirm gerendert wird. Bei diesem Messwert bezieht sich „Inhalt“ auf Text, Bilder (einschließlich Hintergrundbilder), <svg>-Elemente oder nicht weiße <canvas>-Elemente.

FCP-Zeitachse von google.com
In dieser Ladezeitleiste wird FCP im zweiten Frame erreicht, da dort die ersten Text- und Bildelemente auf dem Bildschirm gerendert werden.

In der im vorherigen Bild dargestellten Ladezeitachse erfolgt die FCP im zweiten Frame, da dort die ersten Text- und Bildelemente auf dem Bildschirm gerendert werden.

Sie werden feststellen, dass einige Inhalte gerendert wurden, aber nicht alle. Es ist wichtig, zwischen First Contentful Paint und Largest Contentful Paint (LCP) zu unterscheiden. Letzterer gibt an, wann der Hauptinhalt der Seite vollständig geladen ist.

Was ist ein guter FCP-Wert?

Für eine gute Nutzerfreundlichkeit sollten Websites einen Wert für die erste vollständige Darstellung von 1, 8 Sekunden oder weniger anstreben. Damit Sie dieses Ziel für die meisten Nutzer erreichen, ist der 75. Perzentilwert der Seitenladezeiten ein guter Messwert. Dieser sollte für Mobilgeräte und Computer getrennt gemessen werden.

Gute FCP-Werte liegen bei 1,8 Sekunden oder weniger, schlechte Werte bei mehr als 3,0 Sekunden.Alles dazwischen muss verbessert werden.
Gute FCP-Werte liegen bei 1,8 Sekunden oder weniger. Schlechte Werte sind länger als 3,0 Sekunden.

FCP messen

Der FCP kann im Labor oder im Feld gemessen werden und ist in den folgenden Tools verfügbar:

Tools für die Arbeit im Außendienst

Lab-Tools

FCP in JavaScript messen

Wenn Sie den FCP in JavaScript messen möchten, können Sie die Paint Timing API verwenden. Im folgenden Beispiel wird gezeigt, wie eine PerformanceObserver erstellt wird, die auf einen paint-Eintrag mit dem Namen first-contentful-paint wartet und ihn in der Console protokolliert.

new PerformanceObserver((entryList) => {
  for (const entry of entryList.getEntriesByName('first-contentful-paint')) {
    console.log('FCP candidate:', entry.startTime, entry);
  }
}).observe({type: 'paint', buffered: true});

Im vorherigen Code-Snippet gibt der first-contentful-paint-Eintrag an, wann das erste Element mit Inhalt gerendert wurde. In einigen Fällen ist dieser Eintrag jedoch nicht für die Messung der Conversions nach dem ersten Besuch gültig.

Im folgenden Abschnitt werden die Unterschiede zwischen den Angaben in der API und der Berechnung des Messwerts aufgeführt.

Unterschiede zwischen dem Messwert und der API

  • Die API sendet einen first-contentful-paint-Eintrag für Seiten, die in einem Hintergrundtab geladen werden. Diese Seiten sollten bei der Berechnung des FCP jedoch ignoriert werden. Die Zeit bis zur ersten Darstellung sollte nur berücksichtigt werden, wenn die Seite die ganze Zeit im Vordergrund war.
  • Die API meldet keine first-contentful-paint-Einträge, wenn die Seite aus dem Zurück-/Vorwärts-Cache wiederhergestellt wird. In diesen Fällen sollten jedoch Seitenaufrufe nach dem Laden gemessen werden, da Nutzer sie als separate Seitenaufrufe wahrnehmen.
  • Die API erfasst möglicherweise keine Paint-Timings von iframes mit unterschiedlichen Ursprüngen. Für eine korrekte Messung der FCP sollten Sie jedoch alle Frames berücksichtigen. Untergeordnete Frames können die API verwenden, um ihre Paint-Timings zur Aggregation an den übergeordneten Frame zu melden.
  • Die API misst den FCP ab Beginn der Navigation. Bei vorab gerenderten Seiten sollte der FCP jedoch ab activationStart gemessen werden, da dies der vom Nutzer wahrgenommenen FCP-Zeit entspricht.

Anstatt sich all diese kleinen Unterschiede zu merken, können Entwickler die web-vitals JavaScript-Bibliothek verwenden, um den FCP zu messen. Diese Bibliothek berücksichtigt diese Unterschiede nach Möglichkeit (das Problem mit dem Iframe wird jedoch nicht abgedeckt):

import {onFCP} from 'web-vitals';

// Measure and log FCP as soon as it's available.
onFCP(console.log);

Im Quellcode für onFCP() finden Sie ein vollständiges Beispiel für die Messung der ersten Ladezeit in JavaScript.

FCP verbessern

Wenn Sie wissen möchten, wie Sie den FCP für eine bestimmte Website verbessern können, können Sie eine Lighthouse-Leistungsanalyse durchführen und sich die Empfehlungen oder Diagnosedaten ansehen, die die Analyse vorschlägt.

Informationen dazu, wie Sie die FCP für alle Websites allgemein verbessern können, finden Sie in den folgenden Leistungsleitfäden:

Änderungsprotokoll

Gelegentlich werden Fehler in den APIs gefunden, die zum Erfassen von Messwerten verwendet werden, und manchmal auch in den Definitionen der Messwerte selbst. Daher müssen manchmal Änderungen vorgenommen werden. Diese Änderungen können sich in Ihren internen Berichten und Dashboards als Verbesserungen oder Rückschritte zeigen.

Alle Änderungen an der Implementierung oder Definition dieser Messwerte werden in diesem Changelog aufgeführt.

Wenn Sie Feedback zu diesen Messwerten haben, können Sie es in der Google-Gruppe „web-vitals-feedback“ geben.