LFW

Blog · Ce que révèle l'audit gratuit

Pourquoi la page saute pendant le chargement

Ce qu'est le décalage de mise en page et pourquoi il est perçu comme une panne, les quatre causes derrière presque tous les cas (images sans dimensions, intégrations sans espace réservé, polices qui se substituent, bandeaux injectés tard) et les correctifs exacts, y compris là où WordPress connaît déjà la largeur et la hauteur de chaque image.

Ce qu'est le décalage de mise en page

Le décalage de mise en page, c'est du contenu qui bouge après avoir été dessiné. Le navigateur peint la page avec les informations qu'il a, puis une image arrive à une taille qu'il ignorait, et tout ce qui se trouve dessous descend pour lui faire place. Ou une police se charge et chaque ligne se recompose. Ou une barre d'annonce s'insère en haut et repousse la page de cinq centimètres.

On le mesure sous le nom de Cumulative Layout Shift, la somme de chaque mouvement inattendu pendant le chargement, et un score inférieur à 0,1 est considéré comme bon. Les visiteurs ne connaissent pas le chiffre. Ils savent qu'ils ont touché un lien et atteint celui du dessous.

Cause un : des images sans dimensions

De loin la cause la plus courante. Une balise img avec un src et rien d'autre ne dit rien au navigateur sur la forme de l'image, il réserve donc zéro hauteur jusqu'au téléchargement du fichier. Le correctif tient en deux attributs : width et height. Ils ne forcent pas l'image à cette taille à l'écran ; avec le CSS habituel max-width 100% et height auto, ils indiquent simplement au navigateur le rapport d'aspect, et il réserve la bonne boîte avant l'arrivée du premier octet.

WordPress connaît déjà ces chiffres pour chaque fichier de la médiathèque. Ouvrez n'importe quelle image dans Médias et le panneau de détails affiche ses dimensions, 1920 par 1080 pixels par exemple. Les images placées via l'éditeur reçoivent automatiquement width et height dans la balise.

Là où cela dérape, c'est le thème : les images principales définies via un constructeur de pages, un champ du personnalisateur ou un gabarit écrit à la main ne sortent souvent que l'URL. Dans un gabarit, demandez l'image à WordPress au lieu de construire la balise à la main, et les attributs viennent avec :

Afficher le code Masquer le code PHP, 14 lignes
<?php
// Right: WordPress writes src, srcset, sizes, width, height, and alt for you.
echo wp_get_attachment_image( $hero_id, 'full', false, array(
  'class'         => 'hero-img',
  'fetchpriority' => 'high',
  'loading'       => 'eager',
) );

// If you must build the tag yourself, take the real dimensions from the library:
$img = wp_get_attachment_image_src( $hero_id, 'full' ); // [ url, width, height ]
printf(
  '<img src="%s" width="%d" height="%d" alt="%s" />',
  esc_url( $img[0] ), $img[1], $img[2], esc_attr( get_post_meta( $hero_id, '_wp_attachment_image_alt', true ) )
);

Puis la seule ligne de CSS qui fait que les attributs se comportent bien sur toutes les tailles d'écran :

Le CSS qui va avec

Avec width et height présents, cette règle laisse l'image s'adapter à son conteneur pendant que le navigateur garde la boîte réservée à la bonne forme. La plupart des thèmes l'ont déjà ; vérifiez que rien ne remplace height par une valeur fixe.

Afficher le code Masquer le code CSS, 10 lignes
img {
  max-width: 100%;
  height: auto;
}

/* A hero set as a CSS background can't carry dimensions. Give its box a shape instead: */
.hero {
  aspect-ratio: 16 / 9;
  background-size: cover;
}

Cause deux : des intégrations sans espace réservé

Une iframe YouTube ou C-SPAN arrive avec la hauteur qu'indiquait le code d'intégration, souvent 315 pixels pour 560 de large, puis un thème adaptatif étire la largeur sans ajuster la hauteur, ou le script du lecteur la redimensionne après chargement. Dans les deux cas, la page bouge.

