Interaction to Next Paint(INP)

INPが測るもの、p75での≤ 200 msmsのしきい値、2024年にFIDに取って代わった理由、低いスコアを実際に改善する方法を技術SEO担当者が解説します。

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

Interaction to Next Paint(INP)は、応答性を測るCore Web Vitalです。訪問中のすべてのクリック、タップ、キーボード操作を監視し、それらのほとんどが収まる遅延をフィールドデータの75パーセンタイルで報告します。良好は≤ 200 msms、不良は> 500 msmsです。FIDが最初のインタラクションの入力遅延だけを測定していたのに対し、INPはすべてのインタラクションの全体遅延(入力遅延 + 処理時間 + 表示遅延)を測ります。そのため、INPは2024年3月12日にFirst Input Delayに取って代わりました。長いタスクを分割し、メインスレッドに制御を返し、イベントハンドラーの処理を減らし、DOMを小さくし、サードパーティースクリプトを制御することで改善できます。フィールド指標であり、Total Blocking Timeはラボでの代理指標です。

TL;DR — INPは応答性を測るCore Web Vitalです。訪問全体にわたるすべてのクリック、タップ、キーボード操作の遅延を観察し、75パーセンタイル(50回のインタラクションごとに外れ値を1つ除外)を報告します。FIDのように最初の入力だけを見るのではありません。インタラクションの遅延 = 入力遅延 + 処理時間 + 表示遅延です。フィールドデータのp75で判定し、良好は≤ 200 msms、不良は> 500 msmsです。2024年3月12日にFIDに置き換わり、FIDは2024年9月にツールから完全に削除されました。長いタスクを分割し、scheduler.yield()でメインスレッドに制御を返し、イベントハンドラーの処理を減らし、DOMを小さくし、サードパーティースクリプトを遅延させて修正します。フィールド指標であり、Total Blocking Timeはラボでの代理指標ですが、両者が常に一致するわけではありません。

INPの測定内容とFIDとの違い

Googleの定義は正確です。INPは*“assesses a page’s overall responsiveness to user interactions by observing the latency of all click, tap, and keyboard interactions that occur throughout the lifespan of a user’s visit to a page.”* (翻訳)「ユーザーのページ訪問期間全体で発生するすべてのクリック、タップ、キーボード操作の遅延を観察することで、ページのユーザー操作に対する全体的な応答性を評価します。」 Evidence for this claim INP observes click, tap, and keyboard interaction latency throughout a page visit rather than measuring only the first input delay. Scope: Current web.dev INP definition and qualifying interaction types. Confidence: high · Verified: web.dev: Interaction to Next Paint この「訪問期間全体にわたるすべてのインタラクション」という表現が核心です。INPは読み込み時間ではなく訪問単位の指標です。Googleの理由は、ユーザーがページで過ごす時間の大半は読み込み後に発生するため、最初の印象だけでなく利用中の応答性の方が重要だということです。

First Input Delayとの対比が、理解する最も簡単な方法です。“FID only measured the input delay of the first interaction on a page. INP improves on FID by observing all interactions on a page, beginning from the input delay, to the time it takes to run event handlers.” (翻訳)「FIDはページで最初に行われたインタラクションの入力遅延だけを測定しました。INPは、入力遅延からイベントハンドラーの実行にかかる時間まで、ページ上のすべてのインタラクションを観察することでFIDを改善します。」FIDが1つのインタラクションについて計測したのは、ハンドラーが始まるまでの待ち時間だけでした。ハンドラーの実行時間も、画面の更新時間も無視していました。INPはすべてのインタラクションの全体遅延を測定します。

よくある神話なので、正確に理解しておきたい注意点があります。INPは文字どおり最悪のインタラクションではありません。1回だけ偶然発生した急上昇でページを罰しないよう、ブラウザーは50回のインタラクションごとに外れ値を1つ落とし、ページビューの75パーセンタイルの値を報告します。インタラクションが少ない訪問では最も遅いインタラクションが該当しますが、多い訪問では先にいくつかの外れ値が除外されます。

