First Contentful Paint(FCP)

First Contentful Paintが測るもの、良好なFCPスコア、Core Web Vitalではない理由、First PaintやLCPとの違い、遅いFCPの改善方法を解説します。

初回公開:2026年6月26日 · 最終更新:2026年8月20日 · Advanced
言語

First Contentful Paint(FCP)は、ページの読み込み開始から、テキスト、画像、SVG、白以外のcanvasなど、コンテンツの一部が初めて描画されるまでの時間です。実ユーザーの75パーセンタイルで1,8秒以下が良好です。FCPはCore Web Vitalではなく、ランキングシグナルはLCP、INP、CLSです。FCPはラボとフィールドの両方で使える診断指標であり、LCPに先行するため、レンダリングを妨げるリソースや遅いTTFBの発見に役立ちます。Lighthouse 10ではPerformanceスコアの10%を占めます。改善するには、レンダリングを妨げるCSSとJavaScriptをなくし、TTFBを短縮し、クリティカルCSSをインライン化し、font-display: swapを使い、必要なオリジンへpreconnectします。

要点 — FCPは、ナビゲーション開始から、ページ上のいずれかのコンテンツ(テキスト、画像、<svg>、白以外の<canvas>)が初めて描画されるまでの時間です。Core Web Vitalではありません。ラボとフィールドの両方で使える補助的な診断指標で、LCPの構成要素です(FCPはLCP以前または同時に発生します)。フィールドしきい値(p75)は、良好 ≤ 1,8秒、改善が必要 ≤ 3,0秒、不良 > 3,0秒です。Lighthouse 10ではPerformanceスコアの10% を占めます。FCPの計測はナビゲーションから始まり、リダイレクト、接続確立、TTFBも含むため、ラボ(Lighthouse)とフィールド(CrUX)の値はよく異なります。原因のある場所から直します。まずレンダリングを妨げるCSS/JavaScript、次にTTFB、最後にフォントです。

FCPが正確に測るもの

ここでの基準は、Philip Waltonによるweb.dev記事のGoogle定義です。“First Contentful Paint (FCP) measures the time from when the user first navigated to the page to when any part of the page’s content is rendered on the screen.” (翻訳) 「First Contentful Paint(FCP)は、ユーザーがページへ最初に移動した時点から、ページのコンテンツの一部が画面に描画されるまでの時間を測定します。」同じ文書で「content」は「テキスト、背景画像を含む画像、SVG要素、白以外のcanvas要素」を意味し、原文では “text, images (including background images), <svg> elements, or non-white <canvas> elements.” と書かれています。

重要なのはいずれかという言葉です。FCPは何が描画されたかを区別しません。40ピクセルのロゴも、画面いっぱいのヒーロー画像も同じように対象です。「画面にはもう何か表示されているか」を示すシグナルなので、完了指標ではなく早期指標なのです。

Evidence for this claim FCP measures from navigation until the first text, image, SVG, or non-white canvas content is rendered. Scope: Current web.dev FCP definition and qualifying content types. Confidence: high · Verified: web.dev: First Contentful Paint

見落としやすく、数値の読み方を変える点があります。FCPの時計はナビゲーション時に始まるため、HTMLが解析されるの処理もすべて含まれます。GoogleのKey Pointは、“FCP includes any unload time from the previous page, connection set up time, redirect time, and Time To First Byte (TTFB) which can be significant when measured in the field.” (翻訳) 「FCPには、前のページのアンロード時間、接続確立時間、リダイレクト時間、Time To First Byte(TTFB)が含まれ、フィールド計測では大きな割合になることがあります」と説明しています。サーバー応答に1,5秒かかれば、ブラウザーが1バイトも処理しないうちに1,8秒の予算の大半を使い切っています。

FCPはCore Web Vitalではない

多くのページが曖昧にするため、はっきり述べます。FCPはCore Web Vitalではなく、Googleのランキングシグナルにも含まれません。 Core Web VitalsはLCP、INP、CLSであり、Google SearchのCore Web VitalsランキングページにFCPは記載されていません。

Googleの分類では、FCPは診断に役立つ補助指標である「Other Web Vital」です。web.devは、“the metrics Time to First Byte (TTFB) and First Contentful Paint (FCP) are both vital aspects of the loading experience, and are both useful in diagnosing issues with LCP (slow server response times or render-blocking resources, respectively).” (翻訳) 「Time to First Byte(TTFB)とFirst Contentful Paint(FCP)はどちらも読み込み体験の重要な側面であり、LCPの問題(それぞれ遅いサーバー応答とレンダリングを妨げるリソース)の診断に役立ちます」と説明しています。

したがって、関係者には次の両面を率直に伝える必要があります。

  • FCPはランキングに直接影響しません。 「SEOのため」にFCPを最適化しないでください。
  • FCPは、ランキングに影響するLCPの優れた診断指標です。 レンダリングを妨げるリソースは、まずFCPに表れます。

FCPとFirst Paint(FP)の違い

