Lazy Loading im SEO

Wie Lazy Loading von Bildern und Iframes die Core Web Vitals verbessert, das loading-Attribut, die SEO-Risiken von Lazy Loading oberhalb des sichtbaren Bereichs und wie Googlebot verzögert geladene Inhalte rendert.

Erstveröffentlicht: 2. Juli 2026 · Zuletzt aktualisiert: 22. Aug. 2026 · Fortgeschritten
Sprachen

Lazy Loading verschiebt Bilder und Iframes außerhalb des sichtbaren Bereichs, bis sie beim Scrollen in den Blick kommen, reduziert das anfängliche Seitengewicht und hilft den Core Web Vitals. Die native Methode ist das loading="lazy"-Attribut auf <img> und <iframe> – kein JavaScript nötig. Der große Fehler ist, das Hero-/LCP-Bild lazy zu laden, was den Largest Contentful Paint verzögert. Googlebot scrollt nicht und klickt nicht, daher kann alles, was hinter einem Scroll- oder Klickereignis verborgen ist, ungesehen bleiben. Es ist kein direkter Ranking-Faktor – die Wirkung läuft über Core Web Vitals und Crawlbarkeit. Überprüfen Sie, was tatsächlich im URL-Inspektionstool der Google Search Console gerendert wird: Die Bild-URLs sollten im src-Attribut des gerenderten HTML stehen.

TL;DR – Lazy Loading verschiebt Bilder und Iframes außerhalb des sichtbaren Bereichs, bis sie sich dem Viewport nähern. Das reduziert das anfängliche Seitengewicht (hilft beim LCP) und die Haupt-Thread-Arbeit beim Start (hilft beim INP). Das native loading="lazy"-Attribut auf <img>/<iframe> hat die meisten JS-Bibliotheken ersetzt; nur lazy und eager sind sinnvolle Werte (auto ist veraltet). Die schädlichen Fehler: das LCP-Bild bzw. das Bild oberhalb des Folds lazy zu laden (verzögert genau die Metrik, die Sie verbessern wollen) und Inhalte hinter Scrollen/Klicken zu verstecken – was Googlebot nie auslöst, weil es nicht mit der Seite interagiert. Es ist kein direkter Ranking-Faktor; die Wirkung läuft über Core Web Vitals und Crawlbarkeit. Überprüfen Sie im URL-Inspektionstool der Google Search Console, dass Bild-URLs im src-Attribut des gerenderten HTML landen.

Was Lazy Loading tatsächlich bewirkt

Die Idee ist einfach: Ressourcen sollten erst geladen werden, wenn sie gebraucht werden, statt alle auf einmal. Auf einer medienlastigen Seite hält das sofortige Herunterladen jedes Bildes und eingebetteten Inhalts den Browser damit beschäftigt, Dinge zu holen, welche die besuchende Person vielleicht nie sieht – das verschwendet Bandbreite, Speicher und Akku. Das Verschieben der Inhalte außerhalb des sichtbaren Bereichs lässt den Inhalt oberhalb des Folds schneller erscheinen. Martin Splitt hat genau diesen Punkt in Googles Folge „Lazy Loading verständlich erklärt“ angesprochen: Das Ziel ist, Arbeit zu vermeiden, die nichts bringt, denn nicht-kritische Bilder, auf welche die Seite gut verzichten könnte, halten den Browser nur beschäftigt.

Dies steht im Zusammenhang mit den Core Web Vitals, auf die viele achten. Weniger Bytes, die anfangs um das Netzwerk konkurrieren, bedeuten, dass das Largest Contentful Paint-Element früher gerendert werden kann. Bei Iframes – Anzeigen, Social Widgets, Kommentarbereiche, Karten – reduziert das Aufschieben auch die Arbeit des Hauptthreads während des Starts, was ein Gewinn für Interaction to Next Paint ist, nicht nur für LCP. Die eigene web.dev-Anleitung von Google bezeichnet Lazy-Loading-Iframes als eine INP-Verbesserung während des Seitenladens.

