Interaction jusqu’au prochain affichage (INP)

Ce que INP mesure, le ≤200 ms threshold à p75, pourquoi il replaced FID dans 2024, et comment en réalité corriger a poor score — depuis a SEO technique.

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

Interaction jusqu’au prochain affichage (INP) est le Core Web Vital pour responsiveness. Il watches chaque click, tap, et keyboard interaction à travers a visit et rapports le latency que (fermer à) tout de les came dans sous — mesuré à le 75th percentile dans le champ. Bon est ≤200 ms, poor est >500 ms. INP replaced Délai de première interaction on March 12, 2024, parce que FID seulement timed le premier interaction's entrée delay; INP mesure le complet latency (entrée delay + processing + presentation) de tout de les. Vous corriger il par breaking up long tasks, yielding à le principal thread, doing moins dans event handlers, shrinking le DOM, et taming tiers scripts. c’est a champ metric — Total Blocking Temps est son lab proxy.

TL;DR — INP est le Core Web Vital pour responsiveness. Il observes le latency de tout click, tap, et keyboard interactions à travers a visit et rapports le valeur à le 75th percentile (un outlier dropped per 50 interactions) — pas simplement le premier entrée comme FID a fait. An interaction’s latency = entrée delay + processing duration + presentation delay. Bon ≤ 200 ms, poor > 500 ms, judged on champ données à p75. Il replaced FID on March 12, 2024 (FID entièrement supprimé depuis outils September 2024). Corriger il par breaking up long tasks, yielding à le principal thread avec scheduler.yield(), doing moins dans event handlers, shrinking le DOM, et deferring tiers scripts. c’est a champ metric — Total Blocking Temps est le lab proxy, et le deux ne pas toujours agree.

«## What INP measures — and how it differs from FID » (Traduction) (Résumé en français de la section vingt-quatre, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

«Google’s definition is precise: 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.”

Preuve à l’appui de cette affirmation INP observes click, tap, and keyboard interaction latency throughout a page visit rather than measuring only the first input delay. Portée : Current web.dev INP definition and qualifying interaction types. Niveau de confiance : élevé · Vérifié : web.dev: Interaction to Next Paint

