ONDEV Logo

Expert en acquisition client digitale. Création de sites web et applications sur-mesure qui convertissent.

Services
  • Création de Sites Web
  • Applications Sur-Mesure
  • Publicité Digitale
  • Référencement SEO
  • Développeur Web Marseille
  • Création de Logo
  • Design UX/UI
  • Refonte d'Application
  • Maintenance Applicative
  • Audit de Code
  • Agence Vibe Coding
  • Logiciel Métier Sur-Mesure
  • Agence No Code
  • Portail Client & Extranet
  • Intranet Sur-Mesure
  • Refonte Site WordPress
  • Migration Angular vers React
Navigation
  • Accueil
  • Agence web à Marseille
  • Réalisations
  • Expertise
  • Qui sommes-nous
  • Blog
  • Contact
Guides
  • Nos guides
  • Comment créer un site internet
  • Pourquoi créer un site internet
  • Coût d'un site internet
  • Choisir son prestataire web
Contact

Mathieu Rabissoni

06 01 37 20 21WhatsAppmathieu@ondev.fr

Marseille, France

Suivez-nous

LinkedInInstagramFacebook
Zones d'intervention
Marseille|Aix-en-Provence|Aubagne|La Ciotat|Cassis|Allauch|Gardanne|Marignane|Vitrolles|Toutes nos zones

© 2026 ONDEV. Tous droits réservés.

Mentions légalesPolitique de confidentialitéPlan du site
ONDEV Logo
Réalisations
Contact
On en discute

Expertise

Création de Sites WebSite Vitrine MarseilleSite E-Commerce MarseilleRéférencement SEOOptimisation GEOApplications Web & MobileAgence CommunicationPublicité en LigneDéveloppeur Web Marseille
Réalisations

Ressources

Qui sommes-nous ?BlogGuides
Contact
AppelerWhatsApp
On en discute
  1. Accueil
  2. Blog
  3. Lazy loading : charger les images au bon moment
Développement
24 octobre 202612 mn

Lazy loading : charger les images au bon moment

Le lazy loading accélère votre site ou le ralentit selon l'image que vous différez. Règle simple, attribut natif, next/image et effet sur le LCP.

Mathieu Rabissoni

Mathieu Rabissoni

Expert Acquisition Client Digitale

Lazy loading : charger les images au bon moment
Lazy loading : charger les images au bon moment

Sommaire

01.Votre plus grande image se charge en dernier ? Le lazy loading est sans doute le coupable02.Le lazy loading, c'est quoi exactement ?03.Ce que le navigateur fait concrètement04.Les trois façons de le mettre en place05.L'attribut loading natif : ce qu'il couvre et ce qu'il ignore06.Le seuil de déclenchement n'est pas le bord de l'écran07.Ce que l'attribut ne fait pas08.L'erreur classique : mettre l'image principale en lazy09.Pourquoi ça dégrade le LCP10.La correction en trois lignes11.La règle simple pour décider quelle image différer12.Le tri image par image13.La précaution qui évite le CLS14.Ce que next/image fait automatiquement15.Les cinq décisions prises à votre place16.En pratique : Sudparebrise17.L'effet mesurable sur les Core Web Vitals18.LCP : l'effet le plus direct19.CLS : neutre si les dimensions sont là, négatif sinon20.Comment vérifier en cinq minutes21.Lazy loading et SEO : ce que Google indexe22.Questions fréquentes sur le lazy loading23.En résumé : différer les bonnes images, jamais la principale

Votre plus grande image se charge en dernier ? Le lazy loading est sans doute le coupable

Le lazy loading est l'optimisation la plus recommandée du web et l'une des plus mal appliquées. Posé partout sans réfléchir, il fait exactement l'inverse de ce qu'on attend de lui : il retarde l'image que Google chronomètre pour calculer votre LCP. Résultat, un site plus léger sur le papier, mais plus lent là où ça compte.

Dans cet article, vous allez découvrir :

  • •Ce que fait vraiment l'attribut loading="lazy" natif, et les cas qu'il ne couvre pas
  • •L'erreur la plus fréquente en audit de performance : l'image principale chargée en différé
  • •La règle en une phrase pour décider quelle image différer et laquelle charger en priorité
  • •Ce que next/image gère automatiquement (dimensions, formats, priorité) et pourquoi ça change tout
  • •L'effet mesurable sur les Core Web Vitals, et comment le vérifier en cinq minutes
Une image différée est une image que le navigateur découvre tard. Si c'est votre image principale, vous avez ajouté du délai exactement là où Google mesure.

Le lazy loading, c'est quoi exactement ?

