Zum Inhalt springen
Core Web Vitals Spezialisten
Frontend-Performance

fetchpriority: LCP mit Priority Hints beschleunigen

13 Min. Lesezeit
fetchpriorityPriority HintsLCPCore Web VitalsFrontend

Das wichtigste Bild einer Seite, der Hero, ist meist auch das langsamste. Der Grund liegt in der Art, wie Browser Bilder behandeln: Sie starten jedes Bild standardmäßig mit niedriger Priorität (web.dev), weil die meisten Bilder erst weiter unten auf der Seite oder in versteckten Menüs gebraucht werden. Genau dieses Verhalten benachteiligt das eine Bild, das den ersten sichtbaren Eindruck bestimmt und damit den Largest Contentful Paint. Das fetchpriority-Attribut korrigiert diese Fehleinschätzung mit einer einzigen Angabe im Markup. In dokumentierten Tests verschob es den LCP von 2,6 auf 1,9 Sekunden (web.dev) und in einem weiteren Fall von 4,2 auf 1,9 Sekunden (DebugBear) -- ohne neue Infrastruktur, ohne Build-Umbau. Dieser Beitrag zeigt die korrekte Anwendung, das Zusammenspiel mit preload und srcset und die häufigsten Fehler. Als deklarativer Quick-Win gehört der Priority Hint zu den ersten Maßnahmen unserer Frontend-Optimierung.

fetchpriority="high": das LCP-Bild früher ladenLadereihenfolge des Browsers ohne und mit Priority Hint auf dem Hero-BildOHNE fetchpriorityHTML + CSSSkripte (hohe Priorität)LCP-Bild wartet (low)LCP-Bild lädt spätLCP 4,2 sMIT fetchpriority="high"HTML + CSSLCP-Bild lädt sofortLCP 1,9 s-2,3SekundenLCP im Test(DebugBear)4,2 s auf 1,9 sDrei Regeln für den Priority Hint1Genau ein ElementNur das LCP-Bild bekommthigh - nichts darunter.Mehr high = nichts priorisiert2Nie lazy-loadenloading="lazy" auf dem LCP-Bild bremst es aus.Hero-Bild eager laden3Mit preload paarenVorladen findet das Bild,high hebt die Priorität.srcset bleibt am img-TagBilder starten im Browser mit niedriger Priorität (web.dev) - das LCP-Bild wird so wie ein Nebenbild behandelt.Die Nutzung von fetchpriority für das LCP-Bild stieg auf 15 Prozent der Mobilseiten (Web Almanac 2024).Ein deklaratives Attribut, keine neue Infrastruktur - ein Quick-Win der Frontend-Optimierung.

Das Wichtigste in Kürze

  • Browser starten Bilder mit niedriger Priorität und heben sie erst nach dem Layout an -- das benachteiligt das LCP-Bild, das eigentlich zuerst geladen werden sollte.
  • fetchpriority='high' auf dem LCP-Bild signalisiert dem Browser dessen Wichtigkeit sofort, sodass er den Download nicht hinter niedriger eingestufte Bilder einreiht.
  • In Tests verbesserte der Hint den LCP von 2,6 auf 1,9 Sekunden und von 4,2 auf 1,9 Sekunden -- bei manchen Seiten lagen die Laborwerte bei 20 bis 30 Prozent schnellerem LCP.
  • Es gilt eine strenge Regel: genau ein Element bekommt high. Wer mehrere Bilder hochstuft, erzeugt Bandbreiten-Konkurrenz und bremst gerade das wichtige Bild aus.
  • Das LCP-Bild gehört in der Regel nicht ins Lazy Loading -- loading='lazy' auf dem Hero verzögert genau den Inhalt, den fetchpriority beschleunigen soll.

Warum der Browser das LCP-Bild unterschätzt

