INP (Interaction to Next Paint)
The Core Web Vitals metric that measures how quickly a page responds to user interactions.
INP — Interaction to Next Paint — is the Core Web Vitals metric that measures how quickly a page visually responds to a user's interaction, from the moment of a click, tap, or key press to the next frame the browser paints reflecting that response, sampled across all interactions on the page and reported at a high percentile.
It replaced First Input Delay (FID) as an official Core Web Vital in March 2024. FID only captured the delay before a browser began processing the very first interaction on a page; INP captures full end-to-end responsiveness across every interaction throughout a session, which is a far more complete and honest picture of how a page actually feels to use.
The official 'good' threshold is a p75 INP under 200 milliseconds — meaning at least three-quarters of a page's real-world interactions across real users must complete inside that window for the page to pass. Values between 200 and 500 milliseconds are classified 'needs improvement', and anything above 500 milliseconds is 'poor'.
The most common cause of a poor INP score is heavy client-side JavaScript execution triggered by an interaction — work the browser's main thread has to complete before it can paint the next frame — frequently caused by third-party analytics or ad tags, or by unnecessarily large component re-renders in JavaScript frameworks.
How INP is calculated
For every user interaction on a page during a session, the browser records the interaction latency: the time from the input event to the next paint reflecting a visual update in response. Because a session can involve many interactions, INP reports a high percentile of these latencies (effectively the near-worst-case) rather than an average, since a single slow, frustrating interaction meaningfully damages the perceived quality of a page even if most interactions were fast.
Interaction latency itself breaks into three phases: input delay (time before the browser starts processing, often due to main-thread congestion from other running scripts), processing time (the actual work triggered by the event handler), and presentation delay (time to render and paint the resulting frame). A poor INP score can stem from any one of the three, which is why diagnosis has to isolate which phase is actually the bottleneck before attempting a fix.
Why INP matters more in the AI-search era
As click volume shrinks on informational queries due to AI Overviews, the traffic that does convert into a click is disproportionately higher-intent — someone about to fill out a quote form or tap to call. A janky, unresponsive interaction at exactly that moment is a direct conversion cost, arguably more consequential now than when INP was introduced, even though the ranking weight of Core Web Vitals hasn't changed dramatically.
How to diagnose an INP problem
Start with the field data in Search Console's Core Web Vitals report or the CrUX dashboard to confirm INP is genuinely failing at the URL-group level, then use Chrome DevTools' Performance panel or the web-vitals JavaScript library to capture specific slow interactions in the field or in a realistic manual test.
Look specifically at long tasks on the main thread around the time of the interaction — anything over 50ms blocks the browser from responding promptly to input — and identify which script triggered them using the DevTools flame chart or a Real User Monitoring (RUM) tool with attribution.
Common causes of poor INP
Third-party scripts — chat widgets, analytics tags, ad-tech pixels — are the single most common culprit, frequently running expensive work in response to interactions the site owner never directly authored or reviewed.
Large client-side re-renders in React or similar frameworks are the second most common cause: a component tree that re-renders far more of the page than the interaction actually requires, often due to state management that doesn't scope updates narrowly enough.
Unthrottled or unnecessarily complex event handlers — scroll or input listeners doing heavy synchronous work — round out the most frequent causes.
- Heavy third-party scripts running work on click/tap events.
- Oversized client-side re-renders triggered by minor state changes.
- Long, unbroken JavaScript tasks blocking the main thread.
- Unthrottled event handlers on scroll, input, or resize.
A step-by-step INP fix process
Identify the specific interactions and pages driving the p75 INP failure using field data and RUM attribution, rather than guessing from a general site-wide audit.
Audit and defer or remove non-essential third-party scripts, loading them after first interaction or on a lower-priority schedule where the business requirement allows it.
Break up long JavaScript tasks using techniques like `scheduler.yield()` or manual chunking, so the main thread can respond to input between chunks rather than blocking until an entire task finishes.
Scope client-side re-renders narrowly — memoise components, avoid unnecessary state propagation, and profile with React DevTools or the framework's equivalent to confirm re-render size actually shrank.
Re-measure using field data over a full 28-day CrUX window before declaring the fix successful, since lab tests can look improved without the field percentile actually moving.
INP for local Austin-area service business sites
Local sites commonly stack a booking widget, a chat tool, a review-collection script, and several analytics tags on every page — each individually reasonable, but collectively often responsible for the bulk of an INP failure. A quarterly third-party script audit is disproportionately effective for these sites relative to custom development work.
How INP relates to LCP, CLS, and Core Web Vitals
INP is one of the three metrics comprising Core Web Vitals, alongside LCP (loading speed) and CLS (visual stability); a page can pass all three, fail just one, or fail multiple simultaneously, and each requires a distinct diagnostic and fix approach rather than a single generic 'speed up the site' effort.
INP thresholds and typical causes by band
| Good | ≤ 200ms | Passes the Core Web Vitals threshold at p75. |
|---|---|---|
| Needs improvement | 200–500ms | Often caused by moderate third-party script load. |
| Poor | > 500ms | Usually multiple compounding causes: scripts, re-renders, long tasks. |
| Common third-party contribution | 50–150ms | Typical added latency from a single unoptimised chat/analytics widget. |
Frequently asked questions
- What is a good INP score?
- 200 milliseconds or under, measured at the 75th percentile of real user interactions in the field. Between 200 and 500ms is 'needs improvement'; above 500ms is classified 'poor' by Google's Core Web Vitals thresholds.
- When did INP replace FID?
- March 2024. FID only measured the delay before a browser began processing the very first interaction on a page; INP measures full end-to-end responsiveness across every interaction in a session, giving a much more complete picture.
- What usually causes poor INP?
- Heavy client-side JavaScript execution triggered by interactions — most often third-party scripts like chat widgets and analytics tags, or unnecessarily large component re-renders in JavaScript frameworks that block the main thread.
- How do I test my page's INP?
- Field data from Search Console or CrUX is authoritative for ranking purposes. For diagnosis, use Chrome DevTools' Performance panel or the open-source web-vitals JavaScript library to capture specific slow interactions during manual testing.
- Can third-party scripts alone cause an INP failure?
- Yes, frequently. Chat widgets, analytics, and ad-tech scripts commonly run expensive work in response to page interactions, and stacking several of them is one of the single most common causes of a poor INP score.
An HVAC company's quote-request button had a 260ms INP driven by a marketing pixel firing three synchronous network calls on click. Deferring those calls to fire asynchronously after the form began submitting brought INP for that interaction down to 90ms.
Need this applied to your site?
We turn concepts like these into shipped work every week.
