Telegraph Media Group の Cumulative Layout Shift の改善

英国の大手ニュースサイトは、数か月で 75 パーセンタイルの CLS を 0.25 から 0.1 に 250% 向上させることができました。

視覚的な安定性の課題

レイアウト シフトは大きな混乱を招く可能性があります。Telegraph Media Group(TMG)では、読者は主に Google のアプリケーションを使用してニュースを視聴するため、視覚的な安定性が特に重要です。記事を読んでいる間にレイアウトが変化すると、読み手が読めなくなる可能性が高くなります。ストレスを感じるかもしれませんが、気が散る可能性があります。

エンジニアリングの観点からすると、ページを移動したり、読者の妨げになったりしないようにすることは、特にアプリケーション領域が非同期で読み込まれて動的にページに追加されている場合は特に困難です。

TMG では、クライアントサイドでコードに貢献する複数のチームがあります。

  • コア エンジニアリングサードパーティ ソリューションを実装して、コンテンツのレコメンデーションやコメントなどの領域を強化します。
  • マーケティング。A/B テストを実施して、新機能や変更に対する読者のインタラクションを評価する。
  • 広告。広告リクエストと広告の事前入札を管理する。
  • 編集基準と表現。ツイートや動画などの記事や、カスタム ウィジェット(新型コロナウイルスのケース トラッカーなど)にコードを埋め込む。

これらの各チームによってページのレイアウトが揺れないようにすることは、困難な場合があります。Cumulative Layout Shift 指標を使用して、読者がどの程度の頻度で発生しているかを測定することで、チームは実際のユーザー エクスペリエンスをより深く理解し、目指すべき明確な目標を得ることができました。その結果、75 パーセンタイルの CLS が 0.25 から 0.1 に改善され、合格バケットは 57% から 72% に増加しました。

250%

CLS の 75 パーセンタイル改善

15%

CLS スコアが良好なユーザーの増加率

最初

CrUX ダッシュボードを使用して、想定以上にページが移動していることを把握することができました。

CrUX ダッシュボードの表示では、約 55 ~ 60% は良好、15% は改善が必要、25% は不良スコアを示しています。
2020 年 6 月から 2021 年 2 月までの Cumulative Layout Shift スコア。

理想的には、読者の少なくとも 75% に「良い」体験をしてもらいたいため、レイアウトの不安定性の原因の特定を開始しました。

レイアウト シフトの測定方法

そこで、Chrome DevToolsWebPageTest を組み合わせて、レイアウトがずれた原因を特定できるようにしました。DevTools では、[Performance] タブの [Experience(エクスペリエンス)] セクションを使用して、レイアウト シフトの個々のインスタンスと、それらが全体的なスコアにどのように影響したかをハイライト表示しました。

青いオーバーレイでヘッダーに広告が表示されている Telegraph のフロントページ。
Chrome DevTools の [エクスペリエンス] セクションを使用して、ヘッダーの上でクライアントサイドで広告が読み込まれることによるレイアウト シフトを特定する。

WebPageTest では、[Highlight Layout Shifts] が選択されたときに、タイムライン ビューでレイアウト シフトが発生している箇所がハイライト表示されます。

Telegraph ウェブサイトの WebPageTest フィルムストリップ ビュー。Layoutshift が赤色のオーバーレイでハイライト表示されている。
WebPageTest でレイアウトがシフトした箇所をハイライト表示。

特にアクセス数の多いテンプレートから各要素の変更を検討した結果、改善方法に関するアイデアのリストを作成しました。

レイアウト シフトを減らす

私たちは、レイアウト シフトを削減できる次の 4 つの領域に焦点を当てました。 - 広告 - 画像 - ヘッダー - 埋め込み

広告

広告は、JavaScript によって最初のペイントの後に読み込まれます。読み込まれたコンテナの一部では、高さが予約されていませんでした。

Telegraph ウェブサイトのアニメーション記事のリストの上に広告が読み込まれると、そのリストが下にスクロールされます。
広告が読み込まれた後、広告の下の「その他の記事」ブロックの位置が下がります。

正確な高さはわかりませんが、スロットに読み込まれる最も一般的な広告サイズを使用してスペースを予約できます。

Telegraph ウェブサイトのアニメーション広告のプレースホルダの長方形がストーリーのリストの上に配置されます。プレースホルダの代わりに広告が読み込まれます。レイアウトは移動されません。
広告用のスペースを確保することで、広告が読み込まれる前後に [その他の記事] のブロックは固定されたままになります。

広告の平均高さを誤って判断していたケースがありました。タブレット リーダーの場合、スロットが折りたたまれていました。

タブレットで Telegraph のウェブサイトを表示したアニメーション。プレースホルダ スロットが広告よりも大きいため、広告が読み込まれるとコンテンツが上に移動します。
タブレット サイズのデバイスで読者向けに、読み込み後に広告スロットが折りたたまれる。

スロットを見直し、最も一般的なサイズを使用するように高さを調整しました。

タブレットで Telegraph のウェブサイトを表示したアニメーション。プレースホルダが広告サイズと一致すると、広告の読み込み時にレイアウト シフトは発生しません。
広告スロット用に確保したスペースを、一般的に配信される広告の高さに合わせるようにします。

画像

ウェブサイト上の画像の多くは遅延読み込みされ、それぞれのスペースが予約されています。

記事のプレビュー カードを読み込んでいます。
レイアウトを中断することなく、画像を遅延読み込みする。

