Cumulative Layout Shift bei Telegraph Media Group verbessern

Innerhalb weniger Monate konnte die führende Nachrichtenwebsite im Vereinigten Königreich den CLS im 75. Perzentil um 250% von 0,25 auf 0,1 verbessern.

Die Herausforderung der visuellen Stabilität

Layoutänderungen können sehr störend sein. Bei der Telegraph Media Group (TMG) ist die visuelle Stabilität besonders wichtig, da Leser vorwiegend unsere Apps verwenden, um sich die Nachrichten anzusehen. Wenn sich das Layout beim Lesen eines Artikels ändert, verliert der Leser wahrscheinlich seine Leseposition. Das kann frustrierend und ablenkend sein.

Aus technischer Sicht kann es schwierig sein, dafür zu sorgen, dass sich die Seiten nicht verschieben und den Leser nicht unterbrechen, insbesondere wenn Bereiche Ihrer Anwendung asynchron geladen und der Seite dynamisch hinzugefügt werden.

Bei TMG gibt es mehrere Teams, die clientseitig Code beitragen:

  • Kernentwicklung Implementierung von Drittanbieterlösungen für Bereiche wie Inhaltsempfehlungen und Kommentare
  • Marketing. A/B-Tests durchführen, um zu beurteilen, wie unsere Leser mit neuen Funktionen oder Änderungen interagieren.
  • Werbung Anzeigenanfragen und Pre-Bidding für Anzeigen verwalten
  • Redaktionelle Anforderungen Einbetten von Code in Artikeln wie Tweets oder Videos sowie benutzerdefinierte Widgets (z. B. Corona-Tracker)

Es kann schwierig sein, dafür zu sorgen, dass keines dieser Teams das Layout der Seite beeinträchtigt. Mit dem Messwert Cumulative Layout Shift konnten die Teams messen, wie oft das Problem für unsere Leser auftritt. So erhielten sie einen besseren Einblick in die tatsächliche Nutzererfahrung und ein klares Ziel, das sie anstreben konnten. Dadurch konnte der CLS im 75. Perzentil von 0,25 auf 0,1 verbessert und der Bucket für bestandene Tests von 57% auf 72 % erhöht werden.

250 %

CLS-Verbesserung beim 75. Perzentil

15 %

Mehr Nutzer mit gutem CLS-Wert

Der Anfang

Mithilfe der CrUX-Dashboards konnten wir feststellen, dass sich unsere Seiten mehr als gewünscht verschoben.

CrUX-Dashboard mit etwa 55–60 % „Gut“, 15 % „Optimierung erforderlich“ und 25 % „Schlecht“
Unsere Cumulative Layout Shift-Werte zwischen Juni 2020 und Februar 2021

Idealerweise sollten mindestens 75% unserer Leser eine „gute“ Erfahrung machen. Deshalb haben wir uns daran gemacht, die Ursachen für die Layoutinstabilität zu ermitteln.

So haben wir die Layoutänderungen gemessen

Wir haben eine Kombination aus Chrome DevTools und WebPageTest verwendet, um herauszufinden, was das Layout verschoben hat. In DevTools haben wir auf dem Tab Leistung im Bereich Nutzerfreundlichkeit einzelne Instanzen des sich ändernden Layouts hervorgehoben und gezeigt, wie sie zur Gesamtbewertung beigetragen haben.

Die Startseite von Telegraph mit einer Anzeige im Header, die durch ein blaues Overlay hervorgehoben wird.
Mit dem Bereich „Erfahrung“ in den Chrome-Entwicklertools wird ein Layout-Shift erkannt, der durch das clientseitige Laden der Anzeige über der Kopfzeile verursacht wird.

In WebPageTest wird die Stelle, an der die Layoutänderung auftritt, in der Zeitachse hervorgehoben, wenn „Layoutänderungen hervorheben“ ausgewählt ist.

Filmstreifenansicht von WebPageTest der Telegraph-Website, auf der die Layoutänderung mit einem roten Overlay hervorgehoben ist.
WebPageTest-Anzeige, wo sich das Layout verschoben hat

Nachdem wir alle Schichten in unseren meistbesuchten Vorlagen überprüft hatten, haben wir eine Liste mit Ideen zusammengestellt, wie wir sie verbessern könnten.

Layoutverschiebungen reduzieren

Wir haben uns auf vier Bereiche konzentriert, in denen wir Layoutverschiebungen reduzieren konnten: - Anzeigen - Bilder - Überschriften - Einbettungen

Anzeigen

Die Anzeigen werden nach der ersten Darstellung über JavaScript geladen. Einige der geladenen Container hatten keine reservierte Höhe.