インタラクションの定義も、一般に考えられているより狭いものです。測定されるのはクリック、タップ、キーボード入力だけです。スクロール、ホバー、ズームは明示的に除外されます。1回のジェスチャーが複数のイベントを発生させることもあります。タップはpointerdownpointerupclickを発生させますが、INPはこれを3つではなく1つのインタラクションにまとめます。そのグループ内では、すべての合計ではなく個々のイベントで最も長い処理時間を採用します。つまり、速いpointerdownと遅いclickが並んでいても、遅いイベントの長さによる1つのインタラクションとして報告されます。訪問中に対象となるインタラクションがなければ、INPはそのページについて報告されません。

インタラクション遅延を構成する3つの部分

すべてのインタラクションの遅延は、連続する3つの部分に分かれます。これは覚えておくべきモデルで、それぞれの部分が異なる修正方法を示します。

Interaction latency = Input delay + Processing duration + Presentation delay

  1. 入力遅延(Input delay) — イベントハンドラーが実行を開始することさえできないの時間です。通常は、メインスレッドが長いタスクを終えるのに忙しいことが原因です。
  2. 処理時間(Processing duration) — すべてのイベントハンドラーのコールバックを実行するのにかかる時間です。
  3. 表示遅延(Presentation delay) — ハンドラーの処理が終わってから、ブラウザーが画面上に次のフレームを描画するまでの時間です。

web-vitalsのattributionビルドは、この3つ(inputDelayprocessingDurationpresentationDelay)をすべて公開するため、実際のインタラクションでどの部分が支配的かを確認できます。Web Almanacの2024年データによると、中央値では表示遅延が最大の単一要素であることが多いものの、最適化の余地が通常あるのは処理時間です。作りの悪いページでは、処理時間が膨らむためです。

INP measures the whole interaction. Attribute the delay to the waiting, handler, or presentation phase before choosing a fix. 出典: web.dev

The interaction begins with input delay while the event waits for the main thread. Processing duration follows while the event-handler callbacks execute. Presentation delay runs from the end of the handlers until the browser lays out and paints the next frame. Together these three sequential phases make up the interaction latency measured by INP.

© Patrick Stox LLC · CC BY 4.0 ·

しきい値とp75フィールドデータの注意点

評価INP値測定対象
良好≤ 200 msms75パーセンタイル、フィールド
改善が必要> 200 msmsかつ≤ 500 msms75パーセンタイル、フィールド
不良> 500 msms75パーセンタイル、フィールド

Google Search Centralは目標を明確に示しています。“an INP of less than 200 milliseconds” (翻訳)「200ミリ秒未満のINP」です。また、プログラム全体を*“We highly recommend site owners achieve good Core Web Vitals for success with Search.”* (翻訳)「検索で成功するため、サイト所有者には良好なCore Web Vitalsを達成することを強く推奨します」と位置付けています。ブラウザーは60 fpsで約16,7 msmsごとにフレームを必要とするため、200 msmsの予算は実際に厳しいものです。ハンドラーの処理と描画を合わせて収める必要があります。 Evidence for this claim INP is good at 200 milliseconds or less and poor above 500 milliseconds, assessed at the 75th percentile. Scope: Current web.dev INP thresholds for field measurement. Confidence: high · Verified: web.dev: Interaction to Next Paint

INPがフィールド指標であり、ラボデータだけでは不十分な理由

多くのSEO担当者が陥る落とし穴です。Lighthouseのスコアが緑でも、INPが良好とは限りません。 ただし「LighthouseはINPを測定できない」という話には、3つの別々のケースがあります。1つにまとめると、自分のツールを読み違えます。

  1. 標準的な非インタラクティブのLighthouse実行では、INPはまったく報告されません。 ページの読み込みだけを観察し、クリック、タップ、入力をしないため、時間を測るインタラクションがありません。代わりにLighthouseは、読み込み時間の代理指標として**Total Blocking Time(TBT)を使います。Google自身の説明は、“Because TBT correlates well with INP, a page with a high TBT is a reasonable indicator that there may be high INP values during load.” (翻訳)「TBTはINPとよく相関するため、TBTが高いページは読み込み中のINP値も高い可能性を示す妥当な指標です」です。重要なのは”during load.” (翻訳)「読み込み中」という言葉です。遅延読み込みされたウィジェットが10秒後に動いて悪化させるインタラクションについて、TBTは何も示しません。代理指標であって、代替でも変換式でもありません。
  2. 手動または合成的に実行したインタラクション、つまりDevToolsで実際のボタンをクリックしたり、ラボツールでクリックをスクリプト化したりすると、その1回のインタラクションについて実際のINP型の遅延値が得られます。 特定のバグを再現するには有用です。しかし、1台のデバイスでの1つのスクリプト経路にすぎません。実際のデバイス、ユーザー、対象、訪問全体の時間が混ざったフィールドデータの代わりにはなりません。Googleが述べるように、結果の値は「測定期間中にどのインタラクションが実行されたか」に依存し、実際のユーザー行動は1回のラボ実行で表すには変動が大きすぎます。
  3. フィールド分布こそが、INPの実体です。 そのため権威ある情報源はフィールドデータです。Chrome User Experience Report(CrUX)がPageSpeed InsightsとSearch ConsoleのCore Web Vitalsレポートに表示されます。“Field data is the best source of information you can draw on when it comes to understanding which interactions are problematic for actual users.” (翻訳)「実際のユーザーにとってどのインタラクションが問題かを理解するには、フィールドデータが利用できる最良の情報源です」。

