Développement web
Core Web Vitals : protocole reproductible, preuves et contre-tests
La preuve avant le score
Mesurer la population, diagnostiquer la session, ne jamais fusionner les deux.
- 3 métriques séparées
- 4 états de preuve
- 8 portes de décision
- 0 garantie de classement
Réponse courte
Les Core Web Vitals mesurent l’expérience réelle sur le terrain ; le laboratoire explique une exécution contrôlée.
LCP, INP et CLS sont trois distributions différentes, pas un score unique de vitesse. Une évaluation terrain décrit le 75e centile des expériences éligibles. Un test de laboratoire décrit un appareil, un réseau, un état de page et un scénario. Lorsque CrUX, RUM, Lighthouse et une trace se contredisent, ne les moyennez pas. Nommez la population, isolez la métrique, localisez l’élément ou l’interaction responsable, corrigez une cause puis contre-testez à conditions comparables.
Ce guide publie le contrat de décision complet, un jeu de données bilingue ouvert et un instrument navigateur qui enregistre localement cette session. Il refuse volontairement trois raccourcis : TBT n’est pas rebaptisé INP ; l’absence de données CrUX n’est pas traitée comme une réussite ; une exécution laboratoire plus rapide n’est pas présentée comme une causalité de classement ou de revenu.
01 · Contrat des métriques
LCP ≤ 2,5 s, INP ≤ 200 ms et CLS ≤ 0,1 ne signifient « bon » qu’avec une population et un centile.
Les Core Web Vitals stables sont le Largest Contentful Paint, l’Interaction to Next Paint et le Cumulative Layout Shift. Les seuils publics de Google classent une page ou une origine comme « bonne » lorsqu’au moins 75 % des expériences éligibles respectent le seuil. Cette phrase porte l’information essentielle : la valeur est une distribution, ni la meilleure exécution, ni la moyenne, ni le score desktop affiché dans un rapport.
| Métrique | Bon | À améliorer | Mauvais | Question |
|---|---|---|---|---|
| LCP | ≤ 2 500 ms | > 2 500 à 4 000 ms | > 4 000 ms | Quand le contenu principal devient-il visible ? |
| INP | ≤ 200 ms | > 200 à 500 ms | > 500 ms | Quand la page réagit-elle visiblement ? |
| CLS | ≤ 0,1 | > 0,1 à 0,25 | > 0,25 | Combien de mouvement inattendu s’accumule ? |
Ne pas fusionner
Une page peut avoir un bon LCP et un mauvais INP. Une origine peut réussir globalement tandis qu’un gabarit stratégique échoue. Mobile et desktop peuvent diverger. Chaque distribution conserve sa population et son diagnostic.
02 · Hiérarchie des preuves
CrUX, RUM propriétaire, Lighthouse et trace répondent à quatre questions différentes.
| Couche | Ce qu’elle observe | À utiliser pour | À ne jamais déduire |
|---|---|---|---|
| CrUX | Expériences Chrome éligibles sur une fenêtre glissante de 28 jours | Établir une distribution terrain publique par URL ou origine si disponible | La cause exacte, tous les navigateurs ou la livraison du jour |
| RUM propriétaire | Sessions réelles instrumentées selon une politique publiée | Segmenter gabarits, appareils, versions et attribution diagnostique | Les utilisateurs non observés ou une couverture impartiale sans preuve |
| Lighthouse / laboratoire | Une simulation contrôlée et sa trace synthétique | Reproduire un défaut, inspecter les causes et contre-tester | Un taux terrain, l’INP officiel ou une hausse business |
| Trace de performance | Éléments, ressources, tâches, interactions et trames d’une exécution | Rattacher un symptôme à une cause candidate | La prévalence populationnelle ou la causalité depuis un seul passage |
Un désaccord n’est pas automatiquement un défaut de données. Lighthouse peut révéler un problème de chargement à froid dilué chez les visiteurs récurrents. CrUX peut exposer des interactions lentes qu’un test de chargement n’exerce jamais. Le RUM peut isoler un gabarit de paiement masqué par un agrégat d’origine. La méthode conserve donc chaque couche et son horodatage au lieu d’élire un unique « vrai score ».
Si CrUX manque de données, inscrivez « non mesuré ». Un trafic faible, une URL récente ou un volume insuffisant de visites Chrome éligibles peuvent expliquer l’absence. Aucun ne prouve une bonne expérience. Cette distinction est cruciale pour un jeune site B2B : un laboratoire vert est une preuve opérationnelle utile, mais ne remplace pas une population terrain inexistante.
03 · Protocole de décision
Huit portes transforment une métrique rouge en correction contre-testable.
Les portes sont ordonnées. Elles bloquent les erreurs de catégorie les plus courantes avant toute optimisation : changer une image parce que « la performance est rouge », remplacer une bibliothèque parce que TBT est élevé, ou annoncer des Core Web Vitals réussis après un seul passage Lighthouse. Une livraison peut conserver un statut terrain ouvert ; elle ne peut pas transformer silencieusement cette inconnue en succès.
CWV-G01
Qualifier
La source, la population, la fenêtre et le centile sont nommés avant le verdict.
CWV-G02
Séparer
Une valeur laboratoire n’est jamais présentée comme une valeur CrUX ou RUM.
CWV-G03
Décomposer
L’absence de données CrUX reste « non mesuré », jamais « conforme ».
CWV-G04
Attribuer
Chaque métrique lente est décomposée avant de choisir une correction.
CWV-G05
Formuler
L’élément ou l’interaction responsable est conservé dans la preuve.
CWV-G06
Corriger
Le contre-test rejoue le même scénario, appareil, viewport, réseau et version de méthode.
CWV-G07
Contre-tester
Une amélioration laboratoire ne devient pas une causalité business ni une garantie de classement.
CWV-G08
Valider
La validation terrain attend une fenêtre et un volume explicitement suffisants.
04 · Attribution LCP
Diagnostiquer le LCP en quatre intervalles et conserver l’élément candidat réel.
LCP n’est pas synonyme de poids d’image. Commencez par l’élément signalé par la trace. Il peut s’agir d’une image héro, d’un poster, d’un bloc de texte ou d’un arrière-plan. Décomposez ensuite son horodatage en quatre parties : temps de réponse initial, délai avant le démarrage de la ressource, durée de chargement et délai entre la fin de la ressource et le rendu.
Un TTFB élevé oriente vers le serveur d’origine, les échecs de cache, les redirections ou la distance réseau. Un délai de ressource élevé oriente vers une découverte tardive, un arrière-plan CSS, le rendu client ou la concurrence de priorités. Une durée de chargement élevée oriente vers les octets, la compression, la connexion ou la livraison. Un délai de rendu élevé oriente vers le contenu masqué, les polices, le thread principal ou une ressource chargée avant que l’élément soit affichable.
Cette décomposition évite les corrections contradictoires. Un preload ne répare pas une origine lente. Réencoder une image de 20 Ko ne répare pas une seconde de délai de rendu. Une image plus rapide peut laisser le LCP inchangé lorsque la baseline textuelle reste le plus grand candidat.
lcp = ttfb
delaiChargementRessource
dureeChargementRessource
delaiRenduElementConservez dans la preuve le sélecteur, l’URL effective de la ressource, les quatre intervalles, le viewport et l’état de page. Un nombre sans son candidat n’est pas un diagnostic LCP actionnable.
05 · Attribution INP
Séparer délai d’entrée, traitement et présentation avant d’accuser JavaScript.
INP commence par une interaction réelle. Sa latence contient l’attente avant l’exécution des gestionnaires, leur temps de traitement et le délai avant la présentation de la trame suivante. Un clic lent peut donc venir d’un travail antérieur bloquant le thread principal, d’une logique applicative coûteuse, d’une mise en page synchrone, d’un rendu volumineux ou de plusieurs causes à la fois.
Exercez les parcours critiques : ouvrir la navigation, déplier la FAQ, soumettre les états invalides et valides d’un formulaire, lire un média, rechercher et activer le CTA principal. Conservez la cible et l’état de page. Les Long Animation Frames peuvent relier l’intervalle lent aux longues trames et aux scripts lorsque le navigateur expose l’API. Une attribution non prise en charge reste non prise en charge ; elle ne devient pas conforme.
Le laboratoire local rapporte la pire interaction observée pendant la session. Il ne revendique pas l’INP officiel d’une population terrain. La métrique officielle applique ses règles de sélection et d’agrégation aux visites réelles ; la valeur locale est un candidat diagnostique pour un rejeu contrôlé.
latenceInteraction = delaiEntree
dureeTraitement
delaiPresentation06 · Attribution CLS
Un score CLS exige les éléments déplacés, les fenêtres de session et une chronologie.
CLS cumule les déplacements inattendus dans des fenêtres de session. La preuve utile ne se limite pas au total : elle conserve l’instant, la valeur, les nœuds déplacés et l’action précédente. Les déplacements intervenant dans la fenêtre d’exclusion après une saisie récente sont traités différemment ; cliquer sur un accordéon et voir le contenu se déplacer ne crée donc pas automatiquement un défaut CLS.
Les causes fréquentes sont les médias sans géométrie réservée, les publicités ou embeds injectés au-dessus du contenu, les polices qui changent les métriques, les annonces ajoutées après le premier affichage et les animations de propriétés de mise en page. Réservez l’espace final, conservez des ratios responsives exacts, choisissez des fallbacks typographiques compatibles et animez les transformations plutôt que la géométrie lorsque c’est approprié.
Testez tout le cycle de vie. Une page peut rester stable au chargement puis bouger quand apparaissent un consentement, un lecteur audio, un résumé d’erreurs ou un composant différé. Une capture ne prouve pas la stabilité ; la séquence et les sources, oui.
07 · Preuve exécutable
Armer une navigation propre, exercer la page et exporter la preuve.
Armez la prochaine navigation. La page se recharge depuis le haut et démarre automatiquement l’observation avant que vous ouvriez le sommaire, dépliiez des questions, activiez une action d’article ou lanciez l’audio s’il est disponible. Figez la preuve seulement après le scénario. L’export consigne le mode de capture, l’environnement, les API prises en charge, les candidats, les intervalles, la géométrie de l’élément, les changements de visibilité et les limites explicites. Il exclut les valeurs de formulaire et la preuve ne quitte jamais le navigateur.
La première visite reste volontaire et ne démarre aucun observateur. Seule l’action explicite d’armement provoque un rechargement de la page ; le module versionné lit ensuite les entrées de navigation en mémoire tampon et commence la session sans seconde interaction. Le marqueur d’URL est immédiatement retiré sans nouvelle requête. Cela évite de prendre un clic tardif ou une restauration de défilement pour une mesure de navigation propre.
Instrument interactif · v1.2
CWV Evidence Lab · mesurer cette session localement
Votre première action arme une navigation propre. La page se recharge depuis le haut et l’observation démarre automatiquement. Un contrôle compact reste disponible pendant le scénario : il fige les observateurs avant de vous ramener à cette preuve.
- 01Démarrer
- 02Exercer
- 03Figer
- 04Réutiliser
État du laboratoirePrêt à armer une navigation propre
Prise en charge des API
- PerformanceObserver
- —
Détail de la preuve
Non observé
Comparer deux preuves
La comparaison est refusée si méthode, chemin, famille de navigateur, DPR ou viewport ne sont pas comparables. Le scénario déclaré et l’état de transfert de la navigation doivent également correspondre.
Un rechargement explicite de la page · exécution locale · aucun cookie · aucune preuve transmise · aucune valeur de champ collectée. Le fichier téléchargé contient le user-agent, la plateforme et le viewport : relisez-le avant partage.
Frontière d’interprétation
L’export est une preuve de session. Il peut soutenir un diagnostic et un contre-test à conditions constantes. Il ne certifie pas l’origine, ne reproduit pas CrUX, n’établit pas un impact de conversion et ne prouve pas qu’un écart vient d’un seul changement de code.
08 · Auto-audit Edikka
Le point zéro public est un résultat laboratoire daté ; le terrain reste « non mesuré ».
| Preuve | Observé | Statut | Ce qu’elle autorise |
|---|---|---|---|
| Performance Lighthouse | 100 / 100 | Diagnostic laboratoire | Décrire une exécution simulée |
| LCP | 1 594,54 ms | Diagnostic laboratoire | Contre-tester la page réécrite sous le même profil |
| CLS | 0,0065228 | Diagnostic laboratoire | Inspecter le chargement simulé |
| TBT | 0 ms | Diagnostic laboratoire | Décrire le blocage de ce chargement, pas l’INP |
| CrUX / RUM propriétaire | Aucun dataset publié | Non mesuré | Aucun verdict terrain |
Le passage a utilisé Lighthouse 9.6.8 avec une émulation mobile Moto G (4) et Headless Chrome 155. Il a transféré 158 995 octets en 16 requêtes. Ces valeurs sont publiées parce qu’elles constituent un contexte reproductible, pas parce qu’elles prouvent la qualité terrain actuelle. Le relevé précède cette nouvelle édition ; un futur contre-test devra conserver cette chronologie.
Le sous-score SEO était de 93 parce que cette version de Lighthouse ne reconnaissait pas la directive Content-signal d’Edikka. L’observation de performance et l’avertissement du parseur SEO sont deux constats séparés ; aucun ne doit être caché dans le score global. Aucun résultat PageSpeed terrain n’est revendiqué, faute de réponse CrUX valide obtenue pendant cette revue.
Quatre exports Safari et Firefox ont révélé un défaut de méthode ; aucun n’était un contre-test valide.
| Navigateur | Exports | API observées | API indisponibles | Verdict de comparaison |
|---|---|---|---|---|
| Safari | 2 | LCP, Event Timing | Layout Shift, LoAF, navigation douce | Rejeté : scénario absent, transferts différents et interaction dans un fichier « chargement seul » |
| Firefox | 2 | LCP, Event Timing | Layout Shift, LoAF, navigation douce | Rejeté : scénario absent et transferts différents |
Les quatre fichiers v1.1 étaient des preuves utiles, pas des paires avant/après valides. Leur nom annonçait « chargement seul » ou « interactif », mais la preuve elle-même n’encodait ni le scénario ni son achèvement. Chaque paire d’un même navigateur mélangeait aussi une navigation avec transfert réseau et une navigation sans transfert. Un export Safari présenté comme « chargement seul » contenait même une interaction pointeur après la navigation.
Cet échec a produit la version 1.2 : scénario, achèvement, nombre d’actions de page et état du transfert sont désormais des portes de comparaison vérifiables par machine. Seuls les décomptes dérivés sont publiés ici ; les user-agents bruts ne sont pas reproduits.
Résultat négatif publié
La preuve actuelle ne permet d’établir ni l’INP ni la réussite terrain des Core Web Vitals d’Edikka. Le résultat honnête est « non mesuré », même si le chargement laboratoire est rapide.
09 · Contrat de livraison
Un budget de performance empêche les régressions ; il ne remplace pas la validation terrain.
La CI doit protéger les propriétés déterministes : budgets d’actifs, dimensions d’image absentes, requêtes tierces inattendues, preloads dupliqués, tâches longues sur un parcours nommé et écarts laboratoire dépassant une tolérance convenue. Conservez trace et environnement lorsqu’une porte échoue. Ne faites pas d’un centile CrUX d’origine une porte par commit : la fenêtre terrain de 28 jours ne peut pas identifier une livraison en temps réel.
Un bon relevé de livraison possède donc deux horloges. La boucle rapide exécute trace et contre-tests laboratoire avant déploiement. La boucle lente observe RUM ou CrUX après déploiement et attend une population et une fenêtre suffisantes. Si le trafic est faible, publiez les volumes bruts éligibles et conservez « données insuffisantes » au lieu d’ajuster le seuil jusqu’au vert.
Boucle rapide
Avant livraison
- Même URL et scénario
- Navigateur et viewport figés
- Trace conservée
- Une cause modifiée
- Écart laboratoire publié
Boucle lente
Après livraison
- Population éligible nommée
- Volume brut conservé
- 75e centile par métrique
- Annotation de livraison
- L’inconnu reste inconnu
10 · Frontière éditoriale
Cette page possède la mesure et l’attribution, pas toutes les optimisations de performance.
Utilisez le protocole d’optimisation des images web pour les codecs, sources responsives, qualité perceptuelle et livraison. Utilisez le protocole d’audit SEO technique pour l’exploration, les canoniques, le rendu et les contrôles techniques plus larges. Utilisez l’analyse de l’impact business d’un site lent pour cadrer le risque commercial sans transformer un écart laboratoire en revenu attribué.
Cette découpe évite la cannibalisation et garde chaque affirmation avec la preuve qu’elle exige. Les Core Web Vitals sont l’interface de mesure et de diagnostic entre ces territoires, pas le synonyme de toute la qualité front-end.
11 · Ressources ouvertes
Télécharger, rejouer, contester et citer la version 1.2.
Comment citer
Morel, Bertrand (2026). Core Web Vitals : protocole reproductible, preuves et contre-tests. Edikka, version 1.2, CC BY 4.0.
Identifiant pérenne : aucun déclaré. Un DOI ne sera ajouté qu’après dépôt.
Prochaine revue : 4 décembre 2026. Les corrections restent inscrites au changelog public.
Journal public des versions
| Version | Date | Modification |
|---|---|---|
| 1.2 | 4 septembre 2026 | Scénario chargement seul ou interactif déclaré, marqueurs sans contenu utilisateur, achèvement vérifiable, exclusion des commandes de l’instrument et comparabilité de l’état de transfert. |
| 1.1 | 4 septembre 2026 | Navigation propre armée, démarrage automatique des observateurs, états d’absence/API explicites, géométrie de l’élément LCP et comparabilité renforcée. |
| 1.0 | 4 septembre 2026 | Publication initiale du protocole, du point zéro et de l’instrument local. |
Sources primaires et rôle exact
- Google Search Central · Core Web Vitals — Statut des métriques et relation avec la recherche Google.
- Google Search Central · Page experience — Portée du signal et absence de garantie de classement.
- web.dev · Defining Core Web Vitals thresholds — Seuils et agrégation au 75e centile.
- web.dev · Lab and field data differences — Différences de population, environnement et finalité.
- web.dev · Optimize LCP — Décomposition diagnostique du LCP.
- web.dev · Optimize INP — Décomposition d’une interaction et pistes de diagnostic.
- web.dev · Optimize CLS — Fenêtres de session et causes des déplacements.
- web.dev · Debug performance in the field — Attribution terrain et instrumentation avec web-vitals.
- Chrome for Developers · CrUX API — Disponibilité et interrogation des données CrUX.
- Chrome for Developers · Long Animation Frames API — Attribution des longues trames autour des interactions lentes.
- GoogleChrome · web-vitals changelog — Évolution de la bibliothèque et prise en charge des navigations souples.
Le but n’est pas un score vert. C’est une décision qui résiste au contre-test.
Séparer vérité terrain, diagnostic laboratoire et attribution technique. Le travail de performance devient crédible lorsqu’il sait répondre « non mesuré ».
Nommer la population
Un centile sans utilisateurs, fenêtre et source reste un nombre détaché.
Conserver l’objet responsable
Élément, interaction, ressource ou trame transforme un symptôme en hypothèse.
Modifier une seule cause
Des conditions comparables rendent l’écart utile ; seul le terrain valide la population.
Mesurer sans confondre terrain et laboratoire
Dix réponses alignées sur les seuils, l’attribution, le contre-test et les limites explicites du protocole Edikka.