Le lazy loading (ou chargement différé) consiste à ne télécharger une ressource qu'au moment où elle devient nécessaire, généralement quand elle approche de la zone visible de l'écran. Appliqué aux images, il évite de charger au démarrage de la page des visuels que le visiteur ne verra peut-être jamais.

Le raisonnement est simple. Une page web type embarque une dizaine, parfois une cinquantaine d'images. Au premier affichage, le visiteur n'en voit que deux ou trois : celles situées « au-dessus de la ligne de flottaison ». Les autres attendent plus bas et n'ont aucune raison de concurrencer les ressources critiques pour la bande passante.

Ce que le navigateur fait concrètement

Sans lazy loading, le navigateur analyse le HTML, découvre chaque balise <img> et lance immédiatement toutes les requêtes. Les images se partagent la connexion avec les polices, le CSS et le JavaScript. Tout arrive un peu plus tard.

Avec lazy loading, le navigateur ne demande une image que lorsqu'elle approche du viewport. Les ressources du haut de page arrivent plus vite, la page devient utilisable plus tôt et la consommation de données baisse, ce qui compte sur mobile.

Les trois façons de le mettre en place

MéthodeCommentPoints fortsLimites
Attribut natif loading="lazy"Un attribut HTML sur <img> ou <iframe>Zéro JavaScript, supporté par tous les navigateurs modernesPas de contrôle fin du seuil, ne gère pas les fonds CSS
Bibliothèque JavaScript (Intersection Observer)Script qui remplace data-src par src au scrollSeuils et animations personnalisablesDépendance, risque pour l'indexation si mal fait
Composant de framework (next/image)Composant qui génère la balise optimaleLazy par défaut, formats, dimensions et priorité gérésLié à la stack Next.js
En 2026, la première option couvre la grande majorité des besoins. La deuxième n'a plus d'intérêt que pour des cas très spécifiques. La troisième est celle que nous utilisons sur tous nos projets, et nous y revenons plus bas.

L'attribut loading natif : ce qu'il couvre et ce qu'il ignore

L'attribut loading accepte deux valeurs : lazy pour différer le chargement, eager pour forcer le chargement immédiat. En l'absence d'attribut, le comportement par défaut est eager.

html
<img src="/img/atelier-marseille.webp" alt="Atelier ONDEV à Marseille" width="1200" height="800" loading="lazy">

Il est supporté nativement par Chrome depuis la version 77 (2019), Firefox depuis la 75 (2020) et Safari depuis la 15.4 (2022). Autrement dit, aucun polyfill n'est nécessaire aujourd'hui, et un navigateur qui ne le connaît pas charge simplement l'image normalement. C'est une amélioration progressive sans risque.

Le seuil de déclenchement n'est pas le bord de l'écran

Le navigateur n'attend pas que l'image soit visible pour la demander : il anticipe. Chrome déclenche le chargement quand l'image arrive à environ 1 250 px du viewport sur une connexion rapide, et jusqu'à 2 500 px sur une connexion lente, selon la documentation de Chrome sur le lazy loading natif. Ce seuil explique pourquoi, sur une page courte, presque toutes les images se chargent quand même immédiatement : elles sont toutes dans la zone d'anticipation.

Ce que l'attribut ne fait pas

C'est le point que beaucoup oublient. loading="lazy" répond à une seule question : quand télécharger. Il ne répond pas aux autres :

  • •Il ne redimensionne rien. Une image de 4 000 px affichée dans un bloc de 400 px reste une image de 4 000 px, chargée tard mais lourde quand même.
  • •Il ne convertit rien. Un JPEG reste un JPEG. Le passage en WebP ou AVIF est un chantier distinct, que nous détaillons dans notre guide pour optimiser les images de votre site web.
  • •Il ignore les images de fond CSS. Un background-image n'est pas une balise <img>, l'attribut n'a aucune prise dessus.
  • •Il ne réserve pas d'espace. Sans width et height, l'image différée provoque un saut de mise en page à son arrivée, donc du CLS.

L'erreur classique : mettre l'image principale en lazy

C'est l'erreur que nous rencontrons le plus souvent en audit, et elle est presque toujours involontaire. Un thème, un plugin ou un réglage global applique loading="lazy" à toutes les images du site. L'image héro, celle qui occupe l'écran à l'arrivée, est traitée comme les autres. Elle est différée.

Pourquoi ça dégrade le LCP

Le LCP (Largest Contentful Paint) mesure le moment où le plus grand élément visible de la page est affiché. Dans l'immense majorité des cas, cet élément est une image. Google en fait l'un de ses trois Core Web Vitals, avec un seuil de bonne expérience fixé à 2,5 secondes.

Quand l'image LCP porte loading="lazy", la chaîne d'événements change :

  1. 1.Le navigateur lit le HTML et repère l'image, mais la marque comme différée.
  2. 2.Il attend d'avoir calculé la mise en page pour savoir si elle se trouve dans le viewport.
  3. 3.Il constate qu'elle y est, et seulement alors lance la requête.