Animation der Website von The Telegraph. Die Liste der Stories wird nach unten verschoben, wenn darüber eine Anzeige geladen wird.
Der Block „Weitere Artikel“ unter der Anzeige wird nach dem Laden der Anzeige nach unten verschoben.

Auch wenn wir die genaue Höhe nicht kennen, können wir Platz reservieren, indem wir die gängigste Anzeigengröße verwenden, die im Slot geladen ist.

Animation der Website von The Telegraph. Über der Liste der Stories wird ein Platzhalter-Rechteck für die Anzeige platziert. Die Anzeige wird anstelle des Platzhalters geladen, ohne dass sich das Layout ändert.
Dadurch, dass Platz für die Anzeige reserviert wird, bleibt der Bereich „Weitere Artikel“ unten vor und nach dem Laden der Anzeige statisch.

In einigen Fällen haben wir die durchschnittliche Höhe der Anzeige falsch eingeschätzt. Bei Tablet-Lesegeräten wurde der Steckplatz minimiert.

Animation der Tabletansicht der Website der Telegraph Der Platzhalter-Slot ist größer als die Anzeige, sodass die Inhalte nach dem Laden der Anzeige nach oben verschoben werden.
Der Anzeigenblock wird für Leser auf Geräten in Tabletgröße nach dem Laden minimiert.

Wir haben den Slot überarbeitet und die Höhe so angepasst, dass die gängigste Größe verwendet wird.

Animation der Tabletansicht der Website der Telegraph Da der Platzhalter der Anzeigengröße entspricht, kommt es beim Laden der Anzeige nicht zu einem Layoutwechsel.
Wir haben dafür gesorgt, dass der für den Anzeigen-Slot reservierte Bereich der am häufigsten ausgelieferten Höhe der Anzeige entspricht.

Bilder

Viele der Bilder auf der Website werden mit verzögertem Laden angezeigt und der dafür erforderliche Platz ist reserviert.

Animation des Ladens von Artikelvorschaukarten
Lazy Loading von Bildern ohne Unterbrechung des Layouts.

Für die Inline-Bilder oben in den Artikeln war jedoch kein Platz im Container reserviert und die Tags hatten keine Breite- und Höhe-Attribute. Dadurch hat sich das Layout beim Laden verschoben.

Animation des Ladens der Artikelseite. Wenn das Hauptbild oben auf der Seite geladen wird, wird der Text nach unten verschoben.
Eine Layoutänderung, die durch das Hauptbild des Artikels verursacht wird.

Durch das einfache Hinzufügen der Attribute „width“ und „height“ zu den Bildern konnte das Layout nicht verschoben werden.

Animation des Ladens der Artikelseite mit Platzhalter für das Hauptbild Wenn das Hauptbild oben auf der Seite geladen wird, ändert sich das Layout nicht.
Das Hauptbild des Artikels wird geladen, ohne dass sich das Layout verschiebt.

Der Header befand sich im Markup unter dem Inhalt und wurde mit CSS oben positioniert. Ursprünglich sollte das Laden der Inhalte vor der Navigation priorisiert werden, was jedoch dazu führte, dass sich die Seite kurzzeitig verschob.

ALT_TEXT_HERE
Die Kopfzeile der Seite wird nicht elegant geladen.

Durch das Verschieben der Überschrift an den Anfang des Markups konnte die Seite ohne diese Verschiebung gerendert werden.

ALT_TEXT_HERE
Das Layout wird nicht mehr durch den Header des Seitenladevorgangs unterbrochen.

Embeds API

Einige der häufig verwendeten Einbettungen haben ein definiertes Seitenverhältnis. Beispielsweise YouTube-Videos. Während der Player geladen wird, wird das Thumbnail von YouTube abgerufen und als Platzhalter verwendet, bis das Video geladen ist.

Im Videoplayer-Slot wird ein Thumbnail mit niedriger Auflösung geladen, während der Videoplayer geladen wird.
Im Videoplayer-Slot wird während des Ladens des Videoplayers eine Miniaturansicht mit niedriger Auflösung geladen.

Auswirkungen messen

Mit den Tools, die wir zu Beginn des Artikels erwähnt haben, konnten wir die Auswirkungen auf Funktionsebene ganz einfach messen. Wir wollten den CLS jedoch sowohl auf Vorlagen- als auch auf Websiteebene messen. Wir haben SpeedCurve verwendet, um Änderungen sowohl in der Vorproduktion als auch in der Produktion zu validieren.

