Miglioramento della variazione cumulativa del layout in Telegraph Media Group

Nel giro di un paio di mesi, il principale sito web di notizie del Regno Unito è riuscito a migliorare il CLS del 75° percentile del 250%, passando da 0,25 a 0,1.

La verifica della stabilità visiva

Le variazioni del layout possono essere molto disgreganti. Per Telegraph Media Group (TMG), la stabilità visiva è particolarmente importante perché i lettori utilizzano prevalentemente le nostre applicazioni per consumare le notizie. Se il layout cambia durante la lettura di un articolo, il lettore probabilmente perderà il segno. Questa può essere un'esperienza frustrante e di distrazione.

Dal punto di vista dell'ingegneria, assicurarsi che le pagine non si spostino e non interrompano il lettore può essere complicato, soprattutto quando le aree dell'applicazione vengono caricate in modo asincrono e aggiunte alla pagina in modo dinamico.

In TMG, abbiamo più team che contribuiscono con codice lato client:

  • Ingegneria di base. Implementazione di soluzioni di terze parti per potenziare aree come i consigli sui contenuti e i commenti.
  • Marketing. Eseguiamo test A/B per valutare in che modo i nostri lettori interagiscono con nuove funzionalità o modifiche.
  • Pubblicità. Gestione delle richieste di annunci e delle offerte preliminari per gli annunci.
  • Requisiti redazionali. Codice incorporato all'interno di articoli come tweet o video, nonché widget personalizzati (ad esempio il tracker dei casi di coronavirus).

Garantire che ciascuno di questi team non causi interruzioni nel layout della pagina può essere difficile. Utilizzando la metrica Spostamento cumulativo del layout per misurare la frequenza con cui si verifica per i nostri lettori, i team hanno ottenuto informazioni più dettagliate sull'esperienza utente reale e un obiettivo chiaro da raggiungere. Di conseguenza, il CLS del 75° percentile è migliorato da 0,25 a 0,1 e il bucket di passaggio è aumentato dal 57% al 72%.

250%

Miglioramento del CLS al 75° percentile

15%

Più utenti con un buon punteggio CLS

Dove abbiamo iniziato

Utilizzando le dashboard CrUX, abbiamo potuto stabilire che le nostre pagine si spostavano più di quanto avremmo voluto.

Dashboard CrUX che mostra circa il 55-60% di punteggi buoni, il 15% di punteggi che richiedono miglioramenti e il 25% di punteggi scadenti.
I nostri punteggi Cumulative Layout Shift tra giugno 2020 e febbraio 2021.

Idealmente volevamo che almeno il 75% dei nostri lettori avesse un'esperienza "buona", quindi abbiamo iniziato a identificare le cause dell'instabilità del layout.

Come abbiamo misurato le modifiche al layout

Abbiamo utilizzato una combinazione di Chrome DevTools e WebPageTest per capire cosa causava il cambiamento del layout. In DevTools, abbiamo utilizzato la sezione Esperienza della scheda Rendimento per evidenziare le singole istanze di layout in mutazione e il loro contributo al punteggio complessivo.

La prima pagina di Telegraph con un annuncio nell'intestazione evidenziato da un overlay blu.
Identificazione di uno spostamento del layout causato dal caricamento dell'annuncio lato client sopra l'intestazione utilizzando la sezione Esperienza di Chrome DevTools.

WebPageTest evidenzia dove si verifica il cambiamento di layout nella visualizzazione della sequenza temporale quando è selezionata l'opzione "Evidenzia cambiamenti di layout".

Visualizzazione della sequenza di immagini di WebPageTest del sito web di Telegraph con il layoutshift evidenziato da un overlay rosso.
WebPageTest evidenzia dove si è verificato lo spostamento del layout.

Dopo aver esaminato ogni variazione nei nostri modelli più visitati, abbiamo stilato un elenco di idee su come possiamo migliorare.

Ridurre le variazioni del layout

Ci siamo concentrati su quattro aree in cui potevamo ridurre i cambiamenti di layout: - annunci - immagini - intestazioni - contenuti incorporati

Annunci

Gli annunci vengono caricati dopo la visualizzazione iniziale tramite JavaScript. Alcuni dei contenitori caricati non avevano un'altezza riservata.