この2つは頻繁に混同されます。

  • First Paint(FP) は、実際のコンテンツがなくても、単なる背景色を含む何かをブラウザーが描画した時点で記録されます。
  • FCP対象コンテンツ、つまりテキスト、画像(背景画像を含む)、<svg>要素、白以外の<canvas>要素が描画されたときだけ記録されます。仕様で定められた具体的な一覧であり、曖昧な「任意のDOMコンテンツ」ではありません。背景画像はDOM内のテキストでなくても対象になるため、正確に区別する価値があります。

したがって、常にFP ≤ FCPです。 コンテンツを伴わず背景色だけを描くケースは少ないため、ほとんどのページでは両者がほぼ同じです。意味のある差がある場合、通常は実際のコンテンツより先に装飾的な背景が描画されています。Paint Timing APIはfirst-paintfirst-contentful-paintの両方を返しますが、分析する価値があるのはFCPです。FPから得られる実用的な情報はほとんどありません。

FCPとLCPの違い

もう1つ、よく一緒にされる組み合わせです。

  • FCP = いずれかのコンテンツが描画された時点。早期に発生し、小さなロゴやナビゲーションリンクでも対象になります。
  • LCP = ビューポート内で最大の要素が描画された時点。FCPと同時か、それ以降に発生します。

Googleの表現では、FCPはいずれかのコンテンツが描画された時点を、LCPはメインコンテンツが描画された時点を測るため、LCPの方が選択的です。ただし「より選択的」を「正しさが保証される」と読み替えてはいけません。どちらの指標も、実際のメインコンテンツが完成し、訪問者に役立つ状態だとは証明しません。FCPは対象となる何かが描画されたことを、LCPは対象候補のうち最大のものが描画されたことを示すだけです。FCPが0,5秒(ロゴ)でもLCPが4秒(ヒーロー画像)になることがあり、その差自体が有用な診断材料です。FCPがLCPに近い場合、最初に描画されたものが最大要素でもあり、ユーザーに不要な画面部品を先に描く無駄がない可能性を示すため、多くの場合は良い兆候です。

Evidence for this claim FCP answers when any eligible content first appears, while LCP tracks the largest eligible viewport candidate; neither metric proves the page's main content is complete or useful. Scope: field and lab Confidence: high · Verified: First Contentful Paint (FCP)

計測上の例外も知っておくと役立ちます。クロスオリジン画像のタイミングに関するセキュリティ制限により、まれにブラウザーAPIがLCPをFCPより早く報告することがあります。実際の描画順ではなく、計測上のアーティファクトです。

しきい値とラボ・フィールドの不一致

フィールドしきい値(CrUX、p75): 良好 ≤ 1,8秒 · 改善が必要 ≤ 3,0秒 · 不良 > 3,0秒。Googleは、モバイルとデスクトップに分けたページ読み込みの75パーセンタイルで測定するよう案内しています。

Evidence for this claim A good FCP is 1.8 seconds or less at the 75th percentile; above 3 seconds is poor. Scope: Current web.dev FCP field thresholds. Confidence: high · Verified: web.dev: First Contentful Paint

一方、Lighthouseデスクトップは異なる、より厳しい境界値を使います。 緑はおおむね0~0,9秒、オレンジは0,9~1,6秒、赤は1,6秒超です。ラボは実環境ではなく、速度を制限したクリーンなChromeをシミュレート端末上で実行するためです。以下のスコア重みと同様、これらの評価帯はLighthouseのバージョンに固有で、執筆時点の監査文書に基づきます。LighthouseのFCPスコアは、“a comparison of your page’s FCP time and FCP times for real websites, based on data from the HTTP Archive.” (翻訳) 「ページのFCP時間を、HTTP Archiveのデータに基づく実在サイトのFCP時間と比較したもの」です。

FCPに関する混乱の原因として最も多いため、次の違いを覚えてください。

1,8秒という「良好」ラインは、フィールド(CrUX p75)のしきい値です。Lighthouseデスクトップの「緑」は約0,9秒です。用途が異なる別々の尺度です。

フィールド値とラボ値が異なる主因は、サンプルとする母集団が違うことであり、どちらかが常に「より真実」に近いからではありません。Lighthouseは、固定された端末とネットワーク条件で、クリーンなセッションを1回実行します。フィールド/CrUXは、実際の端末、ネットワーク、キャッシュ状態、ナビゲーション種類を集計します。通常のナビゲーションのように新しいFCPが自動で発生せず、独自のライフサイクル処理を必要とするback/forward cacheからの復元やprerenderedページも含まれます(web-vitalsライブラリが処理します)。多くのサイトでは、実ユーザーにリダイレクトチェーン、前ページのアンロード時間、ラボ実行では省かれるコールド接続があるため、フィールド値の方が実際に高くなります。ただし、傾向であって規則ではありません。ラボとフィールドの差を問題と判断する前に、端末クラスやネットワーク条件が同等か確認してください。実際の数値にはフィールドデータを使い、診断にはLighthouseを使います。

LighthouseスコアにおけるFCPの位置