Les étapes 2 et 3 représentent plusieurs centaines de millisecondes perdues sur une image qui aurait dû partir dans la toute première vague de requêtes. Lighthouse signale d'ailleurs ce cas avec un avertissement explicite : l'image LCP a été chargée en différé. Si vous voyez ce message dans un rapport, vous avez trouvé votre premier chantier.

La correction en trois lignes

html
<img src="/img/hero.webp" alt="Vitrage automobile à Marseille" width="1600" height="900" loading="eager" fetchpriority="high">
  • •loading="eager" (ou pas d'attribut du tout) remet l'image dans la vague initiale.
  • •fetchpriority="high" indique au navigateur qu'elle passe avant les autres ressources de même type.
  • •Pour aller plus loin, une balise <link rel="preload" as="image"> dans le <head> lance la requête avant même que le HTML soit entièrement analysé.

Le lazy loading est un outil pour le bas de page. Appliqué au haut de page, il travaille contre vous. Notre guide Core Web Vitals détaille les autres leviers du LCP (serveur, polices, rendu) si l'image n'est pas votre seul problème.

La règle simple pour décider quelle image différer

La règle que nous appliquons tient en une phrase : si l'image est visible sans scroller sur un écran de mobile, elle se charge en eager ; sinon, elle se charge en lazy.

Pourquoi le mobile comme référence ? Parce que c'est là que Google mesure vos Core Web Vitals en priorité, et parce que la ligne de flottaison y est la plus haute. Une image qui est au-dessus du pli sur mobile le sera aussi sur desktop.

Le tri image par image

ÉlémentDécisionPourquoi
Image héro, bannière d'accueileager + fetchpriority="high"Candidate LCP quasi certaine
Logo dans l'en-têteeagerVisible immédiatement, très léger
Première image d'un articleeagerSouvent l'élément LCP sur une page de blog
Première slide d'un carrouseleagerLes slides suivantes passent en lazy
Vignettes d'une grille de produits ou de réalisationslazy à partir de la deuxième rangéeLa première rangée est souvent visible
Images dans le corps du textelazySous le pli dans la quasi-totalité des cas
Avatars, logos partenaires en pied de pagelazyJamais visibles à l'arrivée
Iframes (vidéos, cartes)lazyLes plus lourdes de la page, presque toujours sous le pli

La précaution qui évite le CLS

Toujours renseigner width et height. Le navigateur réserve ainsi la place exacte avant l'arrivée de l'image, différée ou non. Ces attributs ne figent pas la taille affichée (le CSS garde la main), ils donnent simplement le ratio.

Ce que next/image fait automatiquement

Tout ce qui précède est faisable à la main. Mais sur un site de deux cents pages maintenu par plusieurs personnes, l'application rigoureuse de la règle est illusoire : quelqu'un finira par poser une image héro sans fetchpriority ou oublier les dimensions. C'est précisément ce que le composant next/image corrige.

tsx
import Image from "next/image";

<Image
  src="/img/hero.webp"
  alt="Vitrage automobile à Marseille"
  width={1600}
  height={900}
  priority
  sizes="100vw"
/>

Les cinq décisions prises à votre place

  • •Lazy loading par défaut. Toute image sans la prop priority reçoit loading="lazy". Vous n'avez rien à écrire pour le bas de page.
  • •Priorité explicite pour le haut de page. La prop priority ajoute fetchpriority="high", retire le lazy et génère un preload. Une seule prop, les trois bonnes pratiques.
  • •Dimensions obligatoires. Le composant refuse de compiler sans width et height (ou fill). Le CLS lié aux images disparaît par construction.
  • •Formats modernes et srcset. Next.js sert du WebP ou de l'AVIF selon le navigateur, et génère plusieurs tailles. Le mobile reçoit une image de 640 px, le desktop une de 1 920 px, à partir du même fichier source.
  • •Placeholder flou. La prop placeholder="blur" affiche une version minuscule de l'image pendant le chargement, ce qui améliore la perception de vitesse.

C'est l'une des raisons pour lesquelles nous considérons Next.js comme le meilleur framework pour un site en 2026 : les bonnes pratiques de performance ne reposent pas sur la discipline de l'équipe, elles sont dans l'outil.

En pratique : Sudparebrise

Sur la refonte du site de Sudparebrise, spécialiste du vitrage automobile, chaque page de service embarque une image principale en priority et une galerie différée. Combiné au rendu statique et aux formats modernes, le site atteint un score Lighthouse de 100. Pas 92, pas 97 : 100, sur un site vitrine riche en visuels. Le lazy loading bien placé n'est pas le seul facteur, mais sans lui l'image héro aurait plafonné le LCP.

Si votre site actuel ne vous laisse pas cette maîtrise, c'est le genre de fondation que nous posons dès le départ dans notre service de création de sites internet à Marseille : la performance n'est pas une phase d'optimisation après livraison, c'est une propriété de l'architecture.

À lire aussi : Optimiser les images de votre site web - formats, compression et dimensions : les trois chantiers qui accompagnent le lazy loading pour une page vraiment légère.

L'effet mesurable sur les Core Web Vitals

Le lazy loading touche surtout deux métriques, et pas de la même façon.

LCP : l'effet le plus direct

Bien appliqué (image héro en eager, le reste en lazy), le lazy loading libère la bande passante pour l'image LCP, qui arrive plus tôt. Mal appliqué (héro en lazy), il ajoute le délai décrit plus haut. C'est la métrique où l'on voit la différence le plus vite dans Lighthouse.

CLS : neutre si les dimensions sont là, négatif sinon

Une image différée qui arrive sans espace réservé pousse le contenu vers le bas. Avec width et height, l'espace est réservé dès le rendu initial et le CLS n'est pas affecté. Sans eux, chaque image lazy devient un décalage potentiel.

Comment vérifier en cinq minutes

  1. 1.Lancez PageSpeed Insights sur votre page d'accueil en mode mobile.
  2. 2.Dans la section Diagnostics, cherchez l'avertissement concernant une image LCP chargée en différé.
  3. 3.Ouvrez l'onglet Réseau des outils de développement, rechargez la page et regardez l'ordre des requêtes : l'image héro doit figurer dans les premières lignes.
  4. 4.Scrollez et confirmez que les images du bas ne partent qu'à l'approche du viewport.
  5. 5.Comparez avec les données réelles de la Search Console (rapport Signaux Web essentiels) : c'est ce que Google utilise, pas le score de laboratoire.

Lazy loading et SEO : ce que Google indexe

Google indexe sans difficulté les images portant l'attribut natif loading="lazy", parce que la balise <img> et son src sont dans le HTML. Le risque concerne les anciennes bibliothèques JavaScript qui stockent l'URL dans un data-src et ne la déplacent dans src qu'au scroll : Googlebot ne scrolle pas, et ces images peuvent ne jamais être découvertes. Si vous héritez d'un site avec ce type de script, migrez vers l'attribut natif : c'est à la fois plus simple et plus sûr.

Questions fréquentes sur le lazy loading

Le rapport Signaux Web essentiels est l'un des premiers tableaux que nous ouvrons dans notre accompagnement en référencement naturel : un LCP dégradé par une image différée se corrige en quelques lignes, encore faut-il le voir.

Faut-il mettre loading="lazy" sur toutes les images ?
Non. C'est l'erreur la plus répandue. Les images visibles à l'arrivée sur mobile (héro, logo, première image d'article) doivent se charger en eager, idéalement avec fetchpriority="high". Le lazy loading est réservé aux images situées sous la ligne de flottaison.
Le lazy loading est-il mauvais pour le SEO ?
Pas avec l'attribut natif. Google lit la balise <img> et son src directement dans le HTML, le chargement différé ne change rien à l'indexation. Le risque existe seulement avec des scripts qui cachent l'URL dans un data-src jusqu'au scroll, car Googlebot ne scrolle pas.
Quelle différence entre loading="lazy" et un plugin de lazy loading ?
L'attribut natif est géré par le navigateur, sans JavaScript, avec un seuil d'anticipation adapté à la connexion. Un plugin ajoute un script, un seuil à régler et un risque d'erreur. En 2026, l'attribut natif suffit dans la quasi-totalité des cas, et c'est ce que génère next/image par défaut.
Le lazy loading suffit-il à rendre une page rapide ?
Non. Il décide quand charger une image, pas quelle taille ni quel format. Une image de 3 Mo différée reste une image de 3 Mo. Redimensionnement, compression et formats WebP ou AVIF sont des chantiers complémentaires, détaillés dans notre guide d'optimisation des images.
Comment savoir si mon image LCP est en lazy ?
Lancez un audit Lighthouse ou PageSpeed Insights sur la page concernée. Si l'image principale est différée, un avertissement explicite apparaît dans les diagnostics. Vous pouvez aussi inspecter la balise dans les outils de développement et vérifier la présence de l'attribut loading="lazy".
Que fait la prop priority dans next/image ?
Elle désactive le lazy loading sur cette image, ajoute fetchpriority="high" et insère une balise de preload dans le <head>. C'est la prop à poser sur l'image héro de chaque page, et sur elle seulement : plusieurs images en priority se font concurrence et annulent le bénéfice.