Animazione del sito web del Telegraph. L'elenco delle Storie viene spostato verso il basso quando sopra viene caricato un annuncio.
Il blocco "Altre storie" sotto l'annuncio viene spostato verso il basso dopo il caricamento dell'annuncio.

Anche se non conosciamo l'altezza esatta, possiamo prenotare lo spazio utilizzando le dimensioni degli annunci più comuni caricate nell'area.

Animazione del sito web del Telegraph. Sopra l'elenco delle Storie viene inserito un rettangolo segnaposto per l'annuncio. L'annuncio viene caricato al posto del segnaposto senza causare uno spostamento del layout.
Prenotando uno spazio per l'annuncio, il blocco "Altre storie" di seguito rimane statico prima e dopo il caricamento dell'annuncio.

In alcuni casi abbiamo valutato erroneamente l'altezza media dell'annuncio. Per i lettori di tablet, lo slot si chiudeva.

Animazione di una visualizzazione del sito web di Telegraph su tablet. Lo spazio segnaposto è più grande dell'annuncio, quindi i contenuti si spostano verso l'alto dopo il caricamento dell'annuncio.
L'area annuncio si comprime dopo il caricamento per i lettori su dispositivi di dimensioni simili a quelle di un tablet.

Abbiamo rivisto l'area e regolato l'altezza in modo da utilizzare le dimensioni più comuni.

Animazione di una visualizzazione del sito web di Telegraph su tablet. Se il segnaposto corrisponde alle dimensioni dell'annuncio, non si verificano modifiche al layout al momento del caricamento dell'annuncio.
Abbiamo verificato che lo spazio riservato per lo spazio dell'annuncio corrispondesse all'altezza più comunemente pubblicata dell'annuncio.

Immagini

Molte delle immagini del sito web sono caricate in modo lazy e hanno uno spazio riservato.

Animazione del caricamento delle schede di anteprima degli articoli.
Caricamento lento delle immagini senza interrompere il layout.

Tuttavia, le immagini in linea nella parte superiore degli articoli non avevano spazio riservato nel contenitore né attributi larghezza e altezza associati ai tag. Ciò ha causato uno spostamento del layout durante il caricamento.

Animazione del caricamento della pagina dell'articolo. Quando l'immagine principale viene caricata nella parte superiore della pagina, il testo si sposta verso il basso.
Un cambiamento di layout causato dall'immagine principale dell'articolo.

È sufficiente aggiungere gli attributi larghezza e altezza alle immagini per garantire che il layout non subisca variazioni.

Animazione del caricamento della pagina dell'articolo con segnaposto riservato all'immagine principale. Quando l'immagine principale viene caricata nella parte superiore della pagina, non si verifica alcun cambiamento nel layout.
L'immagine principale dell'articolo viene caricata senza modificare il layout.

L'intestazione si trovava sotto i contenuti nel markup ed era posizionata in alto utilizzando CSS. L'idea originale era dare la priorità al caricamento dei contenuti prima della navigazione, ma questo ha causato un momentaneo spostamento della pagina.

ALT_TEXT_HERE
L'intestazione della pagina si carica in modo poco elegante.

Lo spostamento dell'intestazione nella parte superiore del markup ha consentito il rendering della pagina senza questo spostamento.

ALT_TEXT_HERE
Il layout non è più interrotto dall'intestazione del caricamento della pagina.

Incorporamenti

Alcuni degli elementi incorporati di uso frequente hanno un formato definito. Ad esempio, video di YouTube. Durante il caricamento del player, recuperiamo la miniatura da YouTube e la utilizziamo come segnaposto durante il caricamento del video.

La miniatura a bassa risoluzione viene caricata nello spazio del video player durante il caricamento del video player.
L'area del video player carica una miniatura a bassa risoluzione durante il caricamento del video player.

Misurare l'impatto

Abbiamo potuto misurare l'impatto a livello di funzionalità abbastanza facilmente utilizzando gli strumenti menzionati all'inizio dell'articolo. Tuttavia, volevamo misurare il valore CLS sia a livello di modello che a livello di sito. In modo sintetico, abbiamo utilizzato SpeedCurve per convalidare le modifiche sia in pre-produzione che in produzione.