Beim Laden einer Seite ist der Browser ein Planer, der jeder Ressource eine Priorität zuweist und entscheidet, was zuerst geladen wird. Für Bilder gilt dabei eine pauschale Annahme: Sie starten mit niedriger Priorität, weil viele Bilder unterhalb des sichtbaren Bereichs liegen oder in aufklappbaren Menüs versteckt sind. Erst wenn der Browser das Layout berechnet hat und erkennt, dass ein Bild im Viewport sichtbar ist, stuft er es nachträglich hoch (web.dev). Diese Hochstufung kommt jedoch spät -- der Browser muss erst das CSS verarbeiten und das Layout berechnen, bevor er weiß, welches Bild sichtbar ist.

Für das LCP-Bild ist das ein Problem. Es ist das größte und damit für den ersten Eindruck wichtigste Bild der Seite, wird aber zunächst wie jedes andere behandelt. Im Netzwerk-Wasserfall zeigt sich das als langer grauer Balken: Der Browser kennt die Ressource bereits, hat den Download aber noch nicht begonnen, weil andere, höher eingestufte Ressourcen Vorrang haben (DebugBear). Erst nach dem ersten Rendering wechselt die Priorität von low auf high -- und kostbare Zeit ist verstrichen, bevor das wichtigste Bild überhaupt zu laden beginnt.

Was den Largest Contentful Paint bestimmt

Der LCP misst, wann das größte sichtbare Inhaltselement gerendert ist -- bei den meisten Seiten ist das ein Hero-Bild, ein Produktfoto oder eine große Headline. Solange dieses Element nicht erscheint, wirkt die Seite für den Nutzer unfertig. Der als gut geltende Schwellenwert liegt bei 2,5 Sekunden (web.dev). Wettbewerbsfähige Seiten setzen sich in der Praxis ein strengeres internes Budget, oft Richtung 2,0 Sekunden, um auch auf langsamen Mobilnetzen sicher im grünen Bereich zu landen.

fetchpriority='high': die eine Korrektur

Das fetchpriority-Attribut teilt dem Browser die relative Wichtigkeit einer Ressource mit, bevor er das Layout berechnet hat. Der Wert high zieht eine Ressource vor, low schiebt sie nach hinten, auto überlässt dem Browser die Standardentscheidung. Auf das LCP-Bild gesetzt, bewirkt fetchpriority='high', dass der Browser die Wichtigkeit sofort erkennt und das Bild unmittelbar nach der Dokumentanforderung lädt, statt es hinter niedriger eingestufte Ressourcen einzureihen. Im Wasserfall verschwindet der lange graue Wartebalken, und die Priorität wechselt nicht mehr von low auf high -- sie ist von Anfang an hoch (DebugBear).

lcp-bild.html
<!-- Das LCP-Bild direkt mit hoher Prioritaet laden -->
<img src="/img/hero.avif" alt="Produktansicht"
     fetchpriority="high" width="1200" height="600">

Die Wirkung ist in mehreren Fällen dokumentiert. Bei einem Test mit einer Flugsuche verbesserte der Hint den Largest Contentful Paint von 2,6 auf 1,9 Sekunden (web.dev), also um 0,7 Sekunden. DebugBear dokumentiert einen Fall, in dem das LCP-Bild nach dem Setzen des Attributs unmittelbar nach der Dokumentanforderung lud und der LCP von 4,2 auf 1,9 Sekunden (DebugBear) fiel. Addy Osmani berichtet, dass Priority Hints den LCP einer großen Handelsplattform um 4 Prozent (Addy Osmani) beschleunigten und manche Seiten in ihren Labortests 20 bis 30 Prozent (Addy Osmani) schnellere LCP-Werte erreichten. Die genaue Ersparnis hängt davon ab, wie spät der Browser das Bild sonst entdeckt hätte -- je größer der Wasserfall davor, desto größer der Hebel.

Der Kern in einem Satz