En résumé : différer les bonnes images, jamais la principale

Le lazy loading est une optimisation à double tranchant. Posé sur les images du bas de page, il allège le démarrage et libère la bande passante pour ce qui compte. Posé sur l'image principale, il retarde précisément l'élément que Google chronomètre. La règle est simple : visible sans scroller sur mobile, eager ; sinon, lazy. Et pour que cette règle survive à la vie d'un site, mieux vaut un outil comme next/image qui l'applique à votre place.

Si vos Core Web Vitals sont dans l'orange et que vous ne savez pas par où commencer, l'ordre de chargement des images est souvent le premier levier, et le moins coûteux.


Vous voulez un diagnostic clair de la performance de votre site et un plan d'action concret ? Parlons de votre projet : nous regardons vos images, votre LCP et votre stack, et nous vous disons ce qui pèse vraiment.

Auteur

Mathieu Rabissoni

Mathieu Rabissoni

Expert Web

Infos

24 octobre 2026
12 mn
Développement

Service lié

Création site internet

Site sur-mesure avec SEO intégré, livré en 30 jours.

Découvrir

Travailler avec ONDEV

On construit pour vous un site sur mesure, adapté à vos enjeux business.

  • Sans dépendance technique
  • Sans frais de maintenance inutiles
On en discute ?

