Interaction jusqu’au prochain affichage (INP)

Ce que INP measures, the ≤200 ms threshold at p75, pourquoi it replaced FID in 2024, and how to en réalité fix a poor score — from a SEO technique.

Première publication : 26 juin 2026 · Dernière mise à jour : 3 août 2026 · Advanced
Langues

Interaction jusqu’au prochain affichage (INP) is the Core Web Vital pour responsiveness. It watches every click, tap, and keyboard interaction à travers a visit and reports the latency que (fermer to) tout of les came in sous — mesuré at the 75th percentile in the field. Bon is ≤200 ms, poor is >500 ms. INP replaced Délai de première interaction on March 12, 2024, parce que FID seulement timed the premier interaction's input delay; INP measures the complet latency (input delay + processing + presentation) of tout of les. Vous fix it by breaking up long tasks, yielding to the principal thread, doing moins in event handlers, shrinking the DOM, and taming third-party scripts. It's a field metric — Total Blocking Temps is its lab proxy.

TL;DR — INP is the Core Web Vital pour responsiveness. It observes the latency of tout click, tap, and keyboard interactions à travers a visit and reports the valeur at the 75th percentile (un outlier dropped per 50 interactions) — pas simplement the premier input comme FID did. An interaction’s latency = input delay + processing duration + presentation delay. Bon ≤ 200 ms, poor > 500 ms, judged on field données at p75. It replaced FID on March 12, 2024 (FID entièrement supprimé from outils September 2024). Fix it by breaking up long tasks, yielding to the principal thread with scheduler.yield(), doing moins in event handlers, shrinking the DOM, and deferring third-party scripts. It’s a field metric — Total Blocking Temps is the lab proxy, and the two don’t toujours agree.

Ce que INP measures — and how it differs from FID

Google’s definition is precise: INP “assesses une page’s overall responsiveness to utilisateur interactions by observing the latency of tout click, tap, and keyboard interactions que occur throughout the lifespan of a user’s visit to une 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

Que “all interactions… throughout the lifespan” phrasing is the whole story. INP is a visit-level metric, pas a load-time un — and Google’s reasoning is que the vast majority of a user’s temps on une page se produit après it loads, so responsiveness during utiliser matters plus que the premier impression alone.

The contrast with Délai de première interaction is the cleanest façon to comprendre it: “FID seulement mesuré the input delay of the premier interaction on une page. INP improves on FID by observing tout interactions on une page, beginning from the input delay, to the temps it takes to run event handlers.” FID timed un chose à propos de un interaction — the wait avant its handler commencé — and ignored les deux how long the handler ran and how long the screen took to mettre à jour. INP measures the complet latency of every interaction.

Un nuance worth getting correct, parce que it’s a courant myth: INP is pas literally the worst interaction. To éviter punishing une page pour a unique random spike, the navigateur drops un outlier pour every 50 interactions, alors reports the valeur at the 75th percentile of page views. On a low-interaction visit, que lands on the slowest interaction; on a heavy un, a couple of outliers obtenir excluded premier.

Ce que counts as an interaction is aussi narrower que personnes assume. Seulement clicks, taps, and keyboard presses are mesuré. Scrolling, hovering, and zooming are explicitly excluded. And a unique gesture peut fire several events — a tap produces pointerdown, pointerup, and click — qui INP groupes as un interaction, pas three. Dans que groupe, INP takes the longest individual event duration, pas the sum of tout of les — so a fast pointerdown suivant to a slow click encore reports as un interaction sized by the slow event. Si une page has aucun qualifying interactions during a visit, INP simply isn’t reported pour it.

The three parts of an interaction’s latency

Every interaction’s latency breaks into three sequential pieces. Ce is the model to garder in votre head, parce que chaque partie points at a différent fix:

Interaction latency = Input delay + Processing duration + Presentation delay

  1. Input delay — the temps avant votre event handlers peut même commencer running, usually parce que the principal thread is busy finishing a long task.
  2. Processing duration — the temps it takes tout of votre event handler callbacks to execute.
  3. Presentation delay — the temps from quand votre handlers finish jusqu’à the navigateur paints the suivant frame on screen.

The web-vitals attribution construire exposes tout three (inputDelay, processingDuration, presentationDelay) so vous pouvez voir qui partie dominates on a réel interaction. Per the Web Almanac’s 2024 données, presentation delay is souvent the largest unique piece at the median — but processing duration is où the optimization leverage usually lives, parce que it’s the partie que balloons on poorly-built pages.

