Amélioration de Cumulative Layout Shift chez Telegraph Media Group

En quelques mois, le principal site Web d'actualités du Royaume-Uni a réussi à améliorer son CLS de 75e centile de 250% de 0,25 à 0,1.

Le défi de la stabilité visuelle

Les décalages de mise en page peuvent être très perturbateurs. Chez Telegraph Media Group (TMG), la stabilité visuelle est particulièrement importante, car les lecteurs se servent principalement de nos applications pour consommer les actualités. Si la mise en page change lors de la lecture d'un article, le lecteur risque de perdre sa place. Cela peut être une expérience frustrante et gênante.

D'un point de vue technique, il peut être difficile de s'assurer que les pages ne se déplacent pas et n'interrompent pas le lecteur, en particulier lorsque des zones de votre application sont chargées de manière asynchrone et ajoutées à la page de manière dynamique.

Chez TMG, plusieurs équipes contribuent au code côté client:

  • Ingénierie de base. La mise en œuvre de solutions tierces dans des domaines tels que les recommandations et les commentaires de contenus.
  • Marketing. Exécuter des tests A/B pour évaluer la manière dont nos lecteurs interagissent avec les nouvelles fonctionnalités ou les modifications
  • Publicité. Gestion des demandes d'annonces et pré-enchères
  • Rédaction : Intégrer du code dans des articles tels que des tweets ou des vidéos, ainsi que des widgets personnalisés (par exemple, un outil de suivi des cas de coronavirus)

Il peut être difficile de s'assurer que chacune de ces équipes n'entraîne pas de saccades de la mise en page. En utilisant la métrique Cumulative Layout Shift pour mesurer la fréquence à laquelle elle se produit pour nos lecteurs, les équipes ont pu mieux comprendre l'expérience utilisateur réelle et définir un objectif clair. Ainsi, notre CLS au 75e centile est passé de 0,25 à 0,1, et notre bucket de transmission est passé de 57% à 72%.

250%

Amélioration du CLS au 75e centile

15 %

Plus d'utilisateurs avec un bon score CLS

Nos débuts

Les tableaux de bord CrUX nous ont permis de déterminer que nos pages se déplaçaient plus que prévu.

Tableau de bord CrUX montrant environ 55 à 60% de bons, 15% d'amélioration et 25% de mauvais scores.
Nos scores Cumulative Layout Shift entre juin 2020 et février 2021.

Idéalement, nous voulions qu'au moins 75% de nos lecteurs aient une "bonne" expérience. Nous avons donc commencé à identifier les causes de l'instabilité de la mise en page.

Comment nous avons mesuré les décalages de mise en page

Nous avons combiné les outils de développement Chrome et WebPageTest pour identifier la cause du décalage de la mise en page. Dans les outils de développement, nous avons utilisé la section Expérience de l'onglet Performances pour mettre en évidence les instances individuelles de changement de mise en page et la manière dont elles ont contribué au score global.

La une du Telegraph, dont l'en-tête contient une annonce surlignée d'un bleu.
Identifiez un décalage de mise en page causé par le chargement de l'annonce côté client au-dessus de l'en-tête à l'aide de la section "Expérience" des outils pour les développeurs Chrome.

WebPageTest indique de manière utile où le décalage de mise en page se produit dans la vue chronologique lorsque l'option "Highlight Layout Shifts" est sélectionnée.

Vue de la pellicule WebPageTest du site Web Telegraph avec le décalage de mise en page mis en évidence par une superposition rouge.
Mise en surbrillance de WebPageTest à l'endroit où la mise en page a été décalée.

Après avoir examiné chaque changement constaté dans nos modèles les plus consultés, nous avons établi une liste d'idées d'améliorations.

Réduire les décalages de mise en page

Nous nous sommes concentrés sur quatre domaines dans lesquels nous pourrions réduire les décalages de mise en page : - les publicités - les images - les en-têtes - les intégrations

Publicités

Les annonces se chargent après le rendu initial via JavaScript. Certains des conteneurs qu'ils ont chargés ne présentaient aucune hauteur réservée.

