Diagnostic Core Web Vitals : playbook par métrique
Chaque correctif se rattache à un niveau de cause : image, JS, fonts, layout, serveur. Le ticket cite toujours l’élément ou le script fautif identifié dans les audits PSI, pas une généralité.
LCP : décomposer en 4 phases (leur somme = le LCP)
L’audit largest-contentful-paint-element de PSI donne l’élément LCP et la
répartition par phase. Traite la phase dominante.
1. TTFB (cause : serveur). Au-delà de 800 ms, le serveur plombe tout le reste. Causes : pas de cache page, hébergement sous-dimensionné, pas de CDN, redirections avant la page finale. Correctifs : cache page côté serveur (WordPress : cache serveur ou plugin de cache pleine page), CDN, réduire les sauts de redirection, HTTP/2 ou HTTP/3.
2. Load delay (cause : image ou JS). L’élément LCP est découvert tard.
Causes : image en background CSS, lazy-load appliqué à l’image LCP, image
injectée par JS, carrousel. Correctifs : l’image LCP en <img> dans le HTML
initial, retirer loading="lazy" au-dessus de la ligne de flottaison,
<link rel="preload" as="image"> avec fetchpriority="high".
3. Load time (cause : image). L’image est trop lourde. Correctifs : AVIF
ou WebP, srcset à la taille réellement affichée, compression, CDN images.
4. Render delay (cause : JS ou fonts). Tout est chargé mais rien ne
s’affiche. Causes : CSS bloquant volumineux, JS bloquant dans le head, rendu
côté client (SPA), font bloquante sur le texte LCP. Correctifs : critical
CSS inline, defer sur le JS, SSR ou prérendu pour les SPA,
font-display: swap.
INP : où part le temps d’une interaction
INP mesure la pire interaction (clic, tap, clavier) de la visite, en trois segments :
- Input delay : le main thread est occupé au moment du clic. Causes :
long tasks au chargement, hydratation des frameworks, scripts tiers (tag
managers, chat, analytics, pubs). Audits PSI :
long-tasks,third-party-summary,mainthread-work-breakdown. - Processing : les handlers sont lents. Causes : JS lourd déclenché au clic, re-render complet d’un framework.
- Presentation delay : le rendu suivant est lent. Causes : DOM énorme (PSI signale au-delà de ~1 500 noeuds), layout thrashing.
Correctifs par cause :
- JS : code splitting,
defer, supprimer les scripts tiers non indispensables (chaque tag se paye en INP), découper les long tasks (scheduler.yield()ousetTimeout0), debounce sur les handlers fréquents. - DOM : virtualiser les longues listes,
content-visibility: autosur les sections hors écran. - Hydratation : îlots ou hydratation partielle si le framework le permet ; sinon réduire le bundle initial.
Labo : INP n’existe pas dans Lighthouse. Proxys : TBT, long tasks, third-party-summary. Le rapport le précise à chaque fois.
CLS : identifier ce qui bouge
L’audit layout-shift-elements liste les éléments qui bougent : cite-les
dans le ticket. Causes classiques, par fréquence :
- Images et iframes sans dimensions (cause : layout) : ajouter
width/height ou
aspect-ratiopour réserver l’espace. - Fonts (cause : fonts) : le swap tardif fait sauter le texte.
font-display: swapplus preload de la font des titres,size-adjustsur la fallback pour limiter le saut. - Contenu injecté au-dessus du contenu existant (cause : layout) :
bannières cookies, barres promo, blocs pubs, widgets avis. Réserver
l’emplacement en CSS (
min-height) ou injecter sous la ligne de flottaison. - Animations en top/left (cause : layout) : passer à
transform.
Priorisation impact / effort
- Ordre : la métrique la plus dégradée sur le template au plus fort trafic, puis les quick wins tous templates.
- Quick wins typiques (heures) : preload de l’image LCP, dimensions
d’images,
font-display, retrait d’un script tiers,min-heightsur un bloc injecté. - Chantiers (jours) : refonte du bundle JS, SSR, changement d’hébergement, migration du thème.
- Un ticket doit être exécutable par un dev qui n’a pas lu le rapport PSI : contexte en une phrase, cause, correctif précis, fichier ou template probable, gain attendu chiffré en ordre de grandeur, mesure de contrôle.
Pièges
- Ne compare jamais un score labo desktop à un seuil terrain mobile.
- Le « score performance » sur 100 de Lighthouse n’est pas un facteur de ranking ; les trois métriques terrain le sont. Optimise les métriques, pas le score.
- CrUX à l’origine et CrUX à l’URL sont deux choses : précise toujours lequel tu cites. Une URL peu visitée n’a pas de CrUX propre et hérite du verdict origine.
- Après correctif : labo immédiat pour valider la direction, terrain sous 28 jours pour le verdict réel.
- FID est mort depuis mars 2024 : toute source qui en parle encore est à actualiser.