INP measures the whole interaction. Attribute the delay to the waiting, handler, or presentation phase before choosing a fix. Source : 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 ·

The thresholds — and the p75 field caveat

RatingINP valeurMesuré at
Bon≤ 200 ms75th percentile, field
Nécessite improvement> 200 ms and ≤ 500 ms75th percentile, field
Poor> 500 ms75th percentile, field

Recherche Google Central states the target plainly — “an INP of moins que 200 milliseconds” — and frames the whole program as: “We highly recommend site owners achieve bon Core Web Vitals pour success with Search.” The 200 ms budget is genuinely tight quand vous remember le navigateur veut a frame every ~16,7 ms at 60 fps; tout of votre handler fonctionner plus rendering has to fit.

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

Pourquoi INP is a field metric (and lab données isn’t suffisant)

Ce is the trap que catches a lot of SEOs: a green Lighthouse score ne fait pas mean bon INP. But “Lighthouse can’t measure INP” nécessite three separate cas, pas un, or you’ll misread votre propre tooling:

  1. A standard, noninteractive Lighthouse run reports aucun INP at tout. It seulement observes lune page chargement — it jamais clicks, taps, or types anything — so there’s aucun interaction to temps. Lighthouse falls back on Total Blocking Temps (TBT) as a load-time proxy à la place. Google’s propre framing: “Parce que TBT correlates bien with INP, une page with a élevé TBT is a reasonable indicator que là may be élevé INP valeurs during charger.” The key words are “during charger.” TBT dit nothing à propos de an interaction que goes bad ten seconds plus tard quand a lazy-loaded widget runs — it’s a proxy, jamais a substitute or a conversion formula.
  2. A manually or synthetically exercised interaction — clicking a réel button in DevTools, or scripting a click in a lab outil — fait produce a réel INP-style latency number pour que un interaction. That’s utile pour reproducing a spécifique bug. But it’s encore un scripted chemin on un device: it can’t stand in pour the field’s mix of réel devices, réel utilisateurs, réel interaction targets, and a complet visit’s worth of page lifetime. As Google puts it, le résultating valeur “va be dependent on ce que interactions are performed during the measurement period,” and réel utilisateur behavior is aussi variable pour a unique lab run to represent it.
  3. The field distribution is the seulement chose INP en réalité is. That’s pourquoi the authoritative source is field données: the Chrome Utilisateur Experience Report (CrUX), surfaced via PageSpeed Insights and the Search Console Core Web Vitals report. “Field données is the meilleur source of information vous pouvez draw on quand it comes to understanding qui interactions are problematic pour réel utilisateurs.”

Utiliser the lab (cas 1 and 2) to trouver and reproduce a slow interaction; utiliser the field (cas 3) to confirmer si it’s en réalité dragging bas réel visitors’ scores.

Pourquoi votre INP score is poor

Almost every INP problem traces back to the principal thread being blocked quand a utilisateur interacts. The usual suspects:

  • Long tasks. Quelconque main-thread task over 50 ms is a long task; the amount over 50 ms is its “blocking period.” Pendant que un runs, votre interaction can’t be handled. Ce is the unique biggest causer.
  • Heavy event handlers. Doing aussi beaucoup synchronously à l’intérieur a click/input handler inflates processing duration directement.
  • Grand DOM size. Bigger DOMs cost plus to render, qui inflates les deux input and presentation delay.
  • Third-party scripts. Per the Web Almanac, consent providers, tag managers, analytics, and chat widgets are top offenders — and ils hit même simple content sites. They’re the premier placer I regarder on une page I didn’t construire.
  • Post-load JavaScript. Simplement parce que une page rendered doesn’t mean it finished chargement — scripts evaluating après premier paint peut block early interactions.

Comment corriger it

The strategies, roughly in order of impact:

1. Break up long tasks. Google’s core advice on handlers is to “do as little fonctionner as possible in les.” Split a big job into plus petit tasks so le navigateur peut interleave a utilisateur interaction. Quand tasks are broken up, “le navigateur peut respond to higher-priority fonctionner beaucoup sooner — notamment utilisateur interactions.”