SpeedCurve-Diagramm mit einem starken Rückgang des CLS-Werts
CLS-Fortschritt mit SpeedCurve synthetisch erfassen

Sobald der Code in der Produktion ist, können wir die Ergebnisse in unseren RUM-Daten (von mPulse bereitgestellt) validieren.

mPulse-Diagramm mit einem Rückgang des CLS-Werts
Websiteweite CLS-Verbesserungen mit mPulse-RUM-Daten vor und nach den Änderungen validieren

Die Überprüfung der RUM-Daten gibt uns eine gute Sicherheit, dass die von uns vorgenommenen Änderungen sich positiv auf unsere Leser auswirken.

Die endgültigen Zahlen beziehen sich auf die von Google erhobenen RUM-Daten. Das ist jetzt besonders relevant, da sie bald einen Einfluss auf das Seitenranking haben werden. Zuerst haben wir den Chrome UX-Bericht verwendet, sowohl die monatlichen Daten auf Ursprungsebene, die über das CrUX-Dashboard verfügbar sind, als auch BigQuery-Abfragen, um Verlaufsdaten für den P75 abzurufen. So konnten wir ganz einfach sehen, dass sich für den gesamten mit CrUX gemessenen Traffic der CLS-Wert des 75. Perzentil um 250% von 0,25 auf 0,1 verbessert und der Bucket für erfolgreiche Seiten von 57% auf 72%gestiegen ist.

CrUX-Dashboard, in dem der 75. Perzentilwert der CLS für telegraph.co.uk 0,1 beträgt
Ergebnisse aus dem Crux-Dashboard
In BigQuery sind die Werte für den P75 von Monat zu Monat von 0,25 auf 0,1 gesunken.
BigQuery-Ausführung mit den Werten für den P75 von 2021 bis heute.

Außerdem konnten wir die Chrome UX Report API verwenden und einige interne Dashboards in Vorlagen unterteilen.

Internes Dashboard mit einer durchschnittlichen Bewertung von 76,2 Punkten (gut), 9,3 Punkten (verbesserungswürdig) und 14,6 Punkten (schlecht).
Interne Dashboards, die die Chrome UX Report API nutzen und unsere durchschnittliche Bewertung sowie die Seiten mit der schlechtesten Leistung mithilfe dieser Vorlage hervorheben.

CLS-Rückgänge vermeiden

Ein wichtiger Aspekt bei der Leistungsverbesserung ist die Vermeidung von Rückschritten. Wir haben einige grundlegende Leistungsbudgets für unsere wichtigsten Messwerte eingerichtet und CLS darin aufgenommen.

Ein Dashboard für das Leistungsbudget mit synthetischen Prüfungen, mit denen die CLS für einige unserer Vorlagen mit hohem Traffic gemessen wird. Das Budget ist derzeit auf 0,025 festgelegt.

Wenn das Budget überschritten wird, wird eine Nachricht an einen Slack-Kanal gesendet, damit wir der Ursache auf den Grund gehen können. Außerdem haben wir wöchentliche Berichte eingerichtet, damit wir auch dann über Änderungen informiert sind, wenn die Vorlagen im Budget bleiben, aber eine negative Auswirkung haben.

Außerdem planen wir, unsere Budgets zu erweitern, um sowohl RUM- als auch synthetische Daten zu verwenden. Mit mPulse können wir sowohl statische Benachrichtigungen als auch Anomalieerkennungen einrichten, die uns auf ungewöhnliche Änderungen aufmerksam machen.

Bei der Entwicklung neuer Funktionen ist es wichtig, den CLS im Hinterkopf zu behalten. Viele der von mir erwähnten Änderungen mussten wir korrigieren, nachdem sie für unsere Leser veröffentlicht wurden. Die Layoutstabilität wird beim Design der Lösung für jede neue Funktion berücksichtigt, damit wir von Anfang an unerwartete Layoutänderungen vermeiden können.

Fazit

Die bisher vorgenommenen Verbesserungen waren recht einfach umzusetzen und haben sich deutlich ausgewirkt. Viele der in diesem Artikel beschriebenen Änderungen konnten schnell umgesetzt werden und wurden auf alle am häufigsten verwendeten Vorlagen angewendet. Das hat sich positiv auf viele unserer Leser ausgewirkt.

Es gibt jedoch noch Bereiche der Website, die wir verbessern müssen. Wir prüfen derzeit, wie wir mehr clientseitige Logik serverseitig ausführen können, um den CLS weiter zu verbessern. Wir werden unsere Messwerte weiter beobachten und analysieren, um sie kontinuierlich zu verbessern und unseren Lesern die bestmögliche Nutzererfahrung zu bieten.