Le WordPress d'aujourd'hui, décodé pour les développeurs

SEO & GEO

WP Rocket et le lazy-load natif de WordPress : la double optimisation qui casse

Deux mécanismes de chargement différé s'appliquent parfois à la même image, et celle qui devrait s'afficher en premier finit par arriver en retard.

Par WordPress Développement • 4 février 2021 • 4 min de lecture • Aucun commentaire
WP Rocket et le lazy-load natif de WordPress : la double optimisation qui casse

Pourquoi l’image principale d’une page met-elle plus de temps à s’afficher après l’installation d’un plugin de cache censé accélérer le site ? La réponse tient à un détail que peu de développeurs vérifient : deux mécanismes de chargement différé peuvent s’appliquer simultanément à la même balise <img>, chacun ignorant l’existence de l’autre.

Depuis la version 5.5, WordPress applique automatiquement l’attribut loading="lazy" aux images situées sous la ligne de flottaison, en se basant sur une heuristique simple liée à leur position dans le document. WP Rocket, de son côté, propose sa propre fonctionnalité de lazy-load, activée par défaut sur les installations récentes, qui remplace les balises src par des attributs différés traités en JavaScript.

Le symptôme : une image visible qui arrive en retard

Le cas se manifeste typiquement sur l’image d’en-tête d’un article, positionnée tout en haut de page et donc visible dès le chargement initial, sans le moindre défilement. Une image dans cette position ne devrait jamais être différée, sous peine de dégrader le Largest Contentful Paint, la métrique qui mesure le temps d’affichage du plus grand élément visible à l’écran.

Or, l’inspection du DOM révèle que cette image porte à la fois l’attribut natif loading="lazy" ajouté par WordPress et une classe rocket-lazyload ajoutée par le plugin de cache, avec un attribut data-lazy-src à la place du src réel. Le navigateur attend alors qu’un script JavaScript s’exécute pour révéler l’image, ce qui retarde son affichage bien après le moment où elle aurait pu apparaître nativement.

Diagnostic : deux couches qui ne se coordonnent pas

L'essentiel à retenir : WordPress charge certaines images en différé depuis la version 5.5 ; WP Rocket ajoute sa propre couche de lazy-load par défaut ; L'image visible au chargement ne doit jamais être différée par les deux

Le problème ne vient pas d’un bug à proprement parler, mais d’une absence de coordination entre deux mécanismes qui, pris séparément, fonctionnent correctement. WP Rocket exclut en théorie automatiquement une image lorsqu’elle est explicitement marquée comme prioritaire, mais cette détection automatique échoue régulièrement sur des thèmes personnalisés qui génèrent leur balisage d’image en dehors des fonctions standards de WordPress, comme the_post_thumbnail().

Correctif : n’en garder qu’un sur l’image critique

La correction consiste à exclure explicitement l’image concernée du lazy-load de WP Rocket, tout en s’assurant que WordPress ne lui applique pas non plus son propre chargement différé natif. Deux méthodes complémentaires :

<img src="/wp-content/uploads/image-entete.jpg"
     loading="eager"
     class="rocket-lazyload-exclude"
     alt="Description de l'image" />

Côté PHP, pour automatiser cette exclusion sur toutes les images d’en-tête générées par le thème, le filtre natif de WordPress permet de désactiver le lazy-load au cas par cas :

add_filter( 'wp_lazy_loading_enabled', function( $default, $tag_name ) {
    if ( $tag_name === 'img' && is_singular() && in_the_loop() ) {
        return false;
    }
    return $default;
}, 10, 2 );

Cette exclusion doit rester ciblée à l’image concernée : désactiver le lazy-load sur l’ensemble du site annulerait les bénéfices du chargement différé pour toutes les images situées plus bas dans la page, qui elles doivent rester différées pour ne pas ralentir le chargement initial.

Vérifier le résultat

  • Inspecter le DOM pour confirmer l’absence des deux mécanismes concurrents sur l’image ciblée.
  • Mesurer le Largest Contentful Paint avant et après correction, avec l’onglet Performance des outils de développement ou un outil de terrain.
  • Vérifier que les images plus bas dans la page restent bien en chargement différé, pour ne pas régresser sur le reste du site.

Sur nos projets, la règle est simple : une seule image par page a le droit d’être exclue du lazy-load, celle qui apparaît sans le moindre défilement. Toute image supplémentaire exclue « par précaution » finit par annuler les gains de performance obtenus ailleurs.

En résumé

La coexistence du lazy-load natif de WordPress et de celui d’un plugin de cache n’est pas un problème en soi, tant que l’image visible au premier chargement échappe explicitement aux deux mécanismes. Le correctif tient en une exclusion ciblée, jamais en une désactivation globale d’une fonctionnalité par ailleurs bénéfique pour le reste de la page.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi