Lazy Chargement

Comment lazy chargement images et iframes améliore Core Web Vitals, le chargement attribut, le SEO risques de lazy-loading ci-dessus-le-fold contenu, et comment Googlebot renders deferred contenu.

Première publication : 2 juil. 2026 · Dernière mise à jour : 3 août 2026 · Avancé

Lazy chargement defers off-screen images et iframes jusqu’à ils sont à propos de à scroll dans view, cutting initial page weight et helping Core Web Vitals. Le native façon est le chargement="lazy" attribut on <img> et <iframe> — aucun JavaScript nécessaire. Le big mistake est lazy-loading votre hero/LCP image, qui delays Plus grand affichage de contenu. Googlebot ne fait pas scroll or click, donc n’importe quoi gated behind a scroll or click event peut go unseen. c’est pas a direct facteur de classement — le effect exécute via Core Web Vitals et crawlability. Vérifier ce que en réalité renders dans Search Console's Inspection d’URL Outil: le image URLs devrait sit dans le src attribut de le rendu HTML.

TL;DR — Lazy chargement defers off-screen images et iframes jusqu’à ils near le viewport, cutting initial page weight (aide LCP) et startup main-thread fonctionner (aide INP). Le native loading="lazy" attribut on <img>/<iframe> a replaced la plupart JS libraries; seulement lazy et eager sont meaningful valeurs (auto est deprecated). Le damaging mistakes: lazy-loading le LCP/ci-dessus-le-fold image (delays le very metric vous êtes chasing), et gating contenu behind scroll/click — qui Googlebot jamais triggers parce que il ne fait pas interact avec lune page. c’est pas a direct facteur de classement; le effect exécute via Core Web Vitals et crawlability. Vérifier dans Search Console’s Inspection d’URL Outil que image URLs land dans le src attribut de le rendu HTML.

Ce que lazy chargement en réalité fait

Le idea est simple: seulement charger resources quand vous besoin les, au lieu de chargement tout à une fois. On a media-heavy page, downloading chaque image et embed up front garde le navigateur busy fetching choses le visitor peut jamais scroll à — burning bandwidth, memory, et battery pour rien. Deferring le off-screen ones lets le ci-dessus-le-fold contenu paint sooner. Martin Splitt fait exactly ce point on Google’s Recherche Off le Record episode “Lazy loading demystified”: le goal est à éviter fonctionner que yields rien, parce que non-critical images lune page voudrait être fine sans simplement garder le navigateur occupied.

Ce connects à le Core Web Vitals la plupart personnes sont chasing. Fewer bytes competing pour le network up front signifie le Plus grand affichage de contenu element peut rendre sooner. Pour iframes — ads, social widgets, comment sections, maps — deferring les aussi cuts main-thread fonctionner during startup, qui est an Interaction jusqu’au prochain affichage win, pas simplement an LCP un. Google’s propre web.dev guidance frames lazy-chargé iframes as an INP improvement during page charger.

Native vs. JavaScript-driven lazy chargement

A quelques années ago, navigateurs gained a native loading attribut pour images et iframes, donc vous pouvez hand le entier job à le navigateur au lieu de wiring up a JavaScript API. Dans mon JavaScript SEO guide à Ahrefs Je faire le même observation: since Je premier wrote que piece, lazy chargement a mostly déplacé depuis étant JavaScript-driven à étant handled par navigateurs. Vous’ll encore exécuter dans JS-driven setups, et pour images ils sont généralement fine — le chose Je vérifier est si réel contenu (pas simplement images) est étant lazy chargé, parce que ceux setups sont le ones que ont caused contenu pas à être picked up correctement.

The 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>

Toujours définir explicit width/height (or an aspect-ratio) on lazy images donc le navigateur reserves le space avant le image charge — c’est le biggest layout-shift risque avec deferred images. Reserved dimensions ne sont pas an absolute CLS guarantee, though: si le surrounding layout or a responsive crop encore changements après le image charge, vous pouvez encore voir a shift, donc confirmer avec a réel layout-shift trace plutôt que assuming fixed dimensions alone settle il.

Lazy chargement et iframes besoin un plus distinction: loading="lazy" on an <iframe> seulement defers quand le embed’s récupérer et creation se produire. Il ne fait pas définir son title, focus behavior, sandbox, allow/permissions policy, referrerpolicy, consent handling, or dimensions pour vous — ceux encore besoin leur propre attention, et an embed peut garder doing fonctionner (scripts, tracking pixels, layout) une fois il becomes eligible à charger. Et ne pas assume “ci-dessous le fold” behaves le même everywhere: display: none contenu, offscreen carousel slides, transformed elements, et nested scroll containers peut intersect le viewport differently que a plain ci-dessous-le-fold element, donc tester le réel layout et navigation contrôle plutôt que assuming equivalence.