執筆時点の現行版であり、恒久的な値ではないLighthouse 10では、FCPは**Performanceスコアの10%**です。重みの全体像は次のとおりです。

指標重み
Total Blocking Time(TBT)30%
Largest Contentful Paint(LCP)25%
Cumulative Layout Shift(CLS)25%
First Contentful Paint(FCP)10%
Speed Index10%

Performanceスコアは各指標スコアの加重平均であり、Googleは調査の進展に伴って重みが変わると説明しています。FCPはLighthouse 8から10まで10%を維持していますが、「10%」を不変の値として扱う前に、使用中のバージョンで確認してください。実務上、FCPが満点でもLighthouse全体の数値を動かせる範囲には限界があります。一方、FCPが悪いとLCPも悪いことがよくあります。根本原因を共有するためですが、スコアが保証する関係ではなく、確認すべき重なりです。

FCPが遅くなる原因

おおまかな優先順位は次のとおりです。

  1. レンダリングを妨げるリソース — 最大の原因です。<head>内のCSSと同期JavaScriptはブラウザーを待たせます。ファイルのダウンロードと解析が終わるまでCSSOMとレンダーツリーを構築できず、何も描画できません。
  2. 長いTTFB — バイトが届く前にFCPは発生しません。遅いサーバーは最初のドミノであり、FCPの計測時間に含まれます
  3. リダイレクトチェーン — リダイレクトのたびに、最初のバイトより前に完全な往復通信が加わります。
  4. Webフォントの読み込み方法font-display: block(または指定なし)は、最大約3秒テキストを見えなくすることがあります。背景で技術的に描画が発生しても、ユーザーには有用なものが見えません。

改善方法

文書にはない優先順位を付けた完全な一覧です。これは一般的な手段であり、すべてのページに当てはまるわけではありません。まず自身のトレースやフィルムストリップを確認し、どのリソースまたは処理段階がそのページのFCP候補を遅らせているか特定してください。ページに不要かもしれないpreconnect、preload、font-display変更を先に適用しないことが大切です。

最初に行うこと(効果が大きい順):

  • レンダリングを妨げるCSSとJavaScriptをなくす。 ファーストビューに必要なクリティカルCSSを<head>へ直接インライン化し、残りは非同期で読み込みます。重要でないスクリプトにはasyncdeferを付けます。<link>タグの位置を変えるだけでは役立ちません。配置に関係なく、すべてのCSSの読み込みと解析が終わるまでブラウザーは描画しないためです。
  • TTFB(サーバー応答時間)を短縮する。 キャッシュ、CDN、高速なオリジンなど、最初のバイトを早く返す対策はFCPを直接短縮します。
  • フォント読み込みを直す。 font-display: swap(代替テキストをすぐに表示し、準備できたらWebフォントへ切り替える)またはfont-display: optional(キャッシュ済みでなければWebフォントを使わない)を使います。重要なテキストにfont-display: blockを使うとFCPへの影響が最も大きくなるため避けてください。

次に残りを整える:

  • 必要なオリジンへpreconnectする<link rel="preconnect">)。重要な第三者オリジンとの接続を早く確立すると100~500ミリ秒短縮できることがあります。
  • 重要なリクエストをpreloadする<link rel="preload">)。クリティカルフォントやLCP画像が対象です。
  • CSSをminifyし、未使用CSSと未使用JavaScriptを削除する。 ファイルが小さければ解析が速く、描画の妨げが早く解消します。
  • 複数のリダイレクトを避ける巨大なネットワークペイロードを避ける静的アセットに効率的なキャッシュポリシーを設定する過剰に大きなDOMを避ける、そしてクリティカルリクエストの深さを減らす。 いずれも最初の描画に影響する一般的なペイロード対策です。

FCP → TTFB → LCPの診断手順

私ならFCPをこのように使います。文書が示唆するものの詳しく説明していない枠組みです。3つの読み込み指標を1つのワークフローとして扱います。

  1. FCPが長い → レンダリングを妨げるリソースを確認する<head>内のCSS/JavaScript)。最も一般的な原因で、短時間で改善しやすい場所です。
  2. TTFBも確認する。 FCPに含まれるため、遅いサーバーはレンダリングを妨げる処理が関係する前からFCPを長くします。web.devの案内では、TTFBはFCPとLCPの両方に先行するため、ユーザーの75パーセンタイルが「良好」なFCPに届く速さでサーバーが応答する必要があります。
  3. 同じ問題がLCPへ連鎖することが多い。 FCPとLCPは根本原因を共有しやすいため、ランキングシグナルであるLCPも悪化します。ただし、確認すべき重なりであり、保証ではありません。LCPには最大要素固有のサイズ、優先度、読み込み経路といった要因があります。FCPの原因を直してもLCP改善を約束できません。最初に調べる場所として適切ですが、最後の手順ではありません。

SEO担当者にとってのFCPの価値は、より選択的なLCP計測が完了するに、読み込み経路が健全かを低コストで早期確認できることです。

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.