fetchpriority='high' nimmt dem Browser eine falsche Standardannahme ab: Statt das LCP-Bild wie ein nebensächliches zu behandeln und erst nach dem Layout hochzustufen, lädt er es sofort. Eine einzige Attributangabe, die genau dort ansetzt, wo der wahrgenommene Seitenaufbau entsteht.

Wichtig ist die Einordnung: fetchpriority ist ein Hinweis, kein Befehl. Der Browser versucht, der Entwicklervorgabe zu folgen, darf sie aber gegen seine eigenen Heuristiken abwägen, um Konflikte aufzulösen (web.dev). In der Praxis bedeutet das, dass die Wirkung am verlässlichsten dort ist, wo der Browser sonst eine erkennbar falsche Entscheidung getroffen hätte -- etwa beim spät hochgestuften LCP-Bild. Hat man das Bild dagegen ohnehin schon als eines der ersten Elemente im Kopf des Dokuments vorgeladen, fällt der zusätzliche Gewinn durch fetchpriority kleiner aus, weil der Browser den Download dann bereits früh angestoßen hat. Genau dieses Zusammenspiel von preload und fetchpriority betrachten wir weiter unten im Detail.

Genau ein Element: warum mehr nicht schneller ist

Der wichtigste Grundsatz beim Priority Hint lautet: genau ein Element bekommt high. Die Versuchung ist groß, gleich mehrere wichtige Bilder hochzustufen -- den Hero, die Slider-Bilder, die Logos. Doch damit kippt der Effekt ins Gegenteil. Bandbreite ist begrenzt, besonders auf Mobilnetzen. Werden mehrere Ressourcen gleichzeitig als hochpriorisiert angefordert, konkurrieren sie um dieselbe Leitung und bremsen sich gegenseitig aus. DebugBear beschreibt einen Fall, in dem sieben Slider-Bilder unterhalb des sichtbaren Bereichs fetchpriority='high' trugen: Erst als das Attribut von ihnen entfernt und nur auf dem LCP-Bild belassen wurde, lud dieses schneller -- der LCP verbesserte sich in der Summe um fast 4 Sekunden (DebugBear).

Wer alles hochstuft, priorisiert am Ende nichts. Der Wert von fetchpriority entsteht nicht durch möglichst viele high-Angaben, sondern durch die eine, die dem Browser sagt, welches Element wirklich zuerst gebraucht wird.

Projekterfahrung aus 50+ Performance-Projekten

Das high gehört also exklusiv auf das Element, das den Largest Contentful Paint bestimmt. Welches das ist, lässt sich nicht raten, sondern nur messen -- ein Labortest oder die Felddaten zeigen, welches Element auf den meisten Geräten als LCP gilt. Bei responsiven Layouts kann das je nach Bildschirmgröße variieren; hier helfen Felddaten zu erkennen, welches Bild über die große Mehrheit der Besuche hinweg das LCP-Element stellt. Wie sich Labor- und Felddaten dabei sinnvoll ergänzen, vertieft unser Beitrag zu RUM, CrUX und Performance-Budgets.

fetchpriority='low' als Gegenstück

Genauso wirksam wie das Hochstufen ist das gezielte Zurücknehmen. Skripte oder Bilder, die für den ersten Eindruck nicht zählen, lassen sich mit fetchpriority='low' bewusst nach hinten schieben, damit sie dem LCP-Pfad keine Bandbreite stehlen. So bekommt das eine wichtige Element freie Bahn, während alles Nebensächliche wartet -- die beiden Werte arbeiten zusammen.

Das LCP-Bild aus dem Lazy Loading heraushalten

Lazy Loading ist eine der wirksamsten Techniken für Bilder unterhalb des sichtbaren Bereichs: Mit loading='lazy' lädt der Browser ein Bild erst, wenn es in die Nähe des Viewports scrollt. Bei einer Seite mit zehn Bildern, von denen nur das erste -- das LCP-Element -- im ersten Viewport sichtbar ist, kann das Lazy-Loaden der übrigen neun Bilder das Laden des ersten sogar beschleunigen (MDN), weil sie ihm keine Bandbreite mehr stehlen. Genau hier liegt aber die Falle: Das LCP-Bild selbst sollte gerade nicht lazy geladen werden.