The loading attribute’s valeurs

Seulement two valeurs matter today:

  • loading="lazy" — defer le resource jusqu’à c’est near le viewport.
  • loading="eager" — charger il immédiatement, le par défaut behavior. Utiliser il à être explicit à propos de ci-dessus-le-fold images.
Preuve à l’appui de cette affirmation The native loading attribute supports lazy loading for images and iframes without a JavaScript lazy-loading library. Portée : Browser-level lazy loading behavior; browser heuristics decide the fetch distance. Niveau de confiance : élevé · Vérifié : web.dev: Browser-level image lazy loading

Vous peut voir loading="auto" dans older articles — c’est deprecated dans Chrome, donc ne pas reach pour il. il y a aucun besoin à; omitting le attribut déjà donne vous le par défaut (eager) behavior.

Comment near est “near”? loading="lazy" est a hint, pas an author-controlled guarantee — le spec laisse le réel near-viewport décision à le navigateur. Chromium tries à récupérer a lazy resource early suffisant que c’est ready par le temps vous scroll à il, et le trigger distance varies par navigateur, connection speed, et resource type; il n’est pas a fixed pixel valeur vous pouvez rely on or reproduce à travers navigateurs or versions. ne pas publish — or confiance — a spécifique “charge N pixels avant le viewport” number; treat le near-viewport window as implementation-defined et confirmer réel behavior avec a Network trace on le navigateur/connection vous care à propos de au lieu de assuming a constant.

Native lazy chargement aussi plays fine avec responsive images: il s’applique à ordinary src et srcset/sizes selection, donc vous ne pas lose responsive image behavior par ajout loading="lazy". Si vous à la place hide le réel URL seulement dans a data-* attribut pour a script à swap dans plus tard, chargement maintenant dépend on que script — tester le rendu HTML et ce que se produit si le script fails (plus on ce dans le Scripts et Troubleshooting tabs).

Preuve à l’appui de cette affirmation 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. Portée : responsive image fetching and layout Niveau de confiance : élevé · Vérifié : HTML Standard: img

Le #1 mistake: lazy-loading le LCP / ci-dessus-le-fold image

Ce est le échec Je voir la plupart, et chaque source agrees on il. Si vous lazy-charger le hero image — or quelconque image probable à être le LCP element — vous avez told le navigateur à wait on le unique la plupart important pixel pour perceived charger speed. Le navigateur aussi ne peut pas lazy-charger an image jusqu’à il knows où le image va sit on lune page, donc lazy ci-dessus-le-fold images tend à charger plus slowly que eager ones. Que directement delays Plus grand affichage de contenu, le metric Google dit devrait resolve dans le premier 2,5 seconds de charger.

Ne faites pas lazy-charger le observed or probable LCP image; confirmer le réel requête et paint timing dans a trace. Source : Lazy Loading

Le eager chemin discovers le probable LCP image dans HTML et commence son requête promptly. Le lazy chemin waits pour navigateur chargement heuristics avant requête commencer. Le comparaison utilise aucun fixed timing valeurs et notes que réel LCP doit être mesuré.

© Patrick Stox LLC · CC BY 4.0 ·

Splitt put le flip side plainly on le SOTR episode: si vous êtes pas en utilisant lazy chargement où vous devez, que va probably hurt some aspect de Core Web Vitals — la plupart probable LCP. Donc il cuts les deux façons. Le règle:

  • Probable or observed LCP candidate → charger eagerly (omit loading="lazy", or définir eager). Considérer fetchpriority="high" on the LCP image.
  • Ci-dessous the fold → loading="lazy".

Pas chaque image ci-dessus le fold est le LCP candidate — identifier le réel un (a Performances trace or PageSpeed Insights va nom il) et vérifier son requête timing plutôt que treating chaque premier-screen image le même. Et ces sont séparé hints, pas un paramètre: loading="eager" (or omitting loading) seulement signifie le navigateur ne va pas defer discovery de le resource — il ne fait pas itself raise récupérer priority. fetchpriority est a distinct, advisory hint on top de que. Stacking a <lien rel="preload"> with loading="lazy" on le même resource sends le navigateur conflicting intent, donc vérifier le réel network waterfall plutôt que assuming le combination fait ce que vous expect.

Le blanket anti-modèle est switching on lazy chargement pour chaque image site-wide — a courant CMS par défaut. As Splitt noted, si chaque image est lazy chargé, alors images que sont (or devrait être) immédiatement visible obtenir lazy chargé aussi, qui est exactly le cas vous vouloir à éviter.