Avec nous c'est simple, rien n'est compliqué !

Nos réalisations

Refonte & SEO - Amadeus Centre d’Affaires
Refonte & Stratégie SEO

Refonte & SEO - Amadeus Centre d’Affaires

Wiloq - Application SaaS Vestiaire Numérique
Application SaaS

Wiloq - Application SaaS Vestiaire Numérique

Voir toutes les réalisations

Votre plus grande image se charge en dernier ? Le lazy loading est sans doute le coupable

Le lazy loading est l'optimisation la plus recommandée du web et l'une des plus mal appliquées. Posé partout sans réfléchir, il fait exactement l'inverse de ce qu'on attend de lui : il retarde l'image que Google chronomètre pour calculer votre LCP. Résultat, un site plus léger sur le papier, mais plus lent là où ça compte.

Dans cet article, vous allez découvrir :

  • •Ce que fait vraiment l'attribut loading="lazy" natif, et les cas qu'il ne couvre pas
  • •L'erreur la plus fréquente en audit de performance : l'image principale chargée en différé
  • •La règle en une phrase pour décider quelle image différer et laquelle charger en priorité
  • •Ce que next/image gère automatiquement (dimensions, formats, priorité) et pourquoi ça change tout
  • •L'effet mesurable sur les Core Web Vitals, et comment le vérifier en cinq minutes
Une image différée est une image que le navigateur découvre tard. Si c'est votre image principale, vous avez ajouté du délai exactement là où Google mesure.

Le lazy loading, c'est quoi exactement ?

Le lazy loading (ou chargement différé) consiste à ne télécharger une ressource qu'au moment où elle devient nécessaire, généralement quand elle approche de la zone visible de l'écran. Appliqué aux images, il évite de charger au démarrage de la page des visuels que le visiteur ne verra peut-être jamais.

Le raisonnement est simple. Une page web type embarque une dizaine, parfois une cinquantaine d'images. Au premier affichage, le visiteur n'en voit que deux ou trois : celles situées « au-dessus de la ligne de flottaison ». Les autres attendent plus bas et n'ont aucune raison de concurrencer les ressources critiques pour la bande passante.

Ce que le navigateur fait concrètement

Sans lazy loading, le navigateur analyse le HTML, découvre chaque balise <img> et lance immédiatement toutes les requêtes. Les images se partagent la connexion avec les polices, le CSS et le JavaScript. Tout arrive un peu plus tard.

Avec lazy loading, le navigateur ne demande une image que lorsqu'elle approche du viewport. Les ressources du haut de page arrivent plus vite, la page devient utilisable plus tôt et la consommation de données baisse, ce qui compte sur mobile.

Les trois façons de le mettre en place

MéthodeCommentPoints fortsLimites
Attribut natif loading="lazy"Un attribut HTML sur <img> ou <iframe>Zéro JavaScript, supporté par tous les navigateurs modernesPas de contrôle fin du seuil, ne gère pas les fonds CSS
Bibliothèque JavaScript (Intersection Observer)Script qui remplace data-src par src au scrollSeuils et animations personnalisablesDépendance, risque pour l'indexation si mal fait
Composant de framework (next/image)Composant qui génère la balise optimaleLazy par défaut, formats, dimensions et priorité gérésLié à la stack Next.js
En 2026, la première option couvre la grande majorité des besoins. La deuxième n'a plus d'intérêt que pour des cas très spécifiques. La troisième est celle que nous utilisons sur tous nos projets, et nous y revenons plus bas.