Wird loading='lazy' versehentlich auf das Hero-Bild gesetzt -- etwa weil ein Theme oder Plugin pauschal alle Bilder lazy lädt -- verzögert das genau den Inhalt, den fetchpriority beschleunigen soll. Der Browser wartet dann, bis er weiß, ob das Bild im Viewport liegt, statt es sofort zu laden. Das LCP-Bild gehört daher eager geladen, also ohne lazy-Attribut, und zusätzlich mit fetchpriority='high' versehen. Diese Kombination ist der Standardfall: das wichtigste Bild eager und hochpriorisiert, alle übrigen lazy.

In der Praxis ist dieser eine Fehler -- das lazy geladene Hero-Bild -- einer der häufigsten Gründe für einen unnötig hohen LCP. Viele Content-Management-Systeme und Theme-Baukästen aktivieren Lazy Loading inzwischen pauschal für alle Bilder, weil es unterhalb des Folds meist hilft. Für das eine Bild im sichtbaren Bereich kehrt sich der Nutzen jedoch um. Deshalb prüfen wir bei jeder Optimierung zuerst, ob das LCP-Bild versehentlich im Lazy Loading hängt, bevor wir überhaupt über den Priority Hint nachdenken -- denn ein high-Attribut auf einem lazy geladenen Bild hebt sich gegenseitig auf.

ElementloadingfetchpriorityBegründung
LCP-Bild (Hero)eager (kein lazy)highBestimmt den LCP, muss zuerst laden
Bilder unter dem FoldlazyautoErst beim Scrollen nötig, sparen Bandbreite
Dekoratives HintergrundbildeagerautoSelten LCP, kein Vorrang nötig
Nebensächliches Skript-lowSoll dem LCP-Pfad keine Bandbreite stehlen

Zusammenspiel mit preload und srcset

fetchpriority und preload lösen zwei verschiedene Teilprobleme und entfalten zusammen die volle Wirkung. Das Problem der späten Entdeckung -- der Browser findet ein Bild erst spät im Markup oder weil es per CSS-Hintergrund geladen wird -- löst preload, indem es den Download früh anstößt. Das Problem der falschen Priorität löst fetchpriority. Wird ein Bild nur vorgeladen, behält es seine niedrige Standardpriorität; erst fetchpriority='high' am preload-Tag hebt sie an. Beide gehören daher zusammen, wenn das LCP-Element spät entdeckt wird, etwa als CSS-Hintergrundbild.

preload-lcp.html
<!-- LCP-Hintergrundbild vorladen UND hoch priorisieren -->
<link rel="preload" href="/img/hero.avif" as="image"
      fetchpriority="high">

<!-- Steht das Bild als img im Markup, genuegt das Attribut: -->
<img src="/img/hero.avif" alt="Hero" fetchpriority="high">

Bei responsiven Bildern mit srcset und sizes gehört das Attribut an das img-Element selbst, nicht an das umgebende picture-Element (DebugBear). Der Browser wählt dann zunächst anhand von srcset und sizes die passende Bildvariante aus und lädt diese mit hoher Priorität. So lässt sich das LCP-Bild gleichzeitig responsiv ausliefern und priorisieren -- die beiden Optimierungen schließen sich nicht aus. Wer das LCP-Bild zusätzlich verkleinert, etwa durch ein modernes Format, gewinnt doppelt: Ein als AVIF mit 80 Prozent Qualität gespeichertes Bild kam in einem Beispiel auf eine 95-prozentige (MDN) Ersparnis und schrumpfte von 1 MB auf 46 KB.

img im Markup