Enveloppez chaque vidéo intégrée dans une boîte dont la forme est déclarée, et laissez l'iframe la remplir. L'espace est réservé avant le chargement du lecteur, et il s'adapte à la colonne.

Afficher le code Masquer le code CSS, 9 lignes
.embed {
  aspect-ratio: 16 / 9;   /* 4 / 3 for older video, or match the embed's own ratio */
  width: 100%;
}
.embed iframe {
  width: 100%;
  height: 100%;
  border: 0;
}

Cause trois : des polices qui se substituent

Une police web qui arrive après l'affichage de la page recompose chaque ligne composée avec elle, et si la police de secours a une largeur différente, des paragraphes entiers changent de hauteur. Précharger le fichier de police le fait arriver avant le premier affichage sur la plupart des connexions. Le descripteur size-adjust permet d'ajuster la police de secours pour que la substitution, quand elle a lieu, ne change presque rien.

Afficher le code Masquer le code HTML, 11 lignes
<!-- in the head: fetch the font before the page needs it -->
<link rel="preload" href="/fonts/body.woff2" as="font" type="font/woff2" crossorigin />

/* in the CSS: a fallback shaped to match, so the swap barely moves anything */
@font-face {
  font-family: "Body Fallback";
  src: local("Arial");
  size-adjust: 104%;
  ascent-override: 92%;
}
body { font-family: "Body", "Body Fallback", sans-serif; }

Cause quatre : des éléments insérés en haut après l'affichage

Les bandeaux de cookies, barres d'annonce et bannières d'alerte injectés par JavaScript sont la dernière cause courante, et la plus facile à voir : toute la page descend à l'instant où la barre apparaît. Deux correctifs, et l'un ou l'autre convient. Rendez la barre dans le HTML de la page pour que son espace existe dès le premier affichage, ou faites-en une superposition qui se pose sur le contenu au lieu de le repousser. Ce qui ne marche jamais, c'est d'insérer un bloc au-dessus du contenu après que le contenu a été dessiné.

Le voir par vous-même

Dans Chrome, ouvrez le panneau Performance et enregistrez un chargement de page ; chaque décalage est marqué et l'élément qui a bougé est nommé. Lighthouse rapporte le total sous le nom de Cumulative Layout Shift. L'audit gratuit de ce site exécute la même mesure sur votre page d'accueil et vous dit en langage clair si la page bouge.

Si vous êtes client, corriger l'image principale d'un gabarit ou la boîte d'une intégration est une petite tâche dans le cadre du forfait. Un thème qui construit chaque balise d'image à la main est un projet, chiffré à prix fixe. Ouvrez une demande et nous trouverons d'abord l'élément qui bouge.

À lire ensuite

6 septembre 2026 8 minutes

Les quatre fichiers vers lesquels personne ne fait de lien

Chaque site web porte quatre fichiers texte qu'aucun visiteur ne voit jamais : robots.txt, sitemap.xml, security.txt et llms.txt. Les moteurs de recherche, les scanners de sécurité et les agents d'IA les lisent à chaque visite. Ce qu'est chacun d'eux, qui les lit vraiment, quoi y mettre, et la seule règle qui les garde tous sûrs. Nous avons repris cette liste sur notre propre site cette semaine et trouvé des manques, alors l'audit gratuit les vérifie désormais.

6 septembre 2026 6 minutes

Notre image principale disparaissait sur iPhone. Un bloqueur de publicités la cachait.

Pendant des semaines, l'image principale de trois de nos propres pages disparaissait une seconde et demie sur iPhone, au premier chargement seulement. Rien ne le reproduisait en laboratoire. Un relevé de terrain de cinquante lignes l'a trouvé en trois chargements de page : un bloqueur de publicités masquait tout élément dont la classe commençait par ad-.

Tous les articles →

Prefer to write?

Tell us what needs to work better.

Slow, fragile, hard to edit, missing a workflow. Say it plainly, and you'll get a straight answer, not a ticket number.

You'll get a straight answer, usually the same day.