L'attribut loading natif : ce qu'il couvre et ce qu'il ignore

L'attribut loading accepte deux valeurs : lazy pour différer le chargement, eager pour forcer le chargement immédiat. En l'absence d'attribut, le comportement par défaut est eager.

html
<img src="/img/atelier-marseille.webp" alt="Atelier ONDEV à Marseille" width="1200" height="800" loading="lazy">

Il est supporté nativement par Chrome depuis la version 77 (2019), Firefox depuis la 75 (2020) et Safari depuis la 15.4 (2022). Autrement dit, aucun polyfill n'est nécessaire aujourd'hui, et un navigateur qui ne le connaît pas charge simplement l'image normalement. C'est une amélioration progressive sans risque.

Le seuil de déclenchement n'est pas le bord de l'écran

Le navigateur n'attend pas que l'image soit visible pour la demander : il anticipe. Chrome déclenche le chargement quand l'image arrive à environ 1 250 px du viewport sur une connexion rapide, et jusqu'à 2 500 px sur une connexion lente, selon la documentation de Chrome sur le lazy loading natif. Ce seuil explique pourquoi, sur une page courte, presque toutes les images se chargent quand même immédiatement : elles sont toutes dans la zone d'anticipation.

Ce que l'attribut ne fait pas

C'est le point que beaucoup oublient. loading="lazy" répond à une seule question : quand télécharger. Il ne répond pas aux autres :

  • •Il ne redimensionne rien. Une image de 4 000 px affichée dans un bloc de 400 px reste une image de 4 000 px, chargée tard mais lourde quand même.
  • •Il ne convertit rien. Un JPEG reste un JPEG. Le passage en WebP ou AVIF est un chantier distinct, que nous détaillons dans notre guide pour optimiser les images de votre site web.
  • •Il ignore les images de fond CSS. Un background-image n'est pas une balise <img>, l'attribut n'a aucune prise dessus.
  • •Il ne réserve pas d'espace. Sans width et height, l'image différée provoque un saut de mise en page à son arrivée, donc du CLS.

L'erreur classique : mettre l'image principale en lazy

C'est l'erreur que nous rencontrons le plus souvent en audit, et elle est presque toujours involontaire. Un thème, un plugin ou un réglage global applique loading="lazy" à toutes les images du site. L'image héro, celle qui occupe l'écran à l'arrivée, est traitée comme les autres. Elle est différée.

Pourquoi ça dégrade le LCP

Le LCP (Largest Contentful Paint) mesure le moment où le plus grand élément visible de la page est affiché. Dans l'immense majorité des cas, cet élément est une image. Google en fait l'un de ses trois Core Web Vitals, avec un seuil de bonne expérience fixé à 2,5 secondes.

Quand l'image LCP porte loading="lazy", la chaîne d'événements change :

  1. 1.Le navigateur lit le HTML et repère l'image, mais la marque comme différée.
  2. 2.Il attend d'avoir calculé la mise en page pour savoir si elle se trouve dans le viewport.
  3. 3.Il constate qu'elle y est, et seulement alors lance la requête.

Les étapes 2 et 3 représentent plusieurs centaines de millisecondes perdues sur une image qui aurait dû partir dans la toute première vague de requêtes. Lighthouse signale d'ailleurs ce cas avec un avertissement explicite : l'image LCP a été chargée en différé. Si vous voyez ce message dans un rapport, vous avez trouvé votre premier chantier.

La correction en trois lignes