Nativer vs. JavaScript-gesteuerter Lazy Loading

Vor einigen Jahren erhielten Browser ein natives loading-Attribut für Bilder und Iframes, so dass Sie die gesamte Aufgabe dem Browser überlassen können, anstatt eine JavaScript-API einzurichten. In meinem JavaScript-SEO-Leitfaden bei Ahrefs mache ich dieselbe Beobachtung: Seit ich diesen Beitrag ursprünglich geschrieben habe, hat sich Lazy Loading weitgehend von JavaScript-gesteuert zu browserbasiert entwickelt. Sie werden weiterhin auf JS-gesteuerte Setups stoßen, und bei Bildern sind diese in der Regel in Ordnung – ich prüfe, ob tatsächliche Inhalte (nicht nur Bilder) lazy geladen werden, denn diese Setups haben dazu geführt, dass Inhalte nicht korrekt erfasst wurden.

Die native Version:

<!-- Below-the-fold image: defer it -->
<img src="gallery-07.jpg" loading="lazy" width="800" height="600" alt="…">

<!-- Off-screen embed: defer it -->
<iframe src="https://www.youtube.com/embed/…" loading="lazy" title="…"></iframe>

Legen Sie bei Lazy-Bildern immer explizite width/height (oder ein Seitenverhältnis) fest, damit der Browser den Platz reserviert, bevor das Bild geladen wird – das ist das größte Layout-Shift-Risiko bei verzögerten Bildern. Reservierte Abmessungen sind jedoch keine absolute CLS-Garantie: Wenn sich das umgebende Layout oder ein responsiver Zuschnitt nach dem Laden des Bildes noch ändert, kann es weiterhin zu einem Shift kommen. Bestätigen Sie dies daher mit einer echten Layout-Shift-Aufzeichnung, anstatt anzunehmen, dass feste Abmessungen allein das Problem lösen.

Lazy Loading und Iframes benötigen eine weitere Unterscheidung: loading="lazy" auf einem <iframe> verzögert nur wann das Abrufen und Erstellen des Embeds erfolgt. Es legt nicht dessen title, Fokusverhalten, sandbox, allow/Permissions-Policy, referrerpolicy, Einwilligungshandhabung oder Abmessungen für Sie fest – diese benötigen weiterhin eigene Aufmerksamkeit, und ein Embed kann weiterhin Arbeit verrichten (Skripte, Tracking-Pixel, Layout), sobald es für das Laden in Frage kommt. Und gehen Sie nicht davon aus, dass “below the fold” überall gleich funktioniert: display: none-Inhalte, Offscreen-Karussellfolien, transformierte Elemente und verschachtelte Scroll-Container können den Viewport anders schneiden als ein einfaches Element unterhalb der Falz. Testen Sie daher das tatsächliche Layout und die Navigationssteuerung, anstatt Gleichheit anzunehmen.

Die Werte des loading-Attributs

Nur zwei Werte sind heute relevant:

  • loading="lazy" – Ressource verzögern, bis sie sich in der Nähe des Viewports befindet.
  • loading="eager" – sofort laden, das Standardverhalten. Verwenden Sie es, um Bilder oberhalb der Falz explizit zu kennzeichnen.
Evidence for this claim The native loading attribute supports lazy loading for images and iframes without a JavaScript lazy-loading library. Scope: Browser-level lazy loading behavior; browser heuristics decide the fetch distance. Confidence: high · Verified: web.dev: Browser-level image lazy loading

In älteren Artikeln sehen Sie möglicherweise loading="auto" – es ist in Chrome veraltet, also greifen Sie nicht darauf zurück. Es besteht keine Notwendigkeit; das Weglassen des Attributs liefert bereits das Standardverhalten (eager).

