最大コンテンツの表示

W3C作業草案,

このドキュメントの詳細
このバージョン:
https://www.w3.org/TR/2026/WD-largest-contentful-paint-20260826/
最新公表バージョン:
https://www.w3.org/TR/largest-contentful-paint/
編集者ドラフト:
https://w3c.github.io/largest-contentful-paint/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/largest-contentful-paint/
テストスイート:
https://github.com/web-platform-tests/wpt/tree/master/largest-contentful-paint
フィードバック:
GitHub
編集者:
(Shopify)
元編集者:
(Google)

概要

このドキュメントは、要素が画面上でトリガーした最大のペイントを監視するためのAPIを定義します。

このドキュメントのステータス

このセクションは、公開時点でのこのドキュメントのステータスについて説明しています。 現在のW3C出版物一覧およびこの技術報告書の最新版は W3C規格・草案インデックスでご確認いただけます。

このドキュメントはWeb Performance作業グループによって 作業草案として勧告トラックを用いて公開されました。 作業草案として公開されていることは、 W3Cおよびそのメンバーによる承認を意味しません。

これはドラフト文書であり、今後随時、 更新・差し替え・廃止される可能性があります。 作業中の文書であることを除き、本ドキュメントを引用するのは不適切です。

GitHub Issuesで本仕様の議論を行うことを推奨します。

本ドキュメントは 2025年8月18日版W3Cプロセス文書によって管理されています。

本ドキュメントは W3C特許ポリシーの下で運用されているグループによって作成されました。 W3Cはグループの成果物に関連して提出された 特許開示の公開リストを管理しています。 そのページには特許開示の手順も記載されています。 実際に特許に関する知識を有し、 必須クレームが含まれていると考える個人は、 W3C特許ポリシー第6節に従って情報を開示する必要があります。

1. 導入

このセクションは規範的ではありません。 LargestContentfulPaint APIは、開発者がウェブページの読み込みおよび描画プロセスを可視化し、最適化できるようにします。

開発者は、ユーザーの視覚的レンダリング体験と相関する信頼性ある指標を必要としています。First PaintやFirst Contentful Paintのような描画指標は初期のレンダリングに焦点を当てていますが、描画されたコンテンツの重要性を考慮していないため、ユーザーがまだそのページを有用だと感じていない時点を示す場合もあります。

Largest Contentful Paint(LCP)は以下のようなページ読み込み指標を目指します:

ページ読み込み中の最大のペイントは、ユーザー視点から意味のあるイベントを示す可能性が高いため、デフォルトで開発者に公開し、パフォーマンスチームや分析プロバイダ、ラボベースの計測ツールが、コンテンツ制作者自身による追加注釈なしで指標を取得できるようにします。

このAPIは[PAINT-TIMING]で定義された概念に大きく依存しており、これはこの高レベル機能が基盤としている低レベルのプリミティブと見なすことができます。もしコンテンツ制作者が重要な点を注釈付けしたい場合は、[ELEMENT-TIMING] APIを使うことで、報告対象の要素をより柔軟に制御できます。

注意: Largest Contentful Paint APIは、タイミング適格な要素だけを公開します。Element Timingと異なり、Largest Contentful Paintのために要素へ注釈を追加する必要はありません。

1.1. 最大コンテンツ

このAPIで用いられるアルゴリズムは、これまで見つかったコンテンツを追跡します。新しい最大のコンテンツが見つかるたびに新しいエントリーが作成されます。削除されたコンテンツもアルゴリズムで考慮されます。特に、削除されたコンテンツが最大だった場合は、より大きなコンテンツが追加されたときにのみ新たなエントリーが作成されます。スクロールやインプットイベントが発生すると、その後サイトに新たなコンテンツが導入される可能性が高いため、アルゴリズムは終了します。

1.2. 使用例

次の例は画像と大量のテキストを表示します。その後、開発者がページ読み込み中に最大ペイントの候補エントリーを受け取るオブザーバーを登録します。

<img src="large_image.jpg">
<p id='large-paragraph'>This is large body of text.</p>
...
<script>
const observer = new PerformanceObserver((list) => {
  let perfEntries = list.getEntries();
  let lastEntry = perfEntries[perfEntries.length - 1];
  // Process the latest candidate for largest contentful paint
});
observer.observe({entryTypes: ['largest-contentful-paint']});
</script>

