第4章:Core Web Vitalsを軸にした詳細な最適化アプローチ
PageSpeed Insightsスコア90以上を目標とする上で、Core Web Vitals(LCP、FID、CLS)の各指標を深く理解し、それらに対する具体的な最適化アプローチを講じることは不可欠です。これらの指標は、単なる数字ではなく、ユーザーがサイトを閲覧する際の体感を数値化したものであり、それぞれの特性に応じた戦略が求められます。
Largest Contentful Paint (LCP) の最適化
LCPは、ページが読み込まれ始めてから、ビューポート内で最大の画像要素またはテキストブロックが表示されるまでの時間を測定します。これはユーザーが「ページが実際に読み込まれた」と感じる瞬間に最も近い指標です。
LCP改善のための詳細なアプローチ
1. ヒーローコンテンツの優先読み込み
ファーストビューで最も大きなコンテンツ(ヒーローイメージ、メインの見出し、動画など)を特定し、そのリソースを最優先で読み込むようにします。
– HTMLの
のように記述し、ブラウザに優先読み込みを指示します。– 画像をCSSのbackground-imageで指定している場合も、同様にプリロードを検討するか、HTMLの
2. サーバー応答時間 (TTFB) の短縮
LCPはTTFBに強く依存します。TTFBを短縮することで、他のすべてのリソースの読み込み開始を早めることができます。
– 高性能なサーバーの利用: マネージドWordPressホスティングなど、高速なI/O性能とCPUリソースを持つサーバーを選定します。
– PHPの最新バージョン利用: PHP 8.x以降は、古いバージョンと比較して大幅なパフォーマンス向上を実現しています。常に最新かつ安定したバージョンに更新します。
– データベースクエリの最適化: 低速なデータベースクエリを特定し、インデックスの追加、不要なデータの削除、ORマッパーの効率的な利用などを検討します。
– サーバーサイドキャッシュの導入: VarnishやRedisなどのオブジェクトキャッシュ、OpCacheなどを活用し、動的なページの生成時間を短縮します。
3. 画像リソースの最適化
– WebP/AVIFへの変換: JPEGやPNGよりも圧縮効率の高い次世代フォーマットに変換し、ファイルサイズを削減します。
– 適切なサイズのスケーリング: ビューポートに対して大きすぎる画像を配信しないよう、レスポンシブイメージ技術(srcset, sizes属性)を適用します。
– 画像CDNの活用: Cloudflare Image ResizingやImgixのようなサービスを利用し、リアルタイムで最適なフォーマットとサイズに変換して配信します。
4. レンダリングブロックの排除
– クリティカルCSSのインライン化: ファーストビューのレンダリングに必要な最小限のCSSをHTMLの
– JavaScriptの非同期読み込み: すべてのJavaScriptファイルにdeferまたはasync属性を適用し、HTMLのパースをブロックしないようにします。LCP要素の表示に不可欠なJavaScriptは、インライン化を検討する場合がありますが、慎重な検討が必要です。
First Input Delay (FID) の最適化
FIDは、ユーザーがページと最初にインタラクトした(ボタンをクリック、リンクをタップなど)際から、ブラウザがそのインタラクションを処理できるまでの時間を測定します。JavaScriptの実行がUIスレッドをブロックする「長いタスク」が主な原因です。
FID改善のための詳細なアプローチ
1. JavaScriptの実行時間の短縮
– JavaScriptの分割 (Code Splitting): ページの初期読み込み時に必要なJavaScriptだけをロードし、残りは必要に応じて遅延ロードします。webpackなどのバンドラーで実現できます。
– 不要なJavaScriptの削除: 使用されていないJavaScriptを識別し、削除またはリファクタリングします。
– サードパーティスクリプトの遅延読み込み: 広告、アナリティクス、チャットウィジェットなどのサードパーティスクリプトは、しばしば長いタスクを引き起こします。これらにasyncまたはdefer属性を適用するか、requestIdleCallbackなどを利用して優先度を下げて実行します。
– Web Workersの活用: 複雑な計算処理をメインスレッドからWeb Workerにオフロードすることで、UIの応答性を維持します。
2. メインスレッドの作業負荷軽減
– CSSとJavaScriptの結合・最小化: ファイルサイズを減らし、ダウンロードとパースの時間を短縮します。
– パフォーマンスプロファイリング: Chrome DevToolsのPerformanceタブを使用して、メインスレッドのボトルネックとなっているJavaScriptの関数やイベントハンドラを特定し、最適化します。
Cumulative Layout Shift (CLS) の最適化
CLSは、ページのライフサイクル中に発生する全ての予期せぬレイアウトシフトの合計スコアを測定します。これは、画像や広告が遅れてロードされることによって、ユーザーがクリックしようとした要素が突然移動し、誤クリックを誘発するような事象を防ぐことを目的としています。
CLS改善のための詳細なアプローチ
1. 画像と動画にサイズ属性を指定
タグやタグにwidthとheight属性を必ず指定し、ブラウザがレンダリング前にそれらの要素のためにスペースを確保できるようにします。CSSでアスペクト比を維持するスタイル(例: aspect-ratioプロパティ)を使用するのも有効です。
2. 広告、埋め込み、iframeにスペースを確保
広告や外部コンテンツを埋め込む際は、そのための固定されたスペースをCSSで予約しておきます。例えば、最小の高さを設定しておくなどです。広告ネットワークによっては、遅延読み込みと同時に固定サイズを適用する機能を提供している場合もあります。
3. ウェブフォントの読み込み戦略
– font-displayプロパティの使用: font-display: swap;を使用すると、ウェブフォントが読み込まれるまでシステムのフォントでテキストを表示し、フォント読み込み後に切り替わります。これにより、フォントの遅延によるレイアウトシフトを最小限に抑えます。
– フォントの事前読み込み: でフォントファイルを優先的に読み込みます。
4. 動的コンテンツの慎重な追加
ユーザーの操作を伴わない限り、既存のコンテンツの上に新しいコンテンツを挿入しないようにします。新しいコンテンツを追加する場合は、既存のコンテンツのスペースを移動させないよう、常にそのためのスペースを予約しておくか、アニメーションを用いてスムーズに表示させます。
これらのCore Web Vitals指標を意識した詳細な最適化は、PageSpeed Insightsスコア90以上を達成するだけでなく、真にユーザーフレンドリーなウェブサイトを構築するための基盤となります。
主要なPageSpeed Insights最適化手法とその効果
以下の表は、主要な最適化手法とそれがどのCore Web Vitals指標に主に影響し、どの程度の難易度と効果があるかを示します。
| 最適化手法 | 主な影響指標 | 推奨プラグイン/技術 | 難易度 | 効果 |
|---|---|---|---|---|
| サーバー応答時間の短縮 | LCP, TTFB | 高性能ホスティング, PHP更新, サーバーキャッシュ | 中〜高 | 高 |
| 画像最適化 (WebP, 遅延読み込み, サイズ指定) | LCP, CLS | Smush, Imagify, WebP Express, srcset, loading="lazy" |
低〜中 | 高 |
| CSSの最小化・結合・非同期化 | LCP, FCP | Autoptimize, Asset CleanUp, クリティカルCSS | 中 | 中〜高 |
| JavaScriptの最小化・非同期化・遅延読み込み | FID, LCP | Autoptimize, defer/async属性, Code Splitting | 中〜高 | 高 |
| ブラウザキャッシュの設定 | LCP (再訪時) | WP Rocket, .htaccess設定 | 低 | 中 |
| CDNの活用 | LCP, TTFB | Cloudflare, WP Rocket CDN機能 | 低〜中 | 高 |
| ウェブフォントの最適化 | CLS, LCP | font-display: swap;, preload |
中 | 中 |
| サードパーティスクリプトの管理 | FID, LCP | async/defer, requestIdleCallback |
高 | 中〜高 |