2. Yield to the principal thread. The modern, recommended façon is scheduler.yield() (Chrome 129+, Firefox 142+): await scheduler.yield() pauses votre code, lets the navigateur handle pending fonctionner, and resumes with priority — so autre tasks won’t cut the line ahead of votre continuation. The classic fallback is setTimeout(..., 0), qui encore fonctionne but sends votre code to the back of the task queue (and navigateurs enforce a 5 ms floor après several nested calls). Un chose to arrêter doing: isInputPending() — Google now dit “we no longer recommend using this API.” Voir the Scripts tab pour the pattern.

3. Do moins in event handlers — defer the non-critical fonctionner. Run seulement the visual mettre à jour the suivant frame nécessite synchronously; push everything sinon (saving, spell-check, analytics, word counts) behind requestAnimationFrame + setTimeout or a yield. The utilisateur sees la réponse immédiatement; the bookkeeping se produit après.

4. Éviter layout thrashing. Reading layout properties correct après writing styles in the même task forces le navigateur into synchronous layout it pourrait sinon have batched. Batch reads, alors writes.

5. Reduce DOM size. Plus petit trees render faster. content-visibility peut lazily render off-screen elements so ils don’t cost vous during charger or interaction.

6. Audit and defer third-party scripts. Ce is the highest-leverage SEO fix on réel sites. Charger consent/tag/analytics scripts lazily, gate les on interaction, or déplacer les off the critical chemin. A “lightweight” content page peut échouer INP purely parce que of a heavy embedded widget.

Fait INP affecter rankings?

Yes — INP is un of the three Core Web Vitals, and Core Web Vitals are partie of Google’s page-experience signals. But it’s a lightweight signal: a tiebreaker entre comparably relevant results, pas a principal ranking factor. Don’t chase a perfect INP score at the expense of content and relevance.

Two practical SEO points. Premier, mobile is the hard number. In the 2024 Web Almanac, ~74% of mobile sites réussi INP versus ~97% on desktop — and parce que Google indexes mobile-first, the mobile figure is the un que counts. Second, complex sites do worse: seulement ~53% of the top 1 000 sites réussi, parce que feature-rich pages ship plus JavaScript to block the principal thread. Heavy fonctionnalité development is an INP risk, and high-interaction pages — product pages, checkout, résultats de recherche, formulaires — are far plus exposed que static content.

INP vs FID — the complet picture

FID (retired)INP (current)
InteractionsPremier seulementTout, whole visit
Ce que it timesInput delay seulementInput delay + processing + presentation
Bon threshold≤ 100 ms≤ 200 ms
StatusSupprimé from outils Sept 2024Core Web Vital since Mar 12, 2024

FID is gone — supprimé from Search Console on the day INP launched and from CrUX’s BigQuery/API by September 2024. Si a outil or audit encore références FID, it’s stale.

Edge cas que faire INP données disagree

A handful of lifecycle quirks expliquer la plupart “why doesn’t my RUM match CrUX” questions:

  • Aucun interactions, aucun INP. Si a visit jamais obtient a click, tap, or clé press — or seulement obtient excluded gestures comme scrolling and hovering — there’s aucun INP valeur pour que page view. Ce is normal on read-only content pages and isn’t a bug in votre monitoring.
  • Iframes count toward the metric, but votre propre JavaScript can’t voir à l’intérieur les. An interaction à l’intérieur an embedded iframe (an ad, a widget, an embedded formulaire) contributes to lune page’s INP. But a first-party RUM script can’t lire events from a cross-origin iframe the façon le navigateur’s propre metric peut — so CrUX and a same-origin RUM setup peut legitimately disagree on pages with third-party embeds. Document ce gap plutôt que treating a RUM/field mismatch as a bug.
  • Back/forward cache restores reset INP to zero. Une page pulled from bfcache (the back button, pour instance) starts a fresh INP count — interactions from avant the navigation away don’t carry over.
  • Long-lived and backgrounded tabs encore besoin to report. Parce que a tab peut sit ouvrir pour hours sans ever formally unloading — surtout on mobile, où the OS may simplement kill it — INP devrait be captured quand lune page becomes hidden, pas seulement on unload. RUM setups que seulement flush on unload va silently lose données from ces visits.

Où ce sits

INP is un piece of the Core Web Vitals picture, alongside Largest Contentful Paint (chargement) and Décalage cumulatif de mise en page (visual stability). Vérifier it in PageSpeed Insights and the Search Console report (field), and debug it in Lighthouse / Chrome DevTools (lab, via the TBT proxy). The données behind tout of it comes from CrUX.

Add an expert note

Pin an expert quote

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