Wie nah ist “nah”? loading="lazy" ist ein Hinweis, keine vom Autor kontrollierte Garantie – die Spezifikation überlässt die tatsächliche Entscheidung über die Nähe zum Viewport dem Browser. Chromium versucht, eine Lazy-Ressource früh genug abzurufen, damit sie bereit ist, wenn Sie zu ihr scrollen, und die Auslöseentfernung variiert je nach Browser, Verbindungsgeschwindigkeit und Ressourcentyp; es ist kein fester Pixelwert, auf den Sie sich verlassen oder den Sie über Browser und Versionen hinweg reproduzieren können. Veröffentlichen Sie keine – und vertrauen Sie keiner – spezifischen Zahl wie “lädt N Pixel vor dem Viewport”; behandeln Sie das Fenster nahe dem Viewport als implementierungsdefiniert und bestätigen Sie das tatsächliche Verhalten mit einer Netzwerkaufzeichnung im Browser/bei der Verbindung, die Ihnen wichtig ist, anstatt eine Konstante anzunehmen.

Natives Lazy Loading funktioniert auch gut mit responsiven Bildern: Es gilt für die normale src- und srcset/sizes-Auswahl, sodass Sie durch das Hinzufügen von loading="lazy" kein responsives Bildverhalten verlieren. Wenn Sie die echte URL stattdessen nur in einem data-*-Attribut verstecken, damit ein Skript sie später austauscht, hängt das Laden nun von diesem Skript ab – testen Sie das gerenderte HTML und was passiert, wenn das Skript fehlschlägt (mehr dazu in den Tabs Skripte und Fehlerbehebung).

Evidence for this claim Native lazy loading works with ordinary src and responsive srcset/sizes selection; hiding the real URL only in data-* attributes makes loading dependent on script and should be tested in rendered HTML and under script failure. Scope: responsive image fetching and layout Confidence: high · Verified: HTML Standard: img

Der häufigste Fehler: Lazy Loading des LCP-Bildes / des Bildes über dem Falz

Das ist der Fehler, den ich am häufigsten sehe, und alle Quellen sind sich einig. Wenn Sie das Hero-Bild – oder ein beliebiges Bild, das wahrscheinlich das LCP-Element ist – per Lazy Loading laden, haben Sie dem Browser gesagt, er solle auf das wichtigste Pixel für die wahrgenommene Ladegeschwindigkeit warten. Der Browser kann ein Bild außerdem erst dann per Lazy Loading laden, wenn er weiß, wo das Bild auf der Seite platziert wird. Daher laden Bilder über dem Falz mit Lazy Loading tendenziell langsamer als ohne. Das verzögert direkt den Largest Contentful Paint, die Metrik, die Google zufolge innerhalb der ersten 2,5 Sekunden nach dem Laden erreicht werden sollte.

Do not lazy-load the observed or likely LCP image; confirm the actual request and paint timing in a trace. Quelle: Lazy Loading

The eager path discovers the likely LCP image in HTML and starts its request promptly. The lazy path waits for browser loading heuristics before request start. The comparison uses no fixed timing values and notes that actual LCP must be measured.

© Patrick Stox LLC · CC BY 4.0 ·

Splitt formulierte die Kehrseite in der SOTR-Episode deutlich: Wenn Sie Lazy Loading nicht dort einsetzen, wo Sie es sollten, wird das wahrscheinlich einen Aspekt der Core Web Vitals beeinträchtigen – höchstwahrscheinlich LCP. Es wirkt also in beide Richtungen. Die Regel:

  • Wahrscheinlicher oder beobachteter LCP-Kandidat → eagerly laden (loading="lazy" weglassen oder eager setzen). Erwägen Sie fetchpriority="high" für das LCP-Bild.
  • Unterhalb des Falzes → loading="lazy".

