Optimiser le poids des images (et son impact business)
Allégez vos images pour accélérer le LCP, réduire le CLS et améliorer vos conversions. Découvrez l'impact business d'images bien optimisées.
Les images constituent le plus gros poste de poids du web : elles concentrent la plus grande part de la taille de transfert et le plus grand nombre de requêtes par page. Sur une page médiane d’environ 2 Mo, elles représentent près de la moitié des octets. Autrement dit, optimiser les requêtes d’images est sans doute l’optimisation de performance la plus efficace que vous puissiez mener.
L’enjeu n’est pas que technique, il est business. Une amélioration de la performance des images agit sur les Core Web Vitals, donc sur l’expérience perçue, le SEO et les conversions : c’est pourquoi optimiser ses images est si rentable. Une étude de cas Vodafone a montré qu’une amélioration de 31 % du LCP s’accompagnait d’une hausse de 8 % des ventes, de 15 % du taux de visiteurs devenus prospects et de 11 % du taux d’accès au panier.
Sur ce sujet, j’aime rappeler que l’optimisation des images n’est pas un chantier technique mais un levier business : elle agit sur l’expérience perçue, donc sur le SEO et les conversions. Reporter les requêtes inutiles et maîtriser la priorité de chargement, c’est rendre la page utile plus vite. Et fixer width et height reste le moyen le plus simple d’éviter les décalages qui agacent l’utilisateur.
Reporter les requêtes d'images
La requête la plus rapide reste celle qui n’est jamais faite. L’attribut loading= »lazy » garantit qu’une image n’est demandée qu’à l’approche de la fenêtre d’affichage : elle quitte ainsi le chemin critique du rendu, au moment où le navigateur est le plus sollicité. Une image jamais vue n’est jamais téléchargée, et aucune bande passante n’est gaspillée.
Il y a toutefois une contrepartie. Différer une image visible dès le chargement la fait paraître plus lente. Il ne faut donc pas appliquer loading= »lazy » aux images du haut de page, susceptibles d’être présentes dans la fenêtre d’affichage initiale.
<img src="image.jpg" loading="lazy" alt="…">
Maîtriser la priorité de chargement
Le navigateur attribue des priorités différentes selon le type et l’emplacement des ressources. L’attribut loading et l’attribut fetchpriority donnent aux développeurs plus de contrôle sur ces décisions. fetchpriority= »high » signale une image à charger en priorité (typiquement l’image LCP, à optimiser en priorité), tandis que fetchpriority= »low » convient à une image révélée seulement après une interaction.
La différence est importante : loading= »lazy » peut empêcher complètement une requête, alors que fetchpriority ne fait qu’ajuster l’ordre de priorité sans bloquer le chargement. Les deux attributs se complètent pour servir d’abord ce qui compte le plus pour l’internaute.
| Levier | Effet sur la requête | Quand l'utiliser |
|---|---|---|
loading= »lazy » |
Diffère la requête hors écran |
Images sous la ligne de flottaison |
loading= »eager » |
Charge immédiatement (défaut) |
Images visibles au chargement |
fetchpriority= »high » |
Donne la priorité au transfert |
Image LCP, visuel clé |
fetchpriority= »low » |
Abaisse la priorité |
Image révélée après interaction |
width et height |
Réservent l’espace de mise en page |
Toutes les images |
Éviter les décalages avec width et height
Par leur poids et l’espace qu’elles occupent, les images sont une cause fréquente de Cumulative Layout Shift (CLS), cette instabilité visuelle où le contenu saute pendant le chargement. Depuis 2019, les navigateurs déduisent le format de l’image à partir des attributs width et height pour réserver l’espace nécessaire avant le rendu, un réflexe à combiner avec le bon choix de taille d’image via srcset.
La règle est donc simple : conservez toujours width et height sur vos balises img, avec des valeurs correspondant à la taille intrinsèque de la source. Côté CSS, ajoutez height: auto à côté de max-width: 100% pour garder un comportement responsive. Cette approche n’a aucun inconvénient et s’appuie sur un comportement de navigateur établi de longue date.
<img src="image.jpg" height="200" width="400" alt="…">
Ne placez jamais loading= »lazy » sur une image au-dessus de la ligne de flottaison, en particulier sur une image candidate au LCP. La retarder jusqu’à la mise en page de la page a un impact très négatif sur votre score LCP. Pour une image clé visible d’emblée, laissez le chargement par défaut et, si besoin, ajoutez fetchpriority= »high ».
À faire
- différer les images hors écran
- définir width et height sur chaque img
- prioriser l’image LCP
- réduire la taille de transfert au strict nécessaire
À éviter
- différer une image visible au chargement
- supprimer width et height
- négliger le LCP
- envoyer des images plus lourdes que nécessaire
Points clés à retenir
- Différez les images hors écran avec loading="lazy".
- Ne différez jamais l'image LCP située au-dessus de la ligne de flottaison.
- Définissez width et height pour réserver l'espace et limiter le CLS.
- Utilisez fetchpriority pour prioriser le transfert des visuels clés.
- Réduisez la taille de transfert sans sacrifier la qualité.
Le poids des images conditionne la performance perçue, le SEO et les conversions.
Quiz : testez vos connaissances
Quiz : testez vos connaissances
-
Pourquoi loading="lazy" est-il efficace pour optimiser le poids des images ?
- Il convertit les images au format WebP à la volée
- Il compresse automatiquement chaque image avant de la servir
- Une image hors écran jamais atteinte n'est jamais demandée : la requête la plus rapide est celle qui n'est pas faite
loading="lazy"garantit qu’une image n’est demandée qu’à l’approche de la fenêtre d’affichage et quitte ainsi le chemin critique du rendu. Une image jamais atteinte n’est jamais téléchargée. -
Quel attribut signale au navigateur de charger une image en priorité, typiquement l'image LCP ?
- loading="lazy"
- fetchpriority="high"
- decoding="async"
L’attribut
fetchpriority="high"signale une image à charger en priorité, typiquement l’image LCP, alors queloading="lazy"sert au contraire à différer les images hors écran. -
L'attribut loading="lazy" suffit-il à régler tous les problèmes d'images ?
- Oui, dès qu'il est posé sur toutes les images de la page
- Non : il faut aussi compresser, choisir un bon format et réserver l'espace avec width et height
- Oui, il prend en charge la compression et le format automatiquement
loading="lazy"évite les requêtes inutiles hors écran, mais il faut aussi compresser, choisir un bon format et réserver l’espace avecwidthetheightpour un résultat complet.
Besoin d'un accompagnement SEO ?
Des images trop lourdes coûtent en vitesse, en SEO et en conversions, souvent sans signal d'alerte évident.