Comment Googlebot renders lazy-chargé contenu

Ici’s le exploration reality que trips personnes up: Googlebot ne fait pas scroll, et il ne fait pas click. Il renders votre page avec a headless navigateur, mais il ne fait pas simulate a utilisateur interacting avec il. Google states ce directement — son recommended lazy-loading méthodes deliberately ne pas rely on utilisateur actions comme scrolling or clicking, parce que Recherche Google ne fait pas interact avec votre page.

Preuve à l’appui de cette affirmation 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. Portée : Google Search guidance for JavaScript-driven lazy loading. Niveau de confiance : élevé · Vérifié : Google Search Central: Lazy-load content

c’est pourquoi le comment de votre implementation matters. Google’s doc listes three implementations il considers sûr: le navigateur’s built-dans lazy chargement pour images et iframes, le IntersectionObserver API (avec a polyfill), or a JavaScript library que charge données as il enters le viewport. Tout three clé off viewport intersection — pas a scroll or click event que Googlebot va jamais fire.

Le élevé-risque modèle est a custom or tiers JS lazy-charger library. Si le library misbehaves et le image URL jamais lands dans le src attribut, Google simplement ne va pas pick que image up — Splitt décrit exactly ce échec mode on le SOTR episode. il y a rien à indexer si l’URL n’est pas là. Ce est le même chose Je flag dans mon JavaScript SEO guide: image lazy chargement est généralement fine, mais lazy-chargé contenu est où indexation problèmes creep dans, et le corriger est à vérifier ce que Google en réalité renders.

Infinite scroll is a différent problem

ne pas conflate basic image/iframe lazy chargement avec infinite scroll or paginated chargement. Deferring images est un chose; chargement nouveau chunks de contenu as le utilisateur scrolls est un autre, et il nécessite son propre architecture. Google’s guidance: donner chaque chunk a persistent, unique URL, garder le contenu stable per URL (utiliser absolute page numbers comme ?page=12, pas relative valeurs comme ?date=yesterday), et mettre à jour le affiché URL avec le History API as chaque chunk becomes le principal visible contenu donc il peut être refreshed, shared, et lié. Skip que et le deeper contenu behind an endless scroll peut jamais être reliably exploré or indexé.

Comment tester it

«The verification path is the same in Google’s doc and in my own methodology: use Search Console’s URL Inspection Tool and look at the rendered HTML. If your image (or video) URLs appear in the src attribute on the <img>/<video> elements in that rendered HTML, your setup works. Google says this outright — check the rendered HTML to make sure your content is in it. If the URL is missing from src, that’s your problem, and it usually points back to a scroll/click trigger or a broken library. » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Pour a lazy-chargé produit grid, go au-delà ce presence vérifier. Exécuter le Infinite Scroll SEO testing matrix avec standard et tall viewports, fresh navigation et post-charger resizing, aucun-action et incremental-scroll exécute, unique produit-lien counts, et accessibility-tree inspection. Resizing an initialized page n’est pas equivalent à navigating à le final viewport size parce que observers et batch calculations peut être registered seulement during startup. Preuve à l’appui de cette affirmation 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. Portée : Google Search guidance for JavaScript-driven lazy loading. Niveau de confiance : élevé · Vérifié : Google Search Central: Lazy-load content

Vous pouvez aussi lean on votre web-performance tooling: PageSpeed Insights flags off-screen images vous devez être deferring. Dans mon PageSpeed Insights guide à Ahrefs Je remarque que le “defer offscreen elements” audit est telling vous à lazy-charger images — a handy façon à connecter le diagnostic vous déjà exécuter à le corriger.

Ranking-signal honesty

Être clair à propos de ce que lazy chargement est et n’est pas. En utilisant il est pas a direct classement factor, et pas en utilisant il n’est pas a penalty. Le connection à rankings est indirect: il flows via Core Web Vitals (mainly LCP, parfois INP pour iframes) et via crawlability, si a mauvais implementation hides contenu. Splitt characterized le classement effect via Core Web Vitals as a tiny, minute factor dans la plupart cas. Donc optimize lazy chargement pour votre utilisateurs’ charger experience et pour clean indexation — pas parce que vous expect a classement bump depuis le attribut itself.

Où ce fits

Lazy chargement est un lever dans le broader web performances toolkit. Il pairs avec resource hints (preload/preconnect pour le resources vous faire vouloir early), font-loading stratégie, mise en cache, et a CDN — et c’est judged, ultimately, via Core Web Vitals. Obtenir le ci-dessus-le-fold/ci-dessous-le-fold split correct et c’est un de le cheapest wins disponible.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.