That “all interactions… throughout the lifespan” phrasing is the whole story. INP is a visit-level metric, not a load-time one — and Google’s reasoning is that the vast majority of a user’s time on a page happens after it loads, so responsiveness during use matters more than the first impression alone. » (Traduction) (Résumé en français de la section vingt-cinq, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

Le contrast avec Délai de première interaction est le cleanest façon à comprendre il: “FID seulement mesuré le entrée delay de le premier interaction on une page. INP améliore on FID par observing tout interactions on une page, beginning depuis le entrée delay, à le temps il takes à exécuter event handlers.” FID timed un chose à propos de un interaction — le wait avant son handler commencé — et ignored les deux comment long le handler ran et comment long le screen took à mettre à jour. INP mesure le complet latency de chaque interaction.

Un nuance worth getting correct, parce que c’est a courant myth: INP est pas literally le worst interaction. À éviter punishing une page pour a unique random spike, le navigateur drops un outlier pour chaque 50 interactions, alors rapports le valeur à le 75th percentile de page views. On a faible-interaction visit, que lands on le slowest interaction; on a heavy un, a couple de outliers obtenir excluded premier.

Ce que counts as an interaction est aussi narrower que personnes assume. Seulement clicks, taps, et keyboard presses sont mesuré. Scrolling, hovering, et zooming sont explicitly excluded. Et a unique gesture peut fire plusieurs events — a tap produces pointerdown, pointerup, et click — qui INP groupes as un interaction, pas three. Dans que groupe, INP takes le longest individual event duration, pas le sum de tout de les — donc a rapide pointerdown suivant à a lent click encore rapports as un interaction sized par le lent event. Si une page a aucun qualifying interactions during a visit, INP simplement n’est pas reported pour il.

Le three parties de an interaction’s latency

Chaque interaction’s latency breaks dans three sequential pieces. Ce est le model à garder dans votre head, parce que chaque partie points à a différent corriger:

Interaction latency = Input delay + Processing duration + Presentation delay

  1. Entrée delay — le temps avant votre event handlers peut même commencer running, généralement parce que le principal thread est busy finishing a long task.
  2. Processing duration — le temps il takes tout de votre event handler callbacks à execute.
  3. Presentation delay — le temps depuis quand votre handlers finish jusqu’à le navigateur paints le suivant frame on screen.

Le web-vitals attribution construire exposes tout three (inputDelay, processingDuration, presentationDelay) donc vous pouvez voir qui partie dominates on a réel interaction. Per le Web Almanac’s 2024 données, presentation delay est souvent le largest unique piece à le median — mais processing duration est où le optimization leverage généralement lives, parce que c’est le partie que balloons on poorly-built pages.

INP mesure le entier interaction. Attribut le delay à le waiting, handler, or presentation phase avant choosing a corriger. Source : web.dev

Le interaction begins avec entrée delay pendant que le event waits pour le principal thread. Processing duration suit pendant que le event-handler callbacks execute. Presentation delay exécute depuis le fin de le handlers jusqu’à le navigateur lays out et paints le suivant frame. Ensemble ces three sequential phases faire up le interaction latency mesuré par INP.

© Patrick Stox LLC · CC BY 4.0 ·

Le thresholds — et le p75 champ caveat

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

«Google Search Central states the target plainly — “an INP of less than 200 milliseconds” — and frames the whole program as: “We highly recommend site owners achieve good Core Web Vitals for success with Search.” The 200 ms budget is genuinely tight when you remember the browser wants a frame every ~16.7 ms at 60 fps; all of your handler work plus rendering has to fit.

Preuve à l’appui de cette affirmation INP is good at 200 milliseconds or less and poor above 500 milliseconds, assessed at the 75th percentile. Portée : Current web.dev INP thresholds for field measurement. Niveau de confiance : élevé · Vérifié : web.dev: Interaction to Next Paint

» (Traduction) (Résumé en français de la section trente-sept, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

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

Ce est le trap que catches a lot de SEOs: a green Lighthouse score ne fait pas signifier bon INP. Mais “Lighthouse ne peut pas mesurer INP” nécessite three séparé cas, pas un, or vous’ll misread votre propre tooling:

  1. A standard, noninteractive Lighthouse exécuter rapports aucun INP à tout. Il seulement observes lune page chargement — il jamais clicks, taps, or types n’importe quoi — donc il y a aucun interaction à temps. Lighthouse falls back on Total Blocking Temps (TBT) as a charger-time proxy à la place. Google’s propre framing: “Parce que TBT correlates bien avec INP, une page avec a élevé TBT est a reasonable indicator que là peut être élevé INP valeurs during charger.” Le key words sont “during charger.” TBT dit rien à propos de an interaction que goes mauvais ten seconds plus tard quand a lazy-chargé widget exécute — c’est a proxy, jamais a substitute or a conversion formula.
  2. A manuellement or synthetically exercised interaction — clicking a réel button dans DevTools, or scripting a click dans a lab outil — fait produce a réel INP-style latency number pour que un interaction. c’est utile pour reproducing a spécifique bug. Mais c’est encore un scripted chemin on un device: il ne peut pas stand dans pour le champ’s mix de réel devices, réel utilisateurs, réel interaction targets, et a complet visit’s worth de page lifetime. As Google puts il, le résultating valeur “va être dependent on ce que interactions sont performed during le measurement period,” et réel utilisateur behavior est aussi variable pour a unique lab exécuter à represent il.
  3. Le champ distribution est le seulement chose INP en réalité est. c’est pourquoi le authoritative source est champ données: le Chrome Utilisateur Experience Rapport (CrUX), surfaced via PageSpeed Insights et le Search Console Core Web Vitals rapport. “Champ données est le meilleur source de information vous pouvez draw on quand il comes à understanding qui interactions sont problematic pour réel utilisateurs.”

Utiliser le lab (cas 1 et 2) à trouver et reproduce a lent interaction; utiliser le champ (cas 3) à confirmer si c’est en réalité dragging bas réel visitors’ scores.

Pourquoi votre INP score is poor

Presque chaque INP problème traces back à le principal thread étant bloqué quand a utilisateur interacts. Le usual suspects:

  • Long tasks. Quelconque main-thread task over 50 ms est a long task; le amount over 50 ms est son “blocking period.” Pendant que un exécute, votre interaction ne peut pas être handled. Ce est le unique biggest causer.
  • Heavy event handlers. Doing aussi beaucoup synchronously à l’intérieur a click/entrée handler inflates processing duration directement.
  • Grand DOM size. Bigger DOMs coût plus à rendre, qui inflates les deux entrée et presentation delay.
  • Tiers scripts. Per le Web Almanac, consent providers, balise managers, analytics, et chat widgets sont top offenders — et ils hit même simple contenu sites. ils sont le premier placer Je regarder on une page Je n’a pas construire.
  • Post-charger JavaScript. Simplement parce que une page rendu ne fait pas signifier il finished chargement — scripts evaluating après premier paint peut bloquer early interactions.

Comment corriger it

Le strategies, roughly dans order de impact:

1. Break up long tasks. Google’s core advice on handlers est à “faire as little fonctionner as possible dans les.” Split a big job dans plus petit tasks donc le navigateur peut interleave a utilisateur interaction. Quand tasks sont broken up, “le navigateur peut respond à higher-priority fonctionner beaucoup sooner — notamment utilisateur interactions.”

«2. Yield to the main thread. The modern, recommended way is scheduler.yield() (Chrome 129+, Firefox 142+): await scheduler.yield() pauses your code, lets the browser handle pending work, and resumes with priority — so other tasks won’t cut the line ahead of your continuation. The classic fallback is setTimeout(..., 0), which still works but sends your code to the back of the task queue (and browsers enforce a 5 ms floor after several nested calls). One thing to stop doing: isInputPending() — Google now says “we no longer recommend using this API.” See the Scripts tab for the pattern. » (Traduction) (Résumé en français de la section quarante-huit, sous-partie un : le texte source est conservé pour vérification lors de la relecture francophone.)

3. Faire moins dans event handlers — defer le non-critical fonctionner. Exécuter seulement le visual mettre à jour le suivant frame nécessite synchronously; push tout sinon (saving, spell-vérifier, analytics, word counts) behind requestAnimationFrame + setTimeout or a yield. Le utilisateur voit la réponse immédiatement; le 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 et defer tiers scripts. Ce est le highest-leverage SEO corriger on réel sites. Charger consent/balise/analytics scripts lazily, gate les on interaction, or déplacer les off le critical chemin. A “lightweight” contenu page peut échouer INP purely parce que de a heavy embedded widget.

Fait INP affecter rankings?

Oui — INP est un de le three Core Web Vitals, et Core Web Vitals sont partie de Google’s page-experience signaux. Mais c’est a lightweight signal: a tiebreaker entre comparably pertinent résultats, pas a principal facteur de classement. ne pas chase a perfect INP score à le expense de contenu et pertinence.

Deux practical SEO points. Premier, mobile est le difficile number. Dans le 2024 Web Almanac, ~74% de mobile sites réussi INP versus ~97% on desktop — et parce que Google indexes mobile-premier, le mobile figure est le un que counts. Deuxième, complexe sites faire pire: seulement ~53% de le top 1 000 sites réussi, parce que fonctionnalité-rich pages ship plus JavaScript à bloquer le principal thread. Heavy fonctionnalité development est an INP risque, et élevé-interaction pages — produit pages, checkout, résultats de recherche, formulaires — sont far plus exposed que static contenu.

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 est gone — supprimé depuis Search Console on le day INP launched et depuis CrUX’s BigQuery/API par September 2024. Si a outil or audit encore références FID, c’est 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 et hovering — il y a aucun INP valeur pour que page view. Ce est normal on lire-seulement contenu pages et n’est pas a bug dans votre monitoring.
  • Iframes count toward le metric, mais votre propre JavaScript ne peut pas voir à l’intérieur les. An interaction à l’intérieur an embedded iframe (an ad, a widget, an embedded formulaire) contributes à lune page’s INP. Mais a premier-party RUM script ne peut pas lire events depuis a cross-origin iframe le façon le navigateur’s propre metric peut — donc CrUX et a même-origin RUM setup peut legitimately disagree on pages avec tiers embeds. Document ce gap plutôt que treating a RUM/champ mismatch as a bug.
  • Back/forward cache restores reset INP à zero. Une page pulled depuis bfcache (le back button, pour instance) commence a fresh INP count — interactions depuis avant le navigation away ne pas carry over.
  • Long-lived et backgrounded tabs encore besoin à rapport. Parce que a tab peut sit ouvrir pour hours sans ever formally unloading — surtout on mobile, où le OS peut simplement kill il — INP devrait être captured quand lune page becomes hidden, pas seulement on unload. RUM setups que seulement flush on unload va silently lose données depuis ces visits.

Où ce sits

INP est un piece de le Core Web Vitals picture, alongside Largest Contentful Paint (chargement) et Décalage cumulatif de mise en page (visual stability). Vérifier il dans PageSpeed Insights et le Search Console rapport (champ), et debug il dans Lighthouse / Chrome DevTools (lab, via le TBT proxy). Le données behind tout de il comes depuis CrUX.

Ajouter une note d’expert

Épingler une citation d’expert

Nouvelle personne ? Créez son profil non revendiqué à /admin/experts/ → Épingler une citation d’expert d’abord.