Core Web Vitals: ウェブパフォーマンスの測定と改善
ユーザーはページが瞬時に読み込まれ、遅延なく応答し、視覚的に安定していることを期待しています。GoogleのCore Web Vitals (CWV) はこれらの期待を数値化します。Largest Contentful Paint (LCP) は読み込みを、Interaction to Next Paint (INP) はインタラクティブ性を、Cumulative Layout Shift (CLS) は視覚的安定性を測定します。CWVスコアが悪いとユーザー体験が損なわれ、検索ランキングに影響を与える可能性があります。このガイドでは、各指標を測定し、開発者に優しい実践的なステップで改善する方法を紹介します。
Core Web Vitalsとは?
Core Web Vitalsは、実際のユーザー体験を反映する3つの指標です:
- LCP: 最大のコンテンツ要素(画像、テキストブロック、動画)がレンダリングされるまでの時間。良好: ≤2.5秒、改善が必要: ≤4秒、不良: >4秒。
- INP: ユーザーのインタラクション(クリック、タップ、キー押下)から次のフレームが描画されるまでの時間。良好: ≤200ms、改善が必要: ≤500ms、不良: >500ms。
- CLS: 予期しない視覚的移動に対するレイアウトシフトスコアの合計。良好: ≤0.1、改善が必要: ≤0.25、不良: >0.25。
これらのしきい値は、モバイルとデスクトップに分けて、ページ読み込みの75パーセンタイルに基づいています。
Core Web Vitalsの測定方法
ラボデータとフィールドデータの両方が必要です。ラボツールは条件をシミュレートし、フィールドデータは実際のユーザーから得られます。
ラボツール
- Lighthouse(Chrome DevToolsまたはPageSpeed Insights内): LCP、CLS、および合計ブロッキング時間(INPの代理指標)を監査します。
- WebPageTest: 高度なフィルムストリップとウォーターフォール分析。
- Chrome DevToolsのPerformanceパネル: インタラクションを記録して、INPに影響する長いタスクを特定します。
フィールドツール
- Chrome UX Report (CrUX): 公開サイトの実際のユーザーデータを集計。
- web-vitals JavaScriptライブラリ: 指標をアナリティクスに送信します。
- Search ConsoleのCore Web Vitalsレポート: URLをステータス別にグループ化します。
web-vitalsライブラリをnpm経由でインストールするか、CDNから含めてから、指標をログに記録します:
import {onLCP, onINP, onCLS} from 'web-vitals';
function sendToAnalytics(metric) {
const body = JSON.stringify(metric);
navigator.sendBeacon('/analytics', body);
}
onLCP(sendToAnalytics);
onINP(sendToAnalytics);
onCLS(sendToAnalytics);
アンロードをブロックしないようにsendBeaconを使用してください。時間をかけてデータを収集し、傾向を確認します。
Largest Contentful Paint (LCP) の改善
LCPは多くの場合、ヒーロー画像またはメイン見出しです。クリティカルパスを最適化します:
- LCPリソースを優先する: LCP画像に
fetchpriority="high"を追加するか、プリロードします。 - サーバー応答時間を短縮する: キャッシング、CDN、効率的なバックエンドクエリを使用します。
- レンダリングをブロックするリソースを排除する: 重要でないCSS/JSを遅延させ、クリティカルCSSをインライン化します。
- 画像を最適化する: 圧縮し、モダンなフォーマット(WebP/AVIF)を使用し、寸法を設定します。
- CDNを使用することで、ユーザーに近い場所からアセットを配信します。
例:LCP画像をプリロードし、fetchpriorityを設定します:
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high">
<img src="/hero.webp" alt="Hero" width="1200" height="600" fetchpriority="high">
画像圧縮には、Image Compressorを試して、目に見える品質低下なしでファイルサイズを削減してください。
Interaction to Next Paint (INP) の改善
INPは応答性を反映します。長いJavaScriptタスクはメインスレッドをブロックし、視覚的フィードバックを遅らせます。
- 長いタスクを分割する:
setTimeout、requestIdleCallback、またはscheduler.yield()を使用してブラウザに制御を譲ります。 - イベントハンドラを最適化する: 入力をデバウンスし、クリックハンドラで重い処理を避けます。
- JavaScriptを削減する: コード分割、ツリーシェイキング、重要でないスクリプトの遅延を行います。
- Web Workersを使用することで、CPU集約的な処理を行います。
- 大規模なDOM更新を避ける: DOMの変更をバッチ処理し、長いリストには仮想化を使用します。
web-vitalsライブラリでフィールドのINPを測定し、Performanceパネルを使用してインタラクション中の長いタスクを特定します。
Cumulative Layout Shift (CLS) の改善
CLSは要素が予期せず移動するときに発生します。一般的な原因:寸法のない画像、スペースが確保されていない広告/埋め込み、遅れて読み込まれるフォント。
- 画像と動画には常に幅と高さを設定するか、CSSの
aspect-ratioを使用します。 - 動的コンテンツ(広告、埋め込み)のスペースを確保するにはmin-heightを使用します。
font-display: swapを使用すると、主要なフォントをプリロードして、不可視テキストやレイアウトシフトを避けます。- ユーザーインタラクションによってトリガーされない限り、既存のコンテンツの上にコンテンツを挿入しないようにします。
例:レスポンシブ画像のアスペクト比を設定します:
img {
aspect-ratio: 16 / 9;
width: 100%;
height: auto;
}
Core Web Vitalsの比較
| 指標 | 測定内容 | 良好なしきい値 | 主な最適化 |
|---|---|---|---|
| LCP | 読み込みパフォーマンス | ≤2.5秒 | 画像、サーバー、クリティカルCSSの最適化 |
| INP | インタラクティブ性 | ≤200ms | JSの削減、長いタスクの分割 |
| CLS | 視覚的安定性 | ≤0.1 | 寸法の設定、スペースの確保 |
CWVを改善する実践的なワークフロー
- ベースラインを測定する: Lighthouseを実行し、web-vitalsでフィールドデータを収集します。
- ボトルネックを特定する: Performanceパネルとネットワークウォーターフォールを使用します。
- 修正を優先する: 最もスコアが悪い指標に焦点を当てます。
- 変更を実装する: 画像を最適化し、スクリプトを遅延させ、寸法を設定します。
- テストと監視: ラボテストを再実行し、時間をかけてフィールドデータを追跡します。
CWVはフィールド指標であることを忘れないでください。ラボツールは診断に役立ちますが、実際のユーザーデータが真実の源です。
よくある質問
Core Web Vitalsの現在のしきい値は?
良好: LCP ≤2.5秒、INP ≤200ms、CLS ≤0.1。改善が必要: LCP ≤4秒、INP ≤500ms、CLS ≤0.25。不良: これらの値を超える場合。これらはページ読み込みの75パーセンタイルで評価されます。
Core Web Vitalsはどのくらいの頻度で測定すべきですか?
フィールドデータを継続的に監視し、大きな変更後にラボ監査を実行します。少なくとも、Search ConsoleのCore Web Vitalsレポートを月に一度、およびフロントエンドパフォーマンスに影響するデプロイ後に確認してください。
サイトを再設計せずにCore Web Vitalsを改善できますか?
はい。多くの改善は技術的なものです:画像を圧縮し、幅/高さ属性を設定し、重要でないJavaScriptを遅延させ、長いタスクを分割します。これらの変更は、視覚的な再設計なしで大幅な改善をもたらすことがよくあります。
より良いLCPのために画像を最適化する準備はできましたか?無料のImage Compressorを使用して、品質を維持しながら画像を縮小し、Core Web Vitalsスコアを向上させましょう。