Core Web Vitals完全ガイド2026
LCP・INP・CLSをフィールドデータで読み解き、原因のレイヤーを切り分けて、検索順位を約束せずにユーザー体験を改善する方法を解説します。
Core Web Vitals(CWV)は、実際のユーザー体験を測るGoogleの指標群です。読み込み速度、操作への反応、表示の安定性を対象とします。2021年5月からページエクスペリエンスの一部となり、検索順位にも影響します。
3つの指標はいずれもURL単位で評価されます。トップページのスコアが良くても、商品ページの評価は上がりません。Googleが使うのは、ラボのシミュレーションではなくChromeユーザーエクスペリエンスレポート(実ユーザーのデータ)です。
Core Web Vitalsとは
LCP — 良好
最大要素の描画完了
INP — 良好
入力に画面が反応するまで
CLS — 良好
レイアウトのずれが最小限
評価のしきい値
良好の範囲に入るユーザーの割合
歴史:FIDからINPへ
GoogleがCore Web Vitalsを導入したのは2020年で、指標はLCP、FID(First Input Delay)、CLSの3つでした。FIDが測るのは最初のタップの遅延だけです。有用ではあるものの、ページの操作性の一部しか捉えていませんでした。
GoogleがLCP、FID、CLSの3指標を発表。各ツールが新しいシグナルに対応し始めます。
CWVが正式に検索アルゴリズムへ組み込まれます。展開は2021年8月に完了しました。
Interaction to Next PaintがFirst Input Delayに替わりました。INPは最初の1回だけでなく、セッション中のすべての操作が対象です。
JavaScriptの多いサイト(SPA、EC、絞り込み機能)はINPの影響を受けやすく、Long Taskの最適化が優先課題になっています。
LCP — Largest Contentful Paint
LCPは、ページ内で最も大きなコンテンツ要素の描画が完了した時点を記録します。多くの場合は、メインビジュアルの画像、記事のカバー画像、大きなH1見出しのいずれかです。
| LCPの値 | 評価 | 対応 |
|---|---|---|
| ≤ 2.5秒 | 良好 | 現状を維持し、Google Search Consoleで監視 |
| 2.5〜4.0秒 | 要改善 | 画像を最適化し、TTFBを短縮 |
| > 4.0秒 | 不良 | 最優先で対応。ただちに監査 |
LCPが遅くなる主な原因
- TTFBが遅い(サーバー、CDN、キャッシュなし)。LCP時間の最大40%を占めます
- メインビジュアルの画像が優先されていない(
fetchpriority="high"がない) - メインビジュアルの画像をプリロードしていない(
<link rel="preload">) - レンダリングをブロックするCSS/JSで最初の描画が遅れる
- 画像が大きすぎる(WebP/AVIFを使っていない、
srcsetがない) - LCP要素がJavaScriptの描画待ちになっている(LCPの時点でReactのSSRが完了していない)
<!-- Prioritise the LCP image -->
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high" />
<img
src="/hero.webp"
alt="Hero"
fetchpriority="high"
loading="eager"
decoding="async"
width="1280"
height="720"
/>loading="lazy"は使わないでください。ブラウザーが読み込みを後回しにし、LCPが悪化します。lazyはファーストビューより下の画像だけに使います。INP:Interaction to Next Paint(操作への反応)
INPは、ユーザーの操作(クリック、キー入力、タップ)から、画面が次に描画されるまでの遅延を測ります。FIDと違い、セッション中のすべての操作を追跡し、最も悪い値を採用します(外れ値は除外)。
INPを悪化させる要因
- 50ミリ秒を超えるLong Taskがメインスレッドを占有し、入力を処理できない
- 重いイベントハンドラー(Reactの同期的なsetState、DOMの一括更新など)
scheduler.yield()やsetTimeout(0)でLong Taskを分割していない- サードパーティスクリプト(チャット、広告、アクセス解析)がメインスレッドを使う
- CSSの
transform/opacityではなくJavaScriptでアニメーションしている
// Breaking up a Long Task with scheduler.yield()
async function processLargeList(items) {
for (let i = 0; i < items.length; i++) {
processItem(items[i]);
// Yield to the main thread every 50 items
if (i % 50 === 0) {
await scheduler.yield();
}
}
}scheduler.yield()はsetTimeout(0)の新しい代替手段です。ブラウザーに制御を返して入力を処理させ、その後でタスクを再開します。Chrome 115以降で利用できます。それ以外のブラウザーではsetTimeoutでポリフィルします。CLS — Cumulative Layout Shift
CLSは単位のない指標で、ページ要素が予期せず動いた量の合計を表します。計算式は影響範囲 × 移動距離です。ユーザーが押したボタンの移動はカウントされず、ユーザーの操作と無関係に動いた要素だけが対象です。
| CLSの値 | 評価 | 典型的な原因 |
|---|---|---|
| ≤ 0.1 | 良好 | すべての要素にスペースを確保済み |
| 0.1〜0.25 | 要改善 | font-display: swapのないフォント、バナー |
| > 0.25 | 不良 | サイズ指定のない画像、動的に挿入される要素 |
CLSの主な発生源
widthとheight属性のない画像。読み込み前にブラウザーがサイズを把握できないfont-display: optionalやswapを指定していないウェブフォント。FOUTでテキストがずれる- 動的に挿入されるバナーやページ上部のCookie通知
transformではなくtop/left/marginを変えるCSSアニメーション- スペースを確保していない広告(コンテナーに
min-heightがない)
/* Reserve space for an ad slot */
.ad-container {
min-height: 250px;
width: 100%;
}
/* Animation without CLS: transform and opacity only */
.card:hover {
transform: translateY(-4px);
/* Wrong: margin-top: -4px — this shifts layout */
}検索順位への影響
GoogleはCWVについて、検索順位に関わるページエクスペリエンスのシグナルの1つだと認めています。ただし同点時の決め手であって、主要な要因ではありません。コンテンツが優れていてCWVが悪いページは、CWVが優れていてコンテンツが弱いページより上位に表示されます。
間接的な効果のほうが重要です。速いページは直帰率を下げ、セッションの深さとコンバージョンを高めます。CWVはSEOよりも、ビジネス面の根拠のほうが強力です。Amazonの調査では、LCPが100ミリ秒遅くなると売上が1%減少したとされています。
Core Web Vitalsの測定方法
データには2種類あります。ラボデータ(シミュレーション:Lighthouse、WebPageTest)とフィールドデータ(実ユーザー:CrUX、GSC)です。Googleが順位の判断に使うのはフィールドデータで、ラボデータは診断用です。
| 種類 | ツール | わかること | 用途 |
|---|---|---|---|
| フィールド | Google Search Console | サイト内全URLのCWV(p75) | 問題のあるページの優先順位付け |
| フィールド | CrUXダッシュボード(Looker) | 28日間の推移 | 経時的な改善の追跡 |
| ラボ | PageSpeed Insights | LCP/INP/CLSと改善提案 | 特定URLの診断 |
| ラボ | Lighthouse(DevTools) | 詳細なウォーターフォール、トレース | 根本原因の詳細分析 |
| ラボ | WebPageTest | 動画記録、フィルムストリップ | 改善前後の比較 |
診断ツール
| ツール | 無料 | LCP | INP |
|---|---|---|---|
| Google Search Console | はい | ✓ | ✓ |
| PageSpeed Insights | はい | ✓ | ✓ |
| Chrome DevTools | はい | ✓ | ✓ |
| Lighthouse CI | はい | ✓ | ✓ |
| WebPageTest | はい(制限あり) | ✓ | ✓ |
| SpeedCurve | 有料 | ✓ | ✓ |
| Sentry(web-vitals SDK) | フリーミアム | ✓ | ✓ |
| ツール | CLS | フィールドデータ |
|---|---|---|
| Google Search Console | ✓ | ✓ |
| PageSpeed Insights | ✓ | ✓ (CrUX) |
| Chrome DevTools | ✓ | — |
| Lighthouse CI | ✓ | — |
| WebPageTest | ✓ | — |
| SpeedCurve | ✓ | ✓ |
| Sentry (web-vitals SDK) | ✓ | ✓ |
// web-vitals v4 — collect real CWV
import { onLCP, onINP, onCLS } from 'web-vitals';
function sendToAnalytics({ name, value, id }) {
// Send to GA4
gtag('event', name, {
value: Math.round(name === 'CLS' ? value * 1000 : value),
metric_id: id,
metric_delta: value,
});
}
onLCP(sendToAnalytics);
onINP(sendToAnalytics);
onCLS(sendToAnalytics);最適化チェックリスト
LCP
- メインビジュアルの画像に
fetchpriority="high"を付け、loading="lazy"を外す <head>内に、メインビジュアル用の<link rel="preload" as="image">を追加する- 画像をWebPまたはAVIFに変換し、
srcsetを設定する - TTFBを800ミリ秒以下に短縮する(CDN、キャッシュ、エッジSSR)
- レンダリングをブロックするスクリプトを
<head>から外す(async/defer/module) - 静的アセットに
Cache-Control: max-age=31536000を設定する
INP
- Chrome DevTools → Performance → Main ThreadでLong Taskを調べる
- 50ミリ秒を超えるタスクを
scheduler.yield()やsetTimeout(0)で分割する input/scrollハンドラーをデバウンスする(16〜100ミリ秒)- Reactを最適化する(
useMemo、useCallback、React.memo、リストの仮想化) - サードパーティスクリプトをWeb Workerへ移すか、LCPの後に読み込む
- CSSアニメーションは
transformとopacityだけにする
CLS
- すべての
<img>要素にwidthとheightを指定し、ブラウザーにスペースを確保させる - サイズが不明なコンテナーには
aspect-ratioを使う - 重要なフォントには
font-display: optionalを設定する - 広告枠や動的コンテンツに
min-heightを確保する - 通知(Cookie、バナー)はページ上部ではなく下部に置く
- FOUTを確認する(フォールバックのないフォントは読み込み時にテキストがずれる)
Core Web Vitalsとは何ですか?SEOでなぜ重要ですか?
自分のサイトのCore Web Vitalsはどう確認しますか?
LCPが4秒を超えています。どのくらい急いで直すべきですか?
Core Web Vitalsのしきい値はモバイルとデスクトップで同じですか?
ECではLCPとCLSのどちらが重要ですか?
Check it with SpiderHead
Free and local: run the audit on your own machine.