Animation du site Web du Telegraph. La liste des articles est poussée vers le bas lorsqu'une annonce se charge au-dessus.
Le bloc "Plus d'articles" situé sous l'annonce est décalé vers le bas une fois l'annonce chargée.

Bien que nous ne connaissions pas la hauteur exacte, nous pouvons réserver de l'espace en utilisant la taille d'annonce la plus courante chargée dans l'emplacement.

Animation du site Web du Telegraph. Un rectangle de substitution réservé à l'annonce est placé au-dessus de la liste des articles. L'annonce se charge à la place de l'espace réservé sans provoquer de décalage de la mise en page.
Si vous réservez de l'espace pour l'annonce, le bloc "Plus d'articles" en dessous reste statique avant et après le chargement de l'annonce.

Nous avions mal jugé la hauteur moyenne de l'annonce dans certains cas. Pour les lecteurs de tablettes, l'emplacement se réduisait.

Animation d'une vue sur tablette du site Web du Telegraph. L'espace réservé étant plus grand que l'annonce, le contenu se déplace vers le haut après le chargement de l'annonce.
L'espace publicitaire se réduit après son chargement pour les lecteurs d'appareils de la taille d'une tablette.

Nous avons revu l'emplacement et ajusté la hauteur pour utiliser la taille la plus courante.

Animation d'une vue sur tablette du site Web du Telegraph. Étant donné que l'espace réservé correspond à la taille de l'annonce, il n'y a pas de décalage de mise en page lors du chargement de l'annonce.
Assurez-vous que l'espace réservé pour l'annonce correspond à la hauteur la plus fréquemment diffusée.

Images

De nombreuses images du site Web sont chargées de manière différée et disposent d'un espace qui leur est réservé.

Animation du chargement des fiches d'aperçu de l'article.
Chargement différé des images sans perturber la mise en page.

Toutefois, aucun espace n'était réservé au conteneur pour les images intégrées en haut des articles, ni les attributs de largeur et de hauteur associés aux balises. Cela provoquait un décalage de la mise en page lors du chargement.

Animation du chargement de la page d'article. Lorsque l'image principale se charge en haut de la page, le texte se déplace vers le bas.
Décalage de mise en page causé par l'image principale de l'article.

En ajoutant simplement les attributs de largeur et de hauteur aux images, vous avez assuré que la mise en page ne s'était pas déplacée.

Animation du chargement de la page d'article avec un espace réservé réservé à l'image principale. Lorsque l'image principale se charge en haut de la page, il n'y a pas de décalage de mise en page.
Chargement de l'image principale de l'article sans que la mise en page ne soit décalée.

L'en-tête se trouvait sous le contenu du balisage et était positionné en haut avec CSS. L'idée initiale était de donner la priorité au chargement du contenu avant la navigation, mais cela provoquait un décalage momentané de la page.

ALT_TEXT_HERE
L'en-tête de la page se charge de manière incorrecte.

Déplacer l'en-tête en haut du balisage a permis à la page de s'afficher sans ce décalage.

ALT_TEXT_HERE
La mise en page n'est plus perturbée par le chargement de l'en-tête de la page.

Intégrations

Le format de certains éléments intégrés fréquemment utilisés est défini. Par exemple, les vidéos YouTube. Pendant le chargement du lecteur, nous extrayons la miniature de YouTube et l'utilisons comme espace réservé pendant le chargement de la vidéo.

Emplacement du lecteur vidéo chargeant une vignette basse résolution pendant le chargement du lecteur vidéo.
L'emplacement du lecteur vidéo charge une miniature basse résolution pendant le chargement du lecteur vidéo.

Mesurer l'impact

Nous avons pu mesurer assez facilement l'impact au niveau des fonctionnalités à l'aide des outils mentionnés au début de l'article. Toutefois, nous voulions mesurer CLS à la fois au niveau du modèle et au niveau du site. De manière synthétique, nous avons utilisé SpeedCurve pour valider les modifications en préproduction et en production.