1.3. 制限事項

このセクションは規範的ではありません。

LargestContentfulPaint API はヒューリスティックに基づいています。そのため、エラーが発生しやすいです。以下の 問題があります:

LargestContentfulPaint API はドキュメントのロードに基づいています。したがって、以下のケースではリセットされません:

LargestContentfulPaint API を利用する際、これらを API の外でどのように 取り扱うか検討する必要があるかもしれません。なぜなら、ユーザーが それらをページロードとみなす場合があるためです。

さらに、最初にオフスクリーンで読み込まれるページ(バックグラウンドタブや プリレンダリング技術によるものなど)は、ロードから描画までの 時間を計測するため、予想より大きな値を報告します。これについても どう対処するかを考える必要があります。

2. 用語

最大 コンテンツ描画候補は、以下のメンバーを含む構造体です:

注記: 最大 コンテンツ描画候補要素は、DOM から削除された要素の リークを防ぐために、弱く格納できます。

3. 最大コンテンツの表示

最大コンテンツの表示には以下の新しいインターフェイスが関わります:

3.1. LargestContentfulPaint インターフェース

[Exposed=Window]
interface LargestContentfulPaint : PerformanceEntry {
    readonly attribute DOMHighResTimeStamp loadTime;
    readonly attribute DOMHighResTimeStamp renderTime;
    readonly attribute unsigned long size;
    readonly attribute DOMString id;
    readonly attribute DOMString url;
    readonly attribute Element? element;
    [Default] object toJSON();
};

LargestContentfulPaint includes PaintTimingMixin;

LargestContentfulPaint オブジェクトには、以下の関連する概念があります:

entryType 属性のgetterは、DOMString"largest-contentful-paint" を返さなければならない。

name 属性のgetterは空文字列を返さなければならない。

startTime 属性のgetterは、thisrenderTime の値を返さなければならない。

duration 属性のgetterは 0 を返さなければならない。

renderTime 属性は、デフォルトペイントタイムスタンプを、thisペイントタイミング情報 で指定して返さなければならない。

loadTime 属性は、thisloadTime の値を返さなければならない。

size 属性は、thissize の値を返さなければならない。

id 属性は、thisid の値を返さなければならない。

url 属性は、thisurl の値を返さなければならない。

element 属性のgetterは次の手順を実行しなければならない:

  1. thiselementpaint timing用に公開されていない(引数null)場合、null を返す。

  2. thiselement を返す。

注記: 上記のアルゴリズムは、Document子孫でなくなった要素は element 属性getterによって返されなくなり、シャドウDOM内の要素も含まれることを意味します。

この仕様は Document を拡張し、次のものを追加します:

4. 処理モデル

Windowスクロールイベントがディスパッチされたかというブール値を持ち、初期値はfalseです。

4.1. DOM仕様への修正

このセクションは[DOM]仕様が修正され次第、削除予定です。

event dispatchアルゴリズムを次のように修正します。

ステップ1の直後に次のステップを追加:

4.2. 最大コンテンツの表示を報告する

Document document描画タイミング情報 paintTimingInfo順序付き 集合である保留中の画像レコード paintedImages、および順序付き 集合である要素 paintedTextNodesを与えて、最大コンテンツ描画を報告するよう 求められた場合は、次の手順を実行します。

注記: paintedImages内の各保留中の画像レコードと、 paintedTextNodes内の各テキスト要素は、その要素が描画可能(すなわち、不透明度と可視性を持つ)かつ コンテンツを含む(すなわち、画像リソースまたはブロッキングフォントが十分に読み込まれている)とみなされる 最初の描画について、描画タイミングを記録する処理から正確に一度だけ報告されます。

  1. windowを、document関連する大域オブジェクトとします。

  2. windowスクロールイベントを配送済みまたは入力イベントを配送済みのいずれかが true の場合は、返ります。

  3. newCandidateを、documentpaintedImagespaintedTextNodes、およびdocument現在の最大コンテンツ描画 候補を与えて、新しい最大コンテンツ描画候補を 算出する結果とします。

  4. newCandidateが null の場合は、返ります。

  5. document現在の最大コンテンツ描画 候補newCandidateに設定します。

  6. entryを、newCandidatepaintTimingInfo、および documentを使用してLargestContentfulPaint エントリーを作成する結果とします。

  7. entryであるPerformanceEntryをキューに入れます