Nicht jedes Bild über dem Falz ist der LCP-Kandidat – identifizieren Sie das tatsächliche (ein Performance-Trace oder PageSpeed Insights nennt es) und überprüfen Sie dessen Anfragezeitpunkt, anstatt jedes Bild im ersten Bildschirm gleich zu behandeln. Und das sind getrennte Hinweise, keine einzelne Einstellung: loading="eager" (oder das Weglassen von loading) bedeutet nur, dass der Browser die Entdeckung der Ressource nicht aufschiebt – es erhöht selbst nicht die Abrufpriorität. fetchpriority ist ein separater, beratender Hinweis zusätzlich dazu. Ein <link rel="preload"> zusammen mit loading="lazy" für dieselbe Ressource sendet dem Browser widersprüchliche Absichten. Überprüfen Sie daher den tatsächlichen Netzwerk-Wasserfall, anstatt anzunehmen, dass die Kombination das tut, was Sie erwarten.

Das pauschale Anti-Pattern ist das Aktivieren von Lazy Loading für jedes Bild auf der gesamten Website – eine häufige CMS-Standardeinstellung. Wie Splitt anmerkte: Wenn jedes Bild per Lazy Loading geladen wird, werden auch Bilder, die sofort sichtbar sind (oder sein sollten), per Lazy Loading geladen – genau der Fall, den Sie vermeiden möchten.

Wie Googlebot lazy-geladene Inhalte rendert

Hier ist die Crawling-Realität, über die viele stolpern: Googlebot scrollt nicht und klickt nicht. Er rendert Ihre Seite mit einem Headless-Browser, simuliert aber keine Benutzerinteraktion. Google sagt das direkt – seine empfohlenen Lazy-Loading-Methoden verlassen sich bewusst nicht auf Benutzeraktionen wie Scrollen oder Klicken, weil Google Search nicht mit Ihrer Seite interagiert.

Evidence for this claim Google Search does not scroll or click to trigger lazy-loaded content, so implementations should not depend on user interaction and should expose resource URLs in rendered HTML. Scope: Google Search guidance for JavaScript-driven lazy loading. Confidence: high · Verified: Google Search Central: Lazy-load content

Deshalb ist das Wie Ihrer Implementierung entscheidend. Googles Dokumentation listet drei Implementierungen auf, die es als sicher betrachtet: das eingebaute Lazy Loading des Browsers für Bilder und Iframes, die IntersectionObserver-API (mit einem Polyfill) oder eine JavaScript-Bibliothek, die Daten lädt, sobald sie in den Viewport gelangen. Alle drei basieren auf der Viewport-Überschneidung – nicht auf einem Scroll- oder Klick-Ereignis, das Googlebot nie auslösen wird.

Das Hochrisikomuster ist eine eigene Skriptbibliothek oder eine Drittanbieterbibliothek für verzögertes Laden. Wenn die Bibliothek sich fehlerhaft verhält und die Bildadresse nie im src-Attribut landet, wird Google dieses Bild einfach nicht aufnehmen — Splitt beschrieb genau diesen Fehlermodus in der SOTR-Episode. Es gibt nichts zu indizieren, wenn die URL nicht vorhanden ist. Das ist dasselbe, was ich in meinem JavaScript-SEO-Leitfaden anspreche: Bild-Lazy-Loading ist in der Regel in Ordnung, aber bei lazy-geladenen Inhalten schleichen sich Indizierungsprobleme ein, und die Lösung ist, zu prüfen, was Google tatsächlich rendert. Google sagt es ausdrücklich: “Check the rendered HTML to make sure your content is in the rendered HTML.” (Übersetzung) „Prüfen Sie das gerenderte HTML, um sicherzustellen, dass Ihre Inhalte darin enthalten sind.“ Googles Dokumentation

Unendliches Scrollen ist ein anderes Problem

Verwechseln Sie das einfache Lazy Loading von Bildern/iframes nicht mit Infinite Scroll oder paginiertem Laden. Das Zurückstellen von Bildern ist eine Sache; das Laden neuer Inhaltsblöcke beim Scrollen des Nutzers ist eine andere und erfordert eine eigene Architektur. Die Anleitung von Google: Geben Sie jedem Block eine dauerhafte, eindeutige URL, halten Sie den Inhalt pro URL stabil (verwenden Sie absolute Seitennummern wie ?page=12, nicht relative Werte wie ?date=yesterday), und aktualisieren Sie die angezeigte URL über die History API, sobald ein Block zum primär sichtbaren Inhalt wird, damit er aktualisiert, geteilt und verlinkt werden kann. Wenn Sie das überspringen, wird der tiefere Inhalt hinter einem endlosen Scroll möglicherweise nie zuverlässig gecrawlt oder indexiert.