Graphique SpeedCurve montrant une forte baisse du score CLS.
Suivre de manière synthétique la progression du CLS à l'aide de SpeedCurve.

Nous pouvons ensuite valider les résultats dans nos données RUM (fournies par mPulse) une fois que le code est en production.

Graphique mPulse montrant une baisse du score CLS
Validation des améliorations CLS à l'échelle du site avec les données mPulse RUM avant et après les modifications.

La vérification des données RUM nous permet de nous assurer que les modifications que nous apportons ont un impact positif sur nos lecteurs.

Les chiffres finaux que nous avons examinés concernent les données RUM que Google collecte. Cela est particulièrement pertinent maintenant, car ils auront bientôt un impact sur le classement des pages. Pour commencer, nous avons utilisé le rapport d'expérience utilisateur Chrome, à la fois dans les données mensuelles au niveau de l'origine disponibles via le tableau de bord CrUX, ainsi que dans l'interrogation de BigQuery pour récupérer les données historiques p75. Ainsi, pour l'ensemble du trafic mesuré par CrUX, le CLS de notre 75e centile est passé de 0,25 à 0,1, et notre bucket de passage est passé de 57 % à 72 %.

Tableau de bord CrUX montrant que le CLS p75 de telegraph.co.uk est de 0,1.
Résultats du tableau de bord Crux
BigQuery affichant les valeurs p75 qui s'améliorent chaque mois, de 0,25 à 0,1.
Exécution de BigQuery affichant les valeurs p75 de 2021 à ce jour.

En outre, nous avons pu utiliser l'API Chrome UX Report et créer des tableaux de bord internes divisés en modèles.

Tableau de bord interne affichant un bon score moyen de 76,2, un score d'amélioration de 9,3 et un score faible de 14,6.
Tableaux de bord internes utilisant l'API Chrome UX Report, mettant en évidence notre score moyen et les pages les moins performantes à l'aide de ce modèle

Éviter les régressions CLS

Pour améliorer les performances, il est important d'éviter les régressions. Nous avons configuré des budgets de performances de base pour nos métriques clés et y avons inclus le CLS.

Tableau de bord du budget de performances qui affiche des vérifications synthétiques mesurant le CLS sur certains de nos modèles à trafic élevé. Le budget est actuellement défini sur 0,025.

Si le test dépasse le budget, il envoie un message à un canal Slack afin que nous puissions en rechercher la cause. Nous avons également configuré des rapports hebdomadaires. Ainsi, même si les modèles restent dans le budget, nous sommes au courant de toute modification ayant un impact négatif.

Nous prévoyons également d'augmenter nos budgets pour utiliser les données RUM et les données synthétiques, en utilisant mPulse pour définir à la fois des alertes statiques et, éventuellement, la détection d'anomalies, ce qui nous informerait de toute modification inhabituelle.

Il est important pour nous d'aborder les nouvelles fonctionnalités en tenant compte du CLS. La plupart des modifications que j'ai mentionnées sont celles que nous avons dû corriger après leur mise à disposition pour nos lecteurs. À l'avenir, la stabilité de la mise en page sera prise en compte pour la conception de la solution de toute nouvelle fonctionnalité, afin d'éviter tout décalage de mise en page inattendu dès le départ.

Conclusion

Les améliorations que nous avons apportées jusqu'à présent ont été assez faciles à mettre en œuvre et ont eu un impact important. La plupart des modifications décrites dans cet article n'ont pas pris beaucoup de temps. Elles ont été appliquées à tous les modèles les plus couramment utilisés, ce qui signifie qu'elles ont eu un impact positif global sur nos lecteurs.

Certaines sections du site doivent encore être améliorées. Nous étudions des moyens d'améliorer notre logique côté client côté serveur afin d'améliorer encore plus le CLS. Nous continuerons de suivre et de surveiller nos métriques afin de les améliorer constamment et d'offrir à nos lecteurs la meilleure expérience utilisateur possible.