しかし、記事の上部にあるインライン画像には、コンテナ上で予約されたスペースがなく、タグに関連付けられた幅と高さの属性もありませんでした。これにより、読み込み時にレイアウトが移動しました。

記事ページの読み込みアニメーションメイン画像がページ上部に読み込まれると、テキストは下に移動します。
記事のメイン画像が原因でレイアウトがずれています。

幅と高さの属性を画像に追加するだけで、レイアウトがずれることはありませんでした。

メイン画像用に予約されたプレースホルダを使用して、記事ページを読み込むアニメーション。メイン画像がページ上部に読み込まれると、レイアウト シフトはありません。
レイアウトが移動することなくメインの記事の画像が読み込まれる様子。

ヘッダーは、マークアップのコンテンツの下に配置され、CSS を使用して上部に配置されていました。当初のアイデアは、ナビゲーションの前にコンテンツの読み込みを優先するというものでしたが、これによってページが一瞬変化してしまいました。

ALT_TEXT_HERE
不規則に読み込まれるページのヘッダー。

ヘッダーをマークアップの先頭に移動することで、このシフトなしでページをレンダリングできるようになりました。

ALT_TEXT_HERE
ページ読み込みのヘッダーによってレイアウトが中断されることがなくなりました。

埋め込み

よく使用される埋め込みの中には、アスペクト比が定義されているものもあります。たとえば、YouTube 動画などです。プレーヤーの読み込み中に YouTube からサムネイルを取得し、動画の読み込み中にプレースホルダとして使用します。

動画プレーヤーの読み込み中に低解像度のサムネイルを読み込む動画プレーヤー スロット
動画プレーヤーの読み込み中に低解像度のサムネイルを読み込む動画プレーヤー スロット。

影響の測定

記事の冒頭で紹介したツールを使用して、機能レベルでの影響を非常に簡単に測定できました。しかし、テンプレート レベルとサイトレベルの両方で CLS を測定したいと考えました。合成として、SpeedCurve を使用して、本番前環境と本番環境の両方で変更を検証しました。

CLS スコアの急激な低下を示す SpeedCurve グラフ。
SpeedCurve を使用して CLS の進捗状況を合成的にトラッキングする。

コードが本番環境にリリースされると、RUM データ(mPulse により提供)で結果を検証できます。

CLS スコアの低下を示す mPulse グラフ。
変更前と変更後の mPulse RUM データを使用して、サイト全体の CLS の改善を検証します。

RUM データを確認することで、Google が行う変更が読者にプラスの影響をもたらしているという確信が持てます。

最後に確認した数値は、Google が収集した RUM データのものです。まもなくページ ランキングに影響するため、この点は特に重要です。まず、Chrome UX レポートを使用しました。これは、CrUX ダッシュボードを通じて入手できる月次オリジン レベルのデータと、BigQuery に対してクエリを実行して過去の p75 データを取得したものです。これにより、CrUX で測定したすべてのトラフィックについて、75 パーセンタイルの CLS が 0.25 から 0.1 に 250% 向上し、合格バケットが 57% から 72%に増加したことを簡単に確認できました。

telegraph.co.uk の p75 CLS が 0.1 であることを示す CrUX ダッシュボード。
Crux ダッシュボードの結果。
p75 値が月ごとに 0.25 から 0.1 に向上していることを示す BigQuery。
BigQuery の実行で 2021 年の現在までの p75 値が表示されている。

さらに、Chrome UX Report API を利用して、内部ダッシュボードをテンプレートに分割しました。

社内ダッシュボードの結果、平均スコアは 76.2、要改善は 9.3、不良スコアは 14.6 でした。
Chrome UX Report API を活用した内部ダッシュボード。そのテンプレートを使用して、平均スコアと最もパフォーマンスが低いページをハイライト表示しています。

CLS 回帰の回避

パフォーマンスの改善において重要な点は、回帰を回避することです。主要な指標に関する基本的なパフォーマンス バジェットを設定し、それらに CLS を含めています。

トラフィックの多いテンプレートの一部で CLS を測定する合成チェックを示すパフォーマンス バジェット ダッシュボード。予算は現在 0.025 に設定されています。

テストが予算を超えると、Slack チャンネルにメッセージが送信され、原因を調査できます。また、週次レポートも用意し、テンプレートが予算内に残っていたとしても、悪影響を及ぼした変更を把握できるようにしています。

また、予算を拡張して RUM データと合成データも使用し、mPulse を使用して静的アラート異常検出の両方を設定し、通常とは異なる変化を認識できるようにする予定です。

Google では、CLS を念頭に置いて新機能にアプローチすることが重要です。これまで触れた変更の多くは、読者にリリースした後に修正が必要なものです。最初から予期しないレイアウト シフトを避けるため、レイアウトの安定性は、今後の新機能のソリューション設計で考慮されます。

おわりに

これまでの改善は簡単に実装でき、大きな効果をもたらしました。この記事で概説した多くの変更は、それほど時間はかからず、最もよく使用されるテンプレートのすべてに適用され、読者に幅広くプラスの影響を与えています。

サイトの改善点がまだ残っています。Google は、クライアント側のロジックをサーバーサイドでより多く実施し、CLS をさらに改善する方法を模索しています。Google は、指標を継続的に改善し、読者に最高のユーザー エクスペリエンスを提供するために、指標の追跡とモニタリングを継続します。