html
<img src="/img/hero.webp" alt="Vitrage automobile à Marseille" width="1600" height="900" loading="eager" fetchpriority="high">
  • •loading="eager" (ou pas d'attribut du tout) remet l'image dans la vague initiale.
  • •fetchpriority="high" indique au navigateur qu'elle passe avant les autres ressources de même type.
  • •Pour aller plus loin, une balise <link rel="preload" as="image"> dans le <head> lance la requête avant même que le HTML soit entièrement analysé.

Le lazy loading est un outil pour le bas de page. Appliqué au haut de page, il travaille contre vous. Notre guide Core Web Vitals détaille les autres leviers du LCP (serveur, polices, rendu) si l'image n'est pas votre seul problème.

La règle simple pour décider quelle image différer

La règle que nous appliquons tient en une phrase : si l'image est visible sans scroller sur un écran de mobile, elle se charge en eager ; sinon, elle se charge en lazy.

Pourquoi le mobile comme référence ? Parce que c'est là que Google mesure vos Core Web Vitals en priorité, et parce que la ligne de flottaison y est la plus haute. Une image qui est au-dessus du pli sur mobile le sera aussi sur desktop.

Le tri image par image

ÉlémentDécisionPourquoi
Image héro, bannière d'accueileager + fetchpriority="high"Candidate LCP quasi certaine
Logo dans l'en-têteeagerVisible immédiatement, très léger
Première image d'un articleeagerSouvent l'élément LCP sur une page de blog
Première slide d'un carrouseleagerLes slides suivantes passent en lazy
Vignettes d'une grille de produits ou de réalisationslazy à partir de la deuxième rangéeLa première rangée est souvent visible
Images dans le corps du textelazySous le pli dans la quasi-totalité des cas
Avatars, logos partenaires en pied de pagelazyJamais visibles à l'arrivée
Iframes (vidéos, cartes)lazyLes plus lourdes de la page, presque toujours sous le pli

La précaution qui évite le CLS

Toujours renseigner width et height. Le navigateur réserve ainsi la place exacte avant l'arrivée de l'image, différée ou non. Ces attributs ne figent pas la taille affichée (le CSS garde la main), ils donnent simplement le ratio.

Ce que next/image fait automatiquement

Tout ce qui précède est faisable à la main. Mais sur un site de deux cents pages maintenu par plusieurs personnes, l'application rigoureuse de la règle est illusoire : quelqu'un finira par poser une image héro sans fetchpriority ou oublier les dimensions. C'est précisément ce que le composant next/image corrige.

tsx
import Image from "next/image";

<Image
  src="/img/hero.webp"
  alt="Vitrage automobile à Marseille"
  width={1600}
  height={900}
  priority
  sizes="100vw"
/>

Les cinq décisions prises à votre place

  • •Lazy loading par défaut. Toute image sans la prop priority reçoit loading="lazy". Vous n'avez rien à écrire pour le bas de page.
  • •Priorité explicite pour le haut de page. La prop priority ajoute fetchpriority="high", retire le lazy et génère un preload. Une seule prop, les trois bonnes pratiques.
  • •Dimensions obligatoires. Le composant refuse de compiler sans width et height (ou fill). Le CLS lié aux images disparaît par construction.
  • •Formats modernes et srcset. Next.js sert du WebP ou de l'AVIF selon le navigateur, et génère plusieurs tailles. Le mobile reçoit une image de 640 px, le desktop une de 1 920 px, à partir du même fichier source.
  • •Placeholder flou. La prop placeholder="blur" affiche une version minuscule de l'image pendant le chargement, ce qui améliore la perception de vitesse.

C'est l'une des raisons pour lesquelles nous considérons Next.js comme le meilleur framework pour un site en 2026 : les bonnes pratiques de performance ne reposent pas sur la discipline de l'équipe, elles sont dans l'outil.

En pratique : Sudparebrise

Sur la refonte du site de Sudparebrise, spécialiste du vitrage automobile, chaque page de service embarque une image principale en priority et une galerie différée. Combiné au rendu statique et aux formats modernes, le site atteint un score Lighthouse de 100. Pas 92, pas 97 : 100, sur un site vitrine riche en visuels. Le lazy loading bien placé n'est pas le seul facteur, mais sans lui l'image héro aurait plafonné le LCP.

Si votre site actuel ne vous laisse pas cette maîtrise, c'est le genre de fondation que nous posons dès le départ dans notre service de création de sites internet à Marseille : la performance n'est pas une phase d'optimisation après livraison, c'est une propriété de l'architecture.

À lire aussi : Optimiser les images de votre site web - formats, compression et dimensions : les trois chantiers qui accompagnent le lazy loading pour une page vraiment légère.

L'effet mesurable sur les Core Web Vitals

Le lazy loading touche surtout deux métriques, et pas de la même façon.

LCP : l'effet le plus direct

Bien appliqué (image héro en eager, le reste en lazy), le lazy loading libère la bande passante pour l'image LCP, qui arrive plus tôt. Mal appliqué (héro en lazy), il ajoute le délai décrit plus haut. C'est la métrique où l'on voit la différence le plus vite dans Lighthouse.

CLS : neutre si les dimensions sont là, négatif sinon

Une image différée qui arrive sans espace réservé pousse le contenu vers le bas. Avec width et height, l'espace est réservé dès le rendu initial et le CLS n'est pas affecté. Sans eux, chaque image lazy devient un décalage potentiel.

Comment vérifier en cinq minutes

  1. 1.Lancez PageSpeed Insights sur votre page d'accueil en mode mobile.
  2. 2.Dans la section Diagnostics, cherchez l'avertissement concernant une image LCP chargée en différé.
  3. 3.Ouvrez l'onglet Réseau des outils de développement, rechargez la page et regardez l'ordre des requêtes : l'image héro doit figurer dans les premières lignes.
  4. 4.Scrollez et confirmez que les images du bas ne partent qu'à l'approche du viewport.
  5. 5.Comparez avec les données réelles de la Search Console (rapport Signaux Web essentiels) : c'est ce que Google utilise, pas le score de laboratoire.

Lazy loading et SEO : ce que Google indexe

Google indexe sans difficulté les images portant l'attribut natif loading="lazy", parce que la balise <img> et son src sont dans le HTML. Le risque concerne les anciennes bibliothèques JavaScript qui stockent l'URL dans un data-src et ne la déplacent dans src qu'au scroll : Googlebot ne scrolle pas, et ces images peuvent ne jamais être découvertes. Si vous héritez d'un site avec ce type de script, migrez vers l'attribut natif : c'est à la fois plus simple et plus sûr.

Questions fréquentes sur le lazy loading

Le rapport Signaux Web essentiels est l'un des premiers tableaux que nous ouvrons dans notre accompagnement en référencement naturel : un LCP dégradé par une image différée se corrige en quelques lignes, encore faut-il le voir.

Faut-il mettre loading="lazy" sur toutes les images ?
Non. C'est l'erreur la plus répandue. Les images visibles à l'arrivée sur mobile (héro, logo, première image d'article) doivent se charger en eager, idéalement avec fetchpriority="high". Le lazy loading est réservé aux images situées sous la ligne de flottaison.
Le lazy loading est-il mauvais pour le SEO ?
Pas avec l'attribut natif. Google lit la balise <img> et son src directement dans le HTML, le chargement différé ne change rien à l'indexation. Le risque existe seulement avec des scripts qui cachent l'URL dans un data-src jusqu'au scroll, car Googlebot ne scrolle pas.
Quelle différence entre loading="lazy" et un plugin de lazy loading ?
L'attribut natif est géré par le navigateur, sans JavaScript, avec un seuil d'anticipation adapté à la connexion. Un plugin ajoute un script, un seuil à régler et un risque d'erreur. En 2026, l'attribut natif suffit dans la quasi-totalité des cas, et c'est ce que génère next/image par défaut.
Le lazy loading suffit-il à rendre une page rapide ?
Non. Il décide quand charger une image, pas quelle taille ni quel format. Une image de 3 Mo différée reste une image de 3 Mo. Redimensionnement, compression et formats WebP ou AVIF sont des chantiers complémentaires, détaillés dans notre guide d'optimisation des images.
Comment savoir si mon image LCP est en lazy ?
Lancez un audit Lighthouse ou PageSpeed Insights sur la page concernée. Si l'image principale est différée, un avertissement explicite apparaît dans les diagnostics. Vous pouvez aussi inspecter la balise dans les outils de développement et vérifier la présence de l'attribut loading="lazy".
Que fait la prop priority dans next/image ?
Elle désactive le lazy loading sur cette image, ajoute fetchpriority="high" et insère une balise de preload dans le <head>. C'est la prop à poser sur l'image héro de chaque page, et sur elle seulement : plusieurs images en priority se font concurrence et annulent le bénéfice.