ラボ(ケース1と2)は遅いインタラクションを見つけて再現するために使い、フィールド(ケース3)は実際の訪問者のスコアを本当に下げているか確認するために使います。

INPスコアが低い理由

ほぼすべてのINPの問題は、ユーザーが操作したときにメインスレッドがブロックされていることに行き着きます。典型的な原因は次のとおりです。

  • 長いタスク。 メインスレッドで50 msmsを超えるタスクは長いタスクです。50 msmsを超えた分が「ブロッキング期間」になります。実行中はインタラクションを処理できません。最大の原因です。
  • 重いイベントハンドラー。 クリック/入力ハンドラー内で同期的に処理しすぎると、処理時間が直接増えます。
  • 大きなDOMサイズ。 DOMが大きいほど描画コストが増え、入力遅延と表示遅延の両方が膨らみます。
  • サードパーティースクリプト。 Web Almanacによると、同意管理、タグマネージャー、アナリティクス、チャットウィジェットが主な原因です。単純なコンテンツサイトにも影響します。自分で作っていないページなら、最初に確認する場所です。
  • 読み込み後のJavaScript。 ページが描画されたからといって読み込みが完了したとは限りません。最初の描画後に評価されるスクリプトが、初期のインタラクションをブロックすることがあります。

修正方法

影響が大きい順のおおまかな戦略は次のとおりです。

1. 長いタスクを分割する。 Googleがハンドラーについて示す基本的な助言は*“do as little work as possible in them.”* (翻訳)「ハンドラー内ではできるだけ処理を少なくする」です。大きな仕事を小さなタスクに分け、ブラウザーがその間にユーザーのインタラクションを処理できるようにします。タスクを分割すると、“the browser can respond to higher-priority work much sooner — including user interactions.” (翻訳)「ブラウザーは、ユーザーのインタラクションを含む優先度の高い処理に、はるかに早く応答できます」。

2. メインスレッドに制御を返す。 現代的で推奨される方法は**scheduler.yield()です(Chrome 129以降、Firefox 142以降)。await scheduler.yield()でコードを一時停止し、ブラウザーに保留中の処理を任せ、優先度付きで続行します。そのため、ほかのタスクが継続処理より先に割り込むことはありません。従来のフォールバックはsetTimeout(..., 0)で、今も動きますが、コードをタスクキューの最後へ送ります(ブラウザーはネストした呼び出しが何度か続くと5 msmsの下限を適用します)。やめるべきなのはisInputPending()です。Googleは現在、“we no longer recommend using this API.” (翻訳)「このAPIの使用はもはや推奨しません」と述べています。パターンはScripts**タブを見てください。

3. イベントハンドラーの処理を減らし、重要でない仕事を遅延させる。 次のフレームに必要な視覚更新だけを同期的に実行し、それ以外(保存、スペルチェック、アナリティクス、単語数の計算)はrequestAnimationFrame + setTimeoutまたはyieldの後ろに送ります。ユーザーにはすぐ反応が見え、記録処理はその後に行われます。

4. レイアウトのスラッシングを避ける。 同じタスク内でスタイルを書いた直後にレイアウトプロパティを読むと、本来まとめて処理できた同期レイアウトをブラウザーに強制します。読み取りをまとめ、その後に書き込みます。

