最大コンテンツの表示

W3C作業草案,

このドキュメントの詳細
このバージョン:
https://www.w3.org/TR/2026/WD-largest-contentful-paint-20260408/
最新公表バージョン:
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. 用語

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

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. 最大コンテンツの表示を報告する

次のとき、largest contentful paint を報告するように求められた場合、Document documentpaint timing info paintTimingInfo順序付き集合pending image records paintedImages、および順序付き集合要素 paintedTextNodes を受け取った場合、以下の手順を実行する:

注記: paintedImages 内の各 pending image record および paintedTextNodes 内のテキスト要素は、mark paint timing から、要素が描画可能(すなわち opacity・visibility がある)かつ contentful(画像リソースまたはブロックフォントが十分ロードされている)の最初の描画で、正確に一度だけ報告される。

  1. window を、documentrelevant global object とする。

  2. windowhas dispatched scroll event または has dispatched input event のいずれかが true なら、return する。

  3. currentSizedocumentlargest contentful paint size とする。

  4. currentWidthdocumentlargest contentful paint width とする。

  5. currentHeightdocumentlargest contentful paint height とする。

  6. largestSizecurrentSize とする。

  7. newCandidate を null とする。

  8. recordpaintedImages について:

    1. imageElementrecordelement とする。

    2. imageElementpaint timing で公開されていない場合(document に対して)、continue。

    3. intersectionRect を、imageElement を target、viewport を root として intersection rect アルゴリズムを使用して得られる値とする。

    4. result を、imageElementintersectionRect、および recordrequest を指定した effective visual size の結果とする。

    5. result が null なら、continue。

    6. resultsizelargestSize 以下なら、continue。

    7. largestSizeresultsize をセットする。

  9. newCandidate を新しい largest contentful paint candidate(以下の値をセット)にする:

    1. elementimageElement とする。

    2. sizeresultsize とする。

    3. widthresultwidth とする。

    4. heightresultheight とする。

    5. requestrecordrequest とする。

    6. loadTimerecordloadTime とする。

  10. textNodepaintedTextNodes について:

    1. textNodepaint timing で公開されていない場合(document に対して)、continue。

    2. textNodealpha channel 値 <=0 または opacity 値 <=0 の場合:

      1. textNodetext-shadow 値が none、 textNodestroke-color 値が transparent かつ textNodestroke-image 値が none なら、continue。

    3. intersectionRect を、すべての Text ノードtextNode所有テキストノードの集合 の border box の和集合と、visual viewport との共通部分とする。

    4. result を、textNodeintersectionRect、および null を与えた effective visual size の結果とする。

    5. result が null なら、continue。

    6. resultsizelargestSize 以下なら、continue。

    7. largestSizeresultsize をセットする。

    8. newCandidate を新しい largest contentful paint candidate(以下の値でセット)にする:

      1. elementtextNode とする。

      2. sizeresultsize とする。

      3. widthresultwidth とする。

      4. heightresultheight とする。

      5. request は null とする。

      6. loadTime は 0 とする。

  11. newCandidate が null でなければ:

    1. currentSize が 0 より大きい場合:

      1. newCandidatewidth から currentWidth を引いた値が 3 以下かつ newCandidateheight から currentHeight を引いた値が 3 以下なら、return。

    2. LargestContentfulPaint エントリを作成し、newCandidatepaintTimingInfodocument を用いる。

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

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

入力

intersectionRectDOMRectReadOnly

imageRequestRequest または null

element要素

documentDocument

出力

effective visual size result、これはstructであり、要素として size数値)、width数値)、および height数値)を持ち、Largest Contentful Paint に報告する有効な見た目のサイズ・幅・高さ(ピクセル単位)を表す。要素がLCP候補であってはならない場合は null。

  1. widthintersectionRectwidth(最大整数に切り上げ)とする。

  2. heightintersectionRectheight(最大整数に切り上げ)とする。

  3. sizewidth * height とする。

  4. rootdocumentbrowsing contexttop-level browsing contextactive document とする。

  5. rootWidthrootvisual viewport の幅(スクロールバーを除く)とする。

  6. rootHeightrootvisual viewport の高さ(スクロールバーを除く)とする。

  7. sizerootWidth × rootHeight に等しい場合、null を返す。

  8. imageRequest が null でなければ、画像の位置と拡大率を調整するために次を実行:

    1. imageRequestresponse のバイト数が size * 0.004 より小さい場合は null を返す。

      注記: このヒューリスティックは画像リソースがユーザーにとって十分コンテンツフルかどうかを判定する。転送されたファイルサイズと実際に生成されるピクセル数(デコードやスケーリング後)を比較する。ごく少量のバイトで大量のピクセルをエンコードしている画像は通常、低コンテンツな背景やグラデーションなどであり、LCP候補としない。

    2. concreteDimensionsimageRequestconcrete object sizeelement の中)とする。

    3. visibleDimensionsconcreteDimensions とし、位置は object-positionbackground-positionelementcontent box で調整する。

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

    4. clientContentRectvisibleDimensionselementtransform を適用したもの)を含む最小の DOMRectReadOnly とする。

    5. intersectingClientContentRectclientContentRectintersectionRect の共通部分とする。

    6. widthintersectingClientContentRectwidth(最大整数に切り上げ)とする。

    7. heightintersectingClientContentRectheight(最大整数に切り上げ)とする。

    8. sizewidth * height にセットする。

      注記: これによって要素の装飾ではなく、画像自身とのみ交差することを保証する。

    9. naturalAreaimageRequestnatural width * imageRequestnatural height とする。

    10. naturalArea が 0 なら null を返す。

    11. boundingClientAreaclientContentRectwidth * clientContentRectheight とする。

    12. scaleFactorboundingClientArea / naturalArea とする。

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

  9. effective visual size result を返す。sizesizewidthwidthheightheight とする。

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

LargestContentfulPaint エントリーを作成するには、ユーザーエージェントは次の手順を実行する:

入力

candidatelargest contentful paint candidate

paintTimingInfopaint timing info

documentDocument

出力

なし

  1. documentlargest contentful paint size を、 candidatesize で設定する。

  2. documentlargest contentful paint widthcandidatewidth で設定する。

  3. documentlargest contentful paint heightcandidateheight で設定する。

  4. url を空文字列とする。

  5. もし candidaterequest が null でなければ、 urlcandidaterequestrequest URL で設定する。

  6. entry を新しい LargestContentfulPaint エントリ(documentrelevant realm で、paint timing infopaintTimingInfo)にし、下記の値を設定する:

  7. PerformanceEntry をキューする 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年3月31日. 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/
[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 標準. Living Standard. 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 標準. Living Standard. 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; et al. HTML 標準. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. インフラ 標準. Living Standard. 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月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[STREAMS]
Adam Rice; et al. Streams 標準. Living Standard. URL: https://streams.spec.whatwg.org/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 標準. Living Standard. 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;