En résumé : différer les bonnes images, jamais la principale

Le lazy loading est une optimisation à double tranchant. Posé sur les images du bas de page, il allège le démarrage et libère la bande passante pour ce qui compte. Posé sur l'image principale, il retarde précisément l'élément que Google chronomètre. La règle est simple : visible sans scroller sur mobile, eager ; sinon, lazy. Et pour que cette règle survive à la vie d'un site, mieux vaut un outil comme next/image qui l'applique à votre place.

Si vos Core Web Vitals sont dans l'orange et que vous ne savez pas par où commencer, l'ordre de chargement des images est souvent le premier levier, et le moins coûteux.


Vous voulez un diagnostic clair de la performance de votre site et un plan d'action concret ? Parlons de votre projet : nous regardons vos images, votre LCP et votre stack, et nous vous disons ce qui pèse vraiment.

Mathieu Rabissoni

Mathieu Rabissoni

Expert Web

24 octobre 2026
12 mn
Développement

Service lié

Création site internet

Site sur-mesure avec SEO intégré, livré en 30 jours.

Découvrir

Travailler avec ONDEV

On construit pour vous un site sur mesure, adapté à vos enjeux business.

On en discute ?
Mathieu Rabissoni

Mathieu Rabissoni

Expert Acquisition Client Digitale

Passionné par le web depuis toujours, j'aide les entreprises à acquérir des clients grâce au digital. Sites web, applications, SEO : je transforme vos idées en solutions performantes.

En savoir plus

Services ONDEV liés à cet article

Création site internet Marseille•Application web sur-mesure•Refonte de site internet•Expert Next.js Marseille•Agence web à Marseille•Nos réalisations

Besoin d'aide pour votre projet ?

Discutons de vos objectifs et voyons comment je peux vous aider à les atteindre.

Prendre rendez-vousAppelerWhatsApp