So testen Sie es

Der Verifizierungspfad ist in Googles Dokumentation und in meiner eigenen Methodik derselbe: Verwenden Sie das URL Inspection Tool der Search Console und prüfen Sie das gerenderte HTML. Wenn Ihre Bild- (oder Video-) URLs im src-Attribut der <img>/<video>-Elemente in diesem gerenderten HTML erscheinen, funktioniert Ihr Setup. Google sagt dies ausdrücklich — prüfen Sie das gerenderte HTML, um sicherzustellen, dass Ihr Inhalt darin enthalten ist. Wenn die URL in src fehlt, ist das Ihr Problem, und es führt in der Regel auf einen Scroll-/Klick-Trigger oder eine defekte Bibliothek zurück.

Für ein lazy-loadendes Produktraster gehen Sie über diese Präsenzprüfung hinaus. Führen Sie die Infinite Scroll SEO-Testmatrix mit Standard- und hohen Viewports durch, mit frischer Navigation und Größenänderung nach dem Laden, mit Läufen ohne Aktion und mit inkrementellem Scrollen, mit eindeutigen Produktlink-Zählungen und mit einer Prüfung des Accessibility-Baums. Das Ändern der Größe einer initialisierten Seite ist nicht gleichbedeutend mit der Navigation bei der endgültigen Viewport-Größe, da Observer und Batch-Berechnungen möglicherweise nur während des Startvorgangs registriert werden. Evidence for this claim Google Search does not scroll or click to trigger lazy-loaded content, so implementations should not depend on user interaction and should expose resource URLs in rendered HTML. Scope: Google Search guidance for JavaScript-driven lazy loading. Confidence: high · Verified: Google Search Central: Lazy-load content

Sie können sich auch auf Ihre Werkzeuge zur Webleistung stützen: PageSpeed Insights markiert Bilder außerhalb des sichtbaren Bereichs, die Sie verschieben sollten. In meinem PageSpeed-Insights-Leitfaden bei Ahrefs weise ich darauf hin, dass der Audit „defer offscreen elements“ Ihnen sagt, Bilder lazy zu laden – ein praktischer Weg, die Diagnose, die Sie bereits ausführen, mit der Lösung zu verbinden.

Ranking-Signal-Ehrlichkeit

Machen Sie klar, was Lazy Loading ist und was nicht. Die Verwendung ist kein direkter Ranking-Faktor, und die Nichtverwendung ist keine Strafe. Der Zusammenhang zum Ranking ist indirekt: Er verläuft über die Core Web Vitals (hauptsächlich LCP, manchmal INP bei iframes) und über die Crawlbarkeit, wenn eine schlechte Implementierung Inhalte versteckt. Splitt charakterisierte den Ranking-Effekt über die Core Web Vitals in den meisten Fällen als winzigen, minimalen Faktor. Optimieren Sie Lazy Loading also für die Ladeerfahrung Ihrer Nutzer und für eine saubere Indexierung – nicht, weil Sie von dem Attribut selbst einen Ranking-Sprung erwarten.

Wo dies einzuordnen ist

Lazy Loading ist ein Hebel im breiteren Werkzeugkasten für die Webleistung. Es ergänzt sich mit Ressourcenhinweisen (Preload/Preconnect für die Ressourcen, die Sie früh möchten), der Schriftlade-Strategie, Caching und einem CDN – und wird letztlich über Core Web Vitals bewertet. Wenn die Aufteilung in Inhalte „oberhalb des sichtbaren Bereichs“ und „unterhalb des sichtbaren Bereichs“ stimmt, ist es einer der günstigsten verfügbaren Gewinne.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.