Mis à jour le 1er novembre 2026. Article réécrit autour des optimisations intégrées au cœur de WordPress de la version 6.3 à la 6.9 (priorité des images,
sizes="auto", chargement spéculatif, priorité des scripts, styles de blocs à la demande, WP-Cron) et de ce qu’elles ne couvrent pas. La méthode d’outillage générale est désormais dans un article dédié.
Les Core Web Vitals mesurent le temps d’affichage du contenu principal (LCP), la réactivité aux interactions (INP) et la stabilité visuelle (CLS). Depuis plusieurs versions, WordPress applique de lui-même une partie des bonnes pratiques. Avant de modifier un thème ou d’ajouter un plugin d’optimisation, il faut donc savoir ce que le cœur fait déjà, pour ne pas le défaire.
Pour la méthode d’outillage (PageSpeed Insights, DevTools, TTFB, requêtes MySQL lentes, CDN), voir diagnostiquer un site lent. Pour une boutique, voir Core Web Vitals PrestaShop.
Seuils et place dans le référencement
Google évalue chaque indicateur au 75e percentile des visites, séparément sur mobile et sur desktop, sur 28 jours glissants.
| Indicateur | Bon | À améliorer | Mauvais | Symptôme visible |
|---|---|---|---|---|
| LCP | ≤ 2,5 s | 2,5 s à 4 s | > 4 s | l’image ou le titre principal apparaît tard |
| INP | ≤ 200 ms | 200 ms à 500 ms | > 500 ms | un menu ou un bouton réagit avec retard |
| CLS | ≤ 0,1 | 0,1 à 0,25 | > 0,25 | le texte se déplace pendant la lecture |
L’INP a remplacé le FID le 12 mars 2024. Dans la Search Console, le rapport s’appelle « Signaux Web essentiels ». Google indique que les Core Web Vitals sont utilisés par ses systèmes de classement. Il précise aussi que de bons résultats ne garantissent pas les premières positions. C’est un critère parmi d’autres, après la pertinence du contenu.
Ce que WordPress fait déjà pour le LCP
Priorité de l’image principale (6.3)
Depuis WordPress 6.3, le cœur ajoute fetchpriority="high" à l’image qu’il juge la plus susceptible d’être l’élément LCP. Par défaut, seule une image d’au moins 50 000 pixels (largeur × hauteur) est éligible. Le filtre wp_min_priority_img_pixels modifie ce seuil.
La même version a porté à 3 le nombre d’images laissées sans loading="lazy" en haut de page (filtre wp_omit_loading_attr_threshold). La fonction wp_get_loading_optimization_attributes() ne renvoie jamais fetchpriority="high" et loading="lazy" pour la même image.
Ce mécanisme s’applique aux images générées par le cœur : contenu, image mise en avant via get_the_post_thumbnail(), wp_get_attachment_image(), avatars, image d’en-tête. Il ne s’applique pas à une image écrite en dur dans un template, ni à un slider ou un constructeur de pages qui produit son propre HTML. C’est là que se trouvent la plupart des LCP différés par erreur.
sizes="auto" pour les images différées (6.7)
WordPress 6.7 ajoute auto en tête de l’attribut sizes des images en loading="lazy". Le navigateur choisit alors le fichier du srcset d’après la largeur réellement affichée. Cela ne concerne que les images différées : l’image LCP n’en profite pas. Pour elle, un sizes juste reste nécessaire.
Priorité des scripts et styles en ligne (6.9)
La note de performance de WordPress 6.9 (18 novembre 2025) décrit plusieurs changements utiles au LCP :
| Changement | Détail | Contrôle |
|---|---|---|
| Priorité des scripts | clé fetchpriority (auto, low, high) dans wp_enqueue_script() | wp_script_add_data( $handle, 'fetchpriority', 'low' ) |
| Styles en ligne | limite relevée de 20 Ko à 40 Ko | filtre styles_inline_size_limit |
| Thèmes classiques | styles des blocs chargés à la demande | filtre should_load_separate_core_block_assets |
| Script des emoji | passé en module dans le pied de page | — |
| WP-Cron | lancé à shutdown au lieu de init | — |
Selon cette note, lancer WP-Cron à la fin de la requête peut réduire le TTFB jusqu’à une seconde sur les requêtes qui déclenchaient une tâche planifiée. Ces gains sont mesurés par l’équipe de WordPress sur ses thèmes de test : vérifiez l’effet sur votre site. Si un plugin ou un thème casse l’affichage après la mise à jour, l’auteur de la note recommande de filtrer uniquement should_load_separate_core_block_assets pour revenir à l’ancien comportement.
Ce qui reste à votre charge pour le LCP
Le serveur et le cache
Le LCP ne commence qu’après l’arrivée du HTML. Un TTFB élevé retarde tout, quelle que soit l’optimisation du thème. web.dev considère un TTFB comme bon jusqu’à 0,8 seconde.
- Cache de page avec LiteSpeed Cache, WP Rocket ou WP Super Cache. Excluez les pages personnalisées : panier, compte, paiement.
- Cache objet Redis ou Memcached si les requêtes à la base restent lentes, notamment avec WooCommerce.
- Version de PHP maintenue par votre hébergeur. Voir réduire le travail PHP sans confondre TTFB et INP.
- Hébergement adapté au trafic. Voir notre comparatif d’hébergement WordPress.
Pour mesurer le TTFB avec curl et trouver la requête SQL ou la fonction PHP qui le fait monter, voir diagnostiquer un site lent.
L’image LCP écrite par le thème
Si votre image principale est produite par le thème ou un constructeur, vérifiez le HTML rendu (Ctrl+U, puis recherche de fetchpriority). Dans un template, préférez les fonctions du cœur, qui appliquent la logique de 6.3 :
<?php
// Image mise en avant d'un article, au-dessus de la ligne de flottaison
echo wp_get_attachment_image(
get_post_thumbnail_id(),
'large',
false,
[ 'fetchpriority' => 'high', 'loading' => false ]
);
Si l’image est un fond CSS ou insérée par JavaScript, le navigateur la découvre tard. Ajoutez un préchargement dans le <head> :
add_action( 'wp_head', function () {
if ( is_front_page() ) {
echo '<link rel="preload" as="image" href="' . esc_url( get_theme_file_uri( 'img/hero-1200.webp' ) ) . '" fetchpriority="high">' . "\n";
}
}, 1 );
Les scripts et feuilles bloquants
Depuis WordPress 6.3, wp_enqueue_script() accepte une stratégie de chargement :
wp_enqueue_script(
'mon-theme-menu',
get_theme_file_uri( 'js/menu.js' ),
[],
'1.0.0',
[ 'in_footer' => true, 'strategy' => 'defer', 'fetchpriority' => 'low' ]
);
La stratégie finale peut redevenir bloquante si une dépendance ou un script en ligne l’impose. Contrôlez le HTML rendu. La clé fetchpriority n’existe qu’à partir de la 6.9 : elle est ignorée sur les versions antérieures.
Activez enfin la compression Brotli ou Gzip côté serveur. Voir compression HTTP avec Nginx.
INP : plugins et scripts tiers
L’INP retient l’interaction la plus lente de la visite, en ignorant une valeur extrême pour 50 interactions. Seuls les clics, les touchers et les frappes au clavier comptent. Une interaction se décompose en trois phases : délai d’entrée, traitement des gestionnaires d’événements et délai de présentation.
Sur WordPress, les causes courantes sont :
- des plugins qui chargent leur JavaScript sur toutes les pages (formulaires, sliders, galeries) ;
- des scripts tiers : pixels publicitaires, chat, outils de test A/B ;
- une bannière de consentement qui exécute beaucoup de code au clic ;
- un constructeur de pages qui génère un DOM très profond.
Pour retirer le script d’un plugin là où il ne sert pas, identifiez son identifiant (handle) dans le code source du plugin, puis adaptez cet exemple, écrit pour un plugin de formulaire :
add_action( 'wp_enqueue_scripts', function () {
if ( ! is_page( 'contact' ) ) {
wp_dequeue_script( 'contact-form-7' );
wp_dequeue_style( 'contact-form-7' );
}
}, 100 );
Testez en préproduction : un script retiré peut casser un formulaire. Pour un traitement JavaScript long que vous maîtrisez, découpez-le avec scheduler.yield(). web.dev indique un support dans Chrome et Edge 129 et Firefox 142, pas dans Safari : prévoyez un repli avec setTimeout.
Le chargement spéculatif (6.8)
Depuis WordPress 6.8, le cœur ajoute des règles de spéculation : le navigateur précharge (prefetch) une page dès que le visiteur commence à cliquer sur un lien (conservative). Les URL avec paramètres sont exclues. Le filtre wp_speculation_rules_configuration modifie le mode, et wp_speculation_rules_href_exclude_paths exclut des chemins. Le plugin Speculative Loading passe par défaut en prerender avec moderate.
Cela accélère la navigation suivante, pas la première page. Excluez les URL qui déclenchent une action (déconnexion, ajout au panier par lien). Voir aussi Speculation Rules sur WordPress.
CLS : polices, publicités, embeds
Les décalages qui surviennent dans les 500 ms suivant une action de l’utilisateur sont exclus. Les causes restantes sont presque toujours un élément sans espace réservé.
- Images : les fonctions du cœur posent
widthetheight. Un constructeur ou un HTML personnalisé peut les omettre. - Vidéos : depuis WordPress 6.9, le bloc Vidéo pose largeur, hauteur et
aspect-ratio. - Publicités et embeds : donnez une hauteur minimale au conteneur.
- Bannière de consentement : affichez-la en superposition (
position: fixed), pas en haut du contenu. - Polices : alignez la police de secours sur la police finale.
@font-face {
font-family: "Titre Fallback";
src: local("Arial");
size-adjust: 105%;
}
@font-face {
font-family: "Titre";
src: url("/wp-content/themes/mon-theme/fonts/titre.woff2") format("woff2");
font-display: swap;
}
h1, h2 { font-family: "Titre", "Titre Fallback", sans-serif; }
La valeur de size-adjust se règle à l’œil, en comparant les deux polices. Préchargez seulement la police utilisée au-dessus de la ligne de flottaison, avec l’attribut crossorigin :
<link rel="preload" href="/wp-content/themes/mon-theme/fonts/titre.woff2" as="font" type="font/woff2" crossorigin>
Héberger les polices sur votre serveur supprime aussi une connexion vers un domaine tiers.
Vérifier les corrections
- Notez la valeur de départ de la métrique visée, sur une URL de chaque modèle (accueil, article, page, produit).
- Changez un seul élément à la fois, en préproduction, après sauvegarde.
- Contrôlez le HTML rendu :
fetchpriority,loading,defer. - Relancez la mesure en laboratoire dans les mêmes conditions.
- Attendez 28 jours pour lire l’effet dans les données terrain.
Après chaque mise à jour majeure de WordPress, d’un thème ou d’un plugin d’optimisation, refaites l’étape 3. Deux plugins qui gèrent le lazy loading ou le CSS critique peuvent se contredire, ou contredire le cœur.
Questions fréquentes
Faut-il un plugin pour ajouter fetchpriority sur WordPress ?
Pas si votre image principale est produite par les fonctions du cœur : WordPress l’ajoute depuis la 6.3. Un plugin ou une modification du thème n’est utile que si l’image vient d’un slider, d’un constructeur ou d’un template codé en dur.
Lighthouse affiche un bon score, mais la Search Console signale des URL à améliorer. Que croire ?
Les données terrain. Lighthouse simule un chargement ; la Search Console s’appuie sur les visites réelles de Chrome, au 75e percentile, sur 28 jours. Utilisez Lighthouse pour trouver la cause, puis vérifiez l’effet dans les données terrain.
Le chargement spéculatif améliore-t-il les Core Web Vitals ?
Il peut améliorer le LCP des pages consultées après un clic, car elles sont préchargées. Il ne change rien à la page d’arrivée depuis Google. Surveillez la charge du serveur si vous passez en prerender.
Un hébergement mutualisé peut-il donner de bons Core Web Vitals ?
Oui, s’il fournit assez de ressources et un cache de page. Si le TTFB reste élevé avec un cache actif, un hébergement managé ou un VPS devient pertinent.
Sources
- web.dev, « Core Web Vitals » : https://web.dev/articles/vitals
- web.dev, « Interaction to Next Paint (INP) » : https://web.dev/articles/inp
- web.dev, « Optimize long tasks » : https://web.dev/articles/optimize-long-tasks
- web.dev, « Optimize Cumulative Layout Shift » : https://web.dev/articles/optimize-cls
- web.dev, « Time to First Byte (TTFB) » : https://web.dev/articles/ttfb
- Google Search Central, « Expérience sur la page » : https://developers.google.com/search/docs/appearance/page-experience
- Make WordPress Core, « Image performance enhancements in WordPress 6.3 » : https://make.wordpress.org/core/2023/07/13/image-performance-enhancements-in-wordpress-6-3/
- Make WordPress Core, « Registering scripts with async and defer attributes in WordPress 6.3 » : https://make.wordpress.org/core/2023/07/14/registering-scripts-with-async-and-defer-attributes-in-wordpress-6-3/
- Make WordPress Core, « Auto Sizes for Lazy Loaded Images in WordPress 6.7 » : https://make.wordpress.org/core/2024/10/18/auto-sizes-for-lazy-loaded-images-in-wordpress-6-7/
- Make WordPress Core, « Speculative Loading in 6.8 » : https://make.wordpress.org/core/2025/03/06/speculative-loading-in-6-8/
- Make WordPress Core, « WordPress 6.9 Frontend Performance Field Guide » (18 novembre 2025) : https://make.wordpress.org/core/2025/11/18/wordpress-6-9-frontend-performance-field-guide/