Steht das LCP-Bild als img-Tag direkt im HTML, genügt fetchpriority='high' am Tag. Der Browser entdeckt es früh und lädt es nun auch mit hoher Priorität, statt es nachträglich hochzustufen.

CSS-Hintergrundbild

Wird das LCP-Bild per CSS-Hintergrund geladen, entdeckt der Browser es spät. Hier preload mit as='image' und fetchpriority='high' kombinieren, damit es früh und mit Vorrang lädt.

Responsiv mit srcset

Bei srcset und sizes gehört fetchpriority an das img-Element, nicht an picture. Der Browser wählt die passende Variante und lädt sie hochpriorisiert -- responsiv und schnell zugleich.

Die häufigsten Fehler beim Priority Hint

Der erste und folgenreichste Fehler ist das Überpriorisieren: mehrere Bilder gleichzeitig auf high zu setzen. Wie beschrieben, konkurrieren sie dann um die Bandbreite und bremsen das wirklich wichtige Bild aus. Der zweite Fehler ist das versehentliche Lazy-Loaden des LCP-Bildes, oft verursacht durch ein Theme oder Plugin, das pauschal alle Bilder lazy lädt. Der dritte Fehler ist, das Attribut auf das falsche Element zu setzen -- nicht jedes Hero-Bild ist auf jedem Gerät das LCP-Element, und ohne Messung trifft man hier leicht daneben.

Der vierte Fehler ist, fetchpriority isoliert zu betrachten. Der Hint beschleunigt den Moment, in dem der Browser das Bild lädt -- er ersetzt aber nicht die übrigen Bausteine eines schnellen LCP. Eine langsame Serverantwort verzögert jede Ressource gleichermaßen, wie unser Beitrag zur TTFB-Optimierung zeigt. Ein zu großes, unkomprimiertes Bild lädt auch mit hoher Priorität langsam. Und ein Layout, das nach dem Bildladen noch verspringt, drückt zwar nicht den LCP, aber die Stabilität, die wir im Beitrag zum Visual Stability Index als CLS-Nachfolger behandeln. Der Priority Hint ist ein Baustein, kein Ersatz für das Gesamtbild.

  • Das LCP-Element zuerst messen, nicht raten -- per Labortest und Felddaten bestimmen
  • Genau ein Element mit fetchpriority='high' versehen, statt mehrere gleichzeitig
  • Das LCP-Bild eager laden, also kein loading='lazy' auf dem Hero
  • Bei CSS-Hintergrundbildern preload und fetchpriority='high' kombinieren
  • Bei srcset das Attribut an das img-Element setzen, nicht an picture
  • Nebensächliche Ressourcen mit fetchpriority='low' bewusst zurücknehmen
  • Die Wirkung nach der Änderung in den Felddaten gegenprüfen, nicht nur im Labor

Der große Vorteil von fetchpriority ist, dass es rein deklarativ im Markup steht. Es braucht keine neue Infrastruktur, keinen zusätzlichen Build-Schritt und keine Server-Konfiguration -- ein Attribut auf einem Element genügt. Damit gehört der Priority Hint zu den günstigsten Maßnahmen, um den Largest Contentful Paint zu verbessern, und zugleich zu denen mit dem besten Verhältnis von Aufwand zu Wirkung. In unserer Frontend-Optimierung ist er meist einer der ersten Handgriffe, sobald wir das LCP-Element zweifelsfrei identifiziert haben.

Quellen und Studien

Dieser Artikel basiert auf Daten aus: web.dev (Optimize resource loading with the Fetch Priority API, Optimize LCP), MDN Blog (Fix your website's Largest Contentful Paint by optimizing image loading), DebugBear (The fetchpriority=high Attribute, Avoid Overusing fetchpriority=high), Addy Osmani (Use fetchpriority=high to load your LCP hero image sooner) und Web Almanac 2024 (HTTP Archive, Performance). Alle genannten Statistiken wurden zum Zeitpunkt der Veröffentlichung geprüft.