5. DOMサイズを小さくする。 ツリーが小さいほど描画は速くなります。content-visibilityを使うと、画面外の要素を遅延描画でき、読み込みやインタラクション中のコストを抑えられます。

6. サードパーティースクリプトを監査して遅延させる。 実サイトで最も効果の大きいSEO修正です。同意、タグ、アナリティクスのスクリプトを遅延読み込みし、インタラクションを条件に実行するか、クリティカルパスから外します。「軽量な」コンテンツページでも、重い埋め込みウィジェットだけが原因でINPに失敗することがあります。

INPはランキングに影響するか

はい。INPは3つのCore Web Vitalsの1つであり、Core Web VitalsはGoogleのページエクスペリエンスシグナルの一部です。ただし、軽量なシグナルです。主要なランキング要因ではなく、関連性が同程度の結果間でのタイブレーカーです。コンテンツや関連性を犠牲にして完璧なINPスコアを追わないでください。

実務上のSEOポイントは2つあります。第一に、モバイルが重要な数字です。 2024年のWeb Almanacでは、INPに合格したサイトはモバイルで約74%、デスクトップで約97%でした。Googleはモバイルファーストでインデックスするため、重要なのはモバイルの数字です。第二に、複雑なサイトほど悪化します。 上位1 000サイトでは合格率が約53%にとどまりました。機能の多いページほどメインスレッドをブロックするJavaScriptを多く配信するためです。機能を重くする開発はINPのリスクになり、商品ページ、チェックアウト、検索結果、フォームなどインタラクションの多いページは、静的なコンテンツよりはるかに影響を受けます。

INPとFID — 全体像

FID(廃止)INP(現在)
インタラクション最初だけすべて、訪問全体
測定するもの入力遅延だけ入力遅延 + 処理時間 + 表示遅延
良好なしきい値≤ 100 msms≤ 200 msms
状態2024年9月にツールから削除2024年3月12日からCore Web Vital

FIDはなくなりました。INPが開始された日にSearch Consoleから削除され、2024年9月までにCrUXのBigQuery/APIからも削除されました。ツールや監査がまだFIDを参照しているなら、古い情報です。

INPのデータが食い違うエッジケース

「なぜRUMとCrUXが一致しないのか」という疑問の大半は、いくつかのライフサイクル上の癖で説明できます。

  • インタラクションがなければINPもありません。 訪問中にクリック、タップ、キー入力が一度もなく、スクロールやホバーのような除外ジェスチャーしかなければ、そのページビューにINP値はありません。読み取り専用のコンテンツページでは正常であり、監視のバグではありません。
  • iframeは指標に含まれますが、自分のJavaScriptは中を見られません。 埋め込まれたiframe(広告、ウィジェット、埋め込みフォーム)内のインタラクションはページのINPに加わります。しかし、ファーストパーティーのRUMスクリプトは、ブラウザー自身の指標のようにクロスオリジンiframeのイベントを読めません。そのため、サードパーティーの埋め込みがあるページでは、CrUXと同一オリジンのRUMが正当に一致しないことがあります。RUMとフィールドの不一致をバグとして扱わず、この差を記録してください。
  • Back/forward cacheの復元はINPをゼロにリセットします。 bfcacheから戻ったページ(たとえば戻るボタン)は新しいINPのカウントを開始し、離脱前のインタラクションは引き継ぎません。
  • 長時間開いたバックグラウンドタブも報告が必要です。 特にモバイルではOSがタブを終了するだけで、正式なアンロードが発生しないまま何時間も開いていることがあります。INPはアンロード時だけでなくページが非表示になった時点で取得すべきです。unloadでしか送信しないRUM設定は、こうした訪問のデータを静かに失います。

これはどこに位置づくか

INPはCore Web Vitalsの一部であり、読み込みのLargest Contentful Paintと視覚的安定性のCumulative Layout Shiftと並びます。PageSpeed InsightsとSearch Consoleのレポート(フィールド)で確認し、Lighthouse/Chrome DevTools(TBTを代理指標とするラボ)でデバッグします。すべての基礎となるデータはCrUXから来ます。

Add an expert note

Pin an expert quote

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