Grafico di SpeedCurve che mostra un forte calo del punteggio CLS.
Monitoraggio dei progressi del CLS in modo sintetico utilizzando SpeedCurve.

Una volta che il codice è stato implementato in produzione, possiamo convalidare i risultati nei nostri dati RUM (forniti da mPulse).

Grafico mPulse che mostra un calo del punteggio CLS.
Convalida dei miglioramenti del CLS a livello di sito con i dati RUM di mPulse prima e dopo l'applicazione delle modifiche.

Il controllo dei dati RUM ci offre un buon livello di certezza che le modifiche che stiamo apportando stiano avendo un impatto positivo per i nostri lettori.

I numeri finali che abbiamo esaminato si riferiscono ai dati RUM raccolti da Google. Questo è particolarmente importante ora, perché a breve avranno un impatto sul ranking della pagina. Per iniziare, abbiamo utilizzato il report sull'esperienza utente di Chrome, sia nei dati mensili a livello di origine disponibili tramite la dashboard CrUX, sia eseguendo query su BigQuery per recuperare i dati storici della p75. In questo modo abbiamo potuto facilmente vedere che per tutto il traffico misurato da CrUX, il nostro CLS al 75° percentile è migliorato del 250%, passando da 0,25 a 0,1 e il nostro bucket di passaggio è aumentato dal 57% al 72%.

La dashboard CrUX che mostra il CLS p75 per telegraph.co.uk è 0,1.
Risultati della dashboard di Crux.
BigQuery mostra un miglioramento dei valori p75 mese dopo mese, da 0,25 a 0,1.
Esecuzione di BigQuery che mostra i valori p75 dal 2021 a oggi.

Inoltre, abbiamo potuto utilizzare l'API Report sull'esperienza utente di Chrome e creare alcune dashboard interne suddivise in modelli.

Dashboard interna che mostra un punteggio medio buono di 76,2, un punteggio che richiede miglioramenti di 9,3 e un punteggio scarso di 14,6.
Dashboard interne che utilizzano l'API Chrome UX Report per evidenziare il nostro punteggio medio e le pagine con il rendimento peggiore che utilizzano questo modello.

Evitare le regressioni del CLS

Un aspetto importante per migliorare le prestazioni è evitare le regressioni. Abbiamo impostato alcuni budget di rendimento di base per le nostre metriche principali e abbiamo incluso il CLS.

Una dashboard del budget di rendimento che mostra i controlli sintetici che misurano il CLS su alcuni dei nostri modelli ad alto traffico. Al momento il budget è impostato su 0,025.

Se il test supera il budget, verrà inviato un messaggio a un canale Slack per consentirci di esaminare la causa. Abbiamo anche configurato report settimanali, in modo che, anche se i modelli rimangono in budget, siamo a conoscenza di eventuali modifiche che hanno avuto un impatto negativo.

Inoltre, prevediamo di espandere i nostri budget per utilizzare i dati RUM e quelli sintetici, utilizzando mPulse per impostare sia avvisi statici sia potenzialmente il rilevamento di anomalie, che ci avvisano di eventuali variazioni fuori dall'ordinario.

È importante per noi approcciarci alle nuove funzionalità tenendo presente il CLS. Molte delle modifiche che ho citato sono quelle che abbiamo dovuto correggere dopo che sono state rilasciate ai nostri lettori. La stabilità del layout verrà presa in considerazione per il design della soluzione di qualsiasi nuova funzionalità in futuro, in modo da evitare cambiamenti imprevisti del layout fin dall'inizio.

Conclusione

I miglioramenti apportati finora sono stati abbastanza facili da implementare e hanno avuto un impatto significativo. Molte delle modifiche descritte in questo articolo non hanno richiesto molto tempo per essere implementate e sono state applicate a tutti i modelli più utilizzati, il che significa che hanno avuto un impatto positivo diffuso per i nostri lettori.

Ci sono ancora aree del sito che dobbiamo migliorare. Stiamo esplorando modi per poter eseguire più logica lato client lato server, in modo da migliorare ulteriormente il CLS. Continueremo a monitorare le nostre metriche con l'obiettivo di migliorarle costantemente e offrire ai nostri lettori la migliore esperienza utente possibile.