Document document順序付き集合である保留中の画像レコード paintedImages順序付き 集合である要素 paintedTextNodes、および最大 コンテンツ描画候補または null であるcurrentCandidateを与えて、新しい最大 コンテンツ描画候補を算出するには、次の手順を実行します。この手順は、最大コンテンツ描画候補または null を返します。
  1. currentSizeを、currentCandidateが null でない場合は currentCandidateサイズとし、それ以外の場合は 0 とします。

  2. largestSizecurrentSizeとします。

  3. newCandidateを null とします。

  4. paintedImagesの各recordについて反復します

    1. imageElementを、record要素とします。

    2. documentを与えたとき、imageElement描画タイミングに公開されていない場合は、 続行します。

    3. intersectionRectを、imageElementをターゲット、ビューポートをルートとして 交差矩形アルゴリズムを使用したときに返される値とします。

    4. resultを、intersectionRectおよびrecordリクエストを与えたときの imageElement実効視覚サイズとします。

    5. resultが null の場合は、続行します。

    6. resultサイズlargestSize以下の場合は、続行します。

    7. largestSizeを、resultサイズに設定します。

    8. newCandidateを、次の値を持つ新しい最大コンテンツ描画 候補に設定します。

      1. 要素imageElementに設定します。

      2. サイズresultサイズに設定します。

      3. resultに設定します。

      4. 高さresult高さに設定します。

      5. リクエストrecordリクエストに設定します。

      6. loadTimerecordloadTimeに設定します。

  5. paintedTextNodesの各textNodeについて反復します

    1. documentを与えたとき、textNode描画タイミングに公開されていない場合は、 続行します。

    2. textNodeアルファチャンネル値が <=0 であるか、不透明度 値が <=0 の場合:

      1. textNodetext-shadow値が none であり、 textNodestroke-color値がtransparentであり、かつtextNodestroke-image値が none の場合は、続行します。

    3. intersectionRectを、textNode所有するテキストノードの集合内のすべてのText ノードの境界ボックスの和集合を、視覚ビューポートと交差させたものとします。

    4. resultを、intersectionRectおよび null を与えたときの textNode実効視覚サイズとします。

    5. resultが null の場合は、続行します。

    6. resultサイズlargestSize以下の場合は、続行します。

    7. largestSizeを、resultサイズに設定します。

    8. newCandidateを、次の値を持つ新しい最大コンテンツ描画 候補に設定します。

      1. 要素textNodeに設定します。

      2. サイズresultサイズに設定します。

      3. resultに設定します。

      4. 高さresult高さに設定します。

      5. リクエストを null に設定します。

      6. loadTimeを 0 に設定します。

  6. newCandidateが null でなく、かつcurrentSizeが 0 より大きい場合:

    1. newCandidateから currentCandidateを引いた値が 3 以下であり、かつnewCandidate高さから currentCandidate高さを引いた値が 3 以下である場合は、null を返します。

  7. newCandidateを返します。

4.3. 要素の実効視覚サイズの判定

要素実効視覚サイズを決定するには、 次の手順を実行します。

入力

intersectionRectDOMRectReadOnly

imageRequestRequest または null

element要素

document文書

出力

実効視覚サイズ結果。これは、項目としてサイズ数値)、数値)、および高さ数値)を持つ構造体であり、最大コンテンツ描画について報告する実効視覚サイズ、幅、および高さを ピクセル単位で表します。または、要素を LCP 候補とすべきでない場合は null です。

  1. widthを、intersectionRectwidthを 最も近い整数に切り上げた値とします。

  2. heightを、intersectionRectheightを 最も近い整数に切り上げた値とします。

  3. sizewidth * heightとします。

  4. rootを、document閲覧コンテキストトップレベル閲覧コンテキストアクティブな文書とします。

  5. rootWidthを、スクロールバーを除いたroot視覚ビューポートの幅とします。

  6. rootHeightを、スクロールバーを除いたroot視覚ビューポートの高さとします。

  7. sizerootWidthrootHeightの積に等しい場合は、 null を返します。

  8. imageRequestが null でない場合は、画像の位置と拡大を調整するために 次の手順を実行します。

    1. imageRequest応答のバイト単位のコンテンツ長が size * 0.004 未満の場合は、null を返します。

      注記: このヒューリスティックは、 画像リソースに、利用者がコンテンツを含むものとして認識できるだけの十分なデータが含まれているかどうかを 検査します。転送されたファイルサイズと、復号および画像の拡大縮小を適用した後に実際に生成される ピクセル数を比較します。非常に少ないバイト数で極めて多数のピクセルを符号化する画像は、一般に、 コンテンツの少ない背景やグラデーションなどであり、LCP 候補とはみなされません。

    2. concreteDimensionsを、element内における imageRequest具体的なオブジェクトサイズとします。

    3. visibleDimensionsを、object-positionまたはbackground-positionと、 elementコンテンツボックスによる位置指定を考慮して調整した concreteDimensionsとします。

      注記: これらの アルゴリズムの一部は、CSS で厳密に定義されていません。期待される結果は、element内の 画像の実際の位置とサイズをDOMRectReadOnlyとして取得することです。

    4. clientContentRectを、element変換を適用した visibleDimensionsを包含する最小のDOMRectReadOnlyとします。

    5. intersectingClientContentRectを、 clientContentRectintersectionRectの交差部分とします。

    6. widthを、intersectingClientContentRectwidthを 最も近い整数に切り上げた値に設定します。

    7. heightを、intersectingClientContentRectheightを 最も近い整数に切り上げた値に設定します。

    8. sizewidth * heightに設定します。

      注記: これにより、 要素の装飾ではなく、画像自体とのみ交差することが保証されます。

    9. naturalAreaimageRequest自然幅 * imageRequest自然高さとします。

    10. naturalAreaが 0 の場合は、null を返します。

    11. boundingClientAreaclientContentRectwidth * clientContentRectheightとします。

    12. scaleFactorboundingClientArea / naturalAreaとします。

    13. scaleFactorが 1 より大きい場合は、sizescaleFactorで除算します。

  9. 実効視覚サイズ結果を返します。そのサイズsizeに、widthに、 高さheightに設定します。

4.4. LargestContentfulPaint エントリーを作成する

LargestContentfulPaint エントリーを作成するために、ユーザーエージェントは次の手順を実行しなければなりません。

入力

candidate最大コンテンツ描画候補

paintTimingInfo描画タイミング情報

documentDocument

出力

LargestContentfulPaint

  1. urlを空文字列とします。

  2. candidateリクエストが null でない場合、 urlcandidateリクエストリクエスト URLに設定します。

  3. entryを、document関連するレルムを持ち、その描画タイミング情報paintTimingInfoである、 新しいLargestContentfulPaint エントリーとし、さらに次のように設定します。

  4. entryを返します。

5. セキュリティとプライバシーに関する考慮事項

このAPIは低レベルのプリミティブとしてPaint Timingに依存しています。同様のElement Timing APIと異なり、LCPはたとえ小さい要素であっても、ページ読み込み時点までで最大であればタイミング詳細を開示する可能性があります。しかし、これはElement Timingが既に可能にしている範囲を超えた機微な情報は公開しないと思われます。

適合性

文書規約

適合要件は、記述的な断定とRFC 2119の用語の組み合わせで表現されます。 このドキュメントの規範部分における “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, および “OPTIONAL” というキーワードは、RFC 2119で規定されているように解釈されます。 ただし、可読性のため、本仕様ではこれらのキーワードはすべて大文字にはなっていません。

この仕様書の文章は、例外として非規範であることを明示的に記載されているセクション、例、注記を除き、すべて規範的です。[RFC2119]

この仕様における例は、「例えば」などの語句で導入されるか、または class="example" のように規範的なテキストから区別されます。

これは参考用の例です。

参考注記は「注」などの語で始まり、規範的なテキストから class="note" で区別されます。

注:これは参考用の注記です。

準拠アルゴリズム

アルゴリズムの一部として命令形で記述されている要件(例: "先頭の空白文字を取り除く"、"falseを返してこれらのステップを中止する")は、アルゴリズムの導入で使われているキーワード("must"、"should"、"may" など)に従って解釈されます。

アルゴリズムや特定手順として記述された適合要件は、結果が同等であれば、どのような方法で実装されても構いません。 とくに、この仕様で定義されるアルゴリズムは理解しやすいことを目的としており、性能最適化を意図するものではありません。 実装者は最適化することが推奨されます。

索引

本仕様で定義される用語

参照による用語

参考文献

規範参考文献

[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS 背景および 境界線モジュール レベル 3. 2024年3月11日. CRD. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS ボックスモデルモジュール レベル 4. 2024年 8月4日. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-COLOR-3]
Tantek Çelik; Chris Lilley; David Baron. CSS カラーモジュール レベル 3. 2022年1月18日. REC. URL: https://www.w3.org/TR/css-color-3/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS カラーモジュール レベル 4. 2026年8月6日. CRD. URL: https://www.w3.org/TR/css-color-4/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS 画像 モジュール レベル 3. 2023年12月18日. CRD. URL: https://www.w3.org/TR/css-images-3/
[CSS-TEXT-DECOR-4]
Elika Etemad; Koji Ishii. CSS テキスト装飾モジュール レベル 4. 2022年5月4日. WD. URL: https://www.w3.org/TR/css-text-decor-4/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 値および単位 モジュール レベル 4. 2024年3月12日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-VIEWPORT-1]
Florian Rivoal; Emilio Cobos Álvarez. CSS ビューポート モジュール レベル 1. 2024年1月25日. FPWD. URL: https://www.w3.org/TR/css-viewport-1/
[CSSOM-VIEW-1]
Simon Fraser; Emilio Cobos Álvarez. CSSOM ビュー モジュール. 2025年9月16日. WD. URL: https://www.w3.org/TR/cssom-view-1/
[DOM]
Anne van Kesteren. DOM 標準. 現行標準. URL: https://dom.spec.whatwg.org/
[EVENT-TIMING]
Michal Mocny. イベントタイミング API. 2026年3月 19日. WD. URL: https://www.w3.org/TR/event-timing/
[FETCH]
Anne van Kesteren. Fetch 標準. 現行 標準. URL: https://fetch.spec.whatwg.org/
[FILL-STROKE-3]
Elika Etemad; Tab Atkins Jr.. CSS 塗りおよびストローク モジュール レベル 3. 2017年4月13日. FPWD. URL: https://www.w3.org/TR/fill-stroke-3/
[GEOMETRY-1]
Sebastian Zartner; Yehonatan Daniv. ジオメトリインターフェイス モジュール レベル 1. 2025年12月4日. CRD. URL: https://www.w3.org/TR/geometry-1/
[HR-TIME-3]
Yoav Weiss. 高分解能時間. 2026年3月24日. WD. URL: https://www.w3.org/TR/hr-time-3/
[HTML]
Anne van Kesteren; ほか. HTML 標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 標準. 現行標準. URL: https://infra.spec.whatwg.org/
[PAINT-TIMING]
Ian Clelland; Noam Rosenthal. ペイントタイミング. 2026年3月24日. WD. URL: https://www.w3.org/TR/paint-timing/
[PERFORMANCE-TIMELINE]
Nicolas Pena Moreno. パフォーマンス タイムライン. 2025年5月21日. CRD. URL: https://www.w3.org/TR/performance-timeline/
[RFC2119]
S. Bradner. 要件レベルを示すために RFC で使用する キーワード. 1997年3月. 現行のベストプラクティス. URL: https://datatracker.ietf.org/doc/html/rfc2119
[STREAMS]
Adam Rice; ほか. Streams 標準. 現行 標準. URL: https://streams.spec.whatwg.org/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 標準. 現行 標準. URL: https://webidl.spec.whatwg.org/

参考情報用参考文献

[ELEMENT-TIMING]
Element Timing API. Editor's Draft. URL: https://w3c.github.io/element-timing/

IDLインデックス

[Exposed=Window]
interface LargestContentfulPaint : PerformanceEntry {
    readonly attribute DOMHighResTimeStamp loadTime;
    readonly attribute DOMHighResTimeStamp renderTime;
    readonly attribute unsigned long size;
    readonly attribute DOMString id;
    readonly attribute DOMString url;
    readonly attribute Element? element;
    [Default] object toJSON();
};

LargestContentfulPaint includes PaintTimingMixin;