Skip to main content
Web & SEO

How to Improve INP: Fixing Interaction to Next Paint on a Real Website

A practical order of work for fixing a poor INP score: find the slow interaction in field data, split it into three phases, then apply the matching fix.

By Jayson Hao7 min read
Tactile paper and metal editorial artwork for How to Improve INP: Fixing Interaction to Next Paint on a Real Website
Editorial field noteITL / № 15

Key takeaways

  • INP is good at 200 ms or less and poor above 500 ms, measured at the 75th percentile of real page loads.
  • In July 2025 data, 77% of websites had good INP on mobile versus 97% on desktop, so mobile is where most sites fail.
  • Every slow interaction breaks down into input delay, processing duration and presentation delay; each needs a different fix.
  • Safari 26.2 added the Event Timing API, so your own monitoring can now measure INP beyond Chrome.

What INP measures and what counts as a good score

Interaction to Next Paint (INP) measures how quickly a page responds when someone clicks, taps or presses a key. For each of those interactions, the browser records the time from the input until the next frame is painted. Hovering, scrolling and zooming are not measured. For most sites the interaction with the worst latency becomes the page's INP; on pages with many interactions, one of the highest is ignored for every 50 interactions so a single outlier does not decide the score.

Google's thresholds are applied to the 75th percentile of page loads in the field, split by mobile and desktop: 200 ms or less is good, above 200 ms up to 500 ms needs improvement, and above 500 ms is poor. INP is the successor to First Input Delay (FID) as the responsiveness Core Web Vital. FID only measured the delay before the first interaction's handlers started, which is why sites that passed FID easily can fail INP.

Does INP affect SEO rankings?

Google says it highly recommends achieving good Core Web Vitals for success with Search, and that Core Web Vitals, along with other page experience aspects, align with what its core ranking systems seek to reward. INP is one of the three Core Web Vitals, with Largest Contentful Paint and Cumulative Layout Shift. In practice, fixing INP will not lift a page that does not answer the query well, but a slow, unresponsive page works against both rankings and conversions.

The HTTP Archive Web Almanac 2025, based mainly on July 2025 measurements, found that 77% of websites had good INP on mobile, up from 74% in 2024, against 97% on desktop. Only 48% of websites had good Core Web Vitals overall on mobile and 56% on desktop. If your site fails, mobile is the place to look first.

Step 1: Find the slow interactions in field data

INP is a field metric, so start with real-user data, not a lab score. A real user monitoring (RUM) tool gives the most context, because it can tell you which element was clicked, on which page, and how far the page had loaded at the time. Without RUM, PageSpeed Insights shows field data from the Chrome User Experience Report (CrUX), which tells you whether you pass but rarely which interaction is responsible.

Until recently, RUM data on INP came almost entirely from Chromium browsers. Safari 26.2, released in December 2025, added the Event Timing API, which WebKit says makes measuring INP possible. If a large share of your visitors use iPhones, update your monitoring and compare Safari with Chrome before deciding where the problem is. CrUX, and therefore the score Google reports, still reflects Chrome users.

  • List the pages that fail INP at the 75th percentile on mobile, ordered by traffic or revenue.
  • For each page, identify the element and interaction type behind the slowest values: menu toggles, filters, add-to-cart buttons and form inputs are common.
  • Note whether slow interactions happen while the page is still loading; that points to input delay.
  • Reproduce the interaction in Chrome DevTools with CPU throttling, interacting during load as well as after it.

Step 2: Split each slow interaction into three phases

Every interaction's latency is the sum of three parts. Input delay is the time from the user's input until event handlers start running, usually because the main thread is busy with something else. Processing duration is the time the event handlers take to run. Presentation delay is the time from the end of the handlers until the browser paints the next frame, which covers style calculation, layout and paint.

This split is the most useful decision in the whole process, because the fixes do not overlap. Rewriting a click handler does nothing if the real problem is a third-party script that was still evaluating when the user tapped. Note also that each iframe has its own main thread, so check which frame the interaction happened in.

A simple decision rule keeps the work focused. If input delay is the largest part, the problem is usually not the interaction itself but whatever else is running on the main thread, so the fix belongs in how scripts load. If processing duration is the largest, the fix belongs in your own event handlers and component code. If presentation delay is the largest, look at how much of the page changes after the interaction and how big the DOM is. When two phases are similar, fix the one that is cheapest to change first, measure again, and only then move on.

Step 3: Fix the phase that is slow

Once you know which phase dominates, the options narrow quickly. A long task is any task over 50 ms, and long tasks are behind most input delay and processing problems. Google's guidance for each phase comes down to the following.

  • Input delay: reduce script loading, parsing and evaluation during startup. Defer or remove third-party tags that run on load, split large bundles, and avoid timers that fire heavy work while users are likely to interact.
  • Processing duration: do less inside event handlers. Apply the visual update first, then move everything else, such as analytics, saving or recalculation, into a later task.
  • Processing duration: yield to the main thread between chunks of work. scheduler.yield() is designed for this and runs your continuation before other similar tasks; it is supported in Chrome and Edge 129 and Firefox 142 but not Safari, so keep a setTimeout fallback.
  • Processing duration: avoid layout thrashing, which happens when code changes styles and then reads layout values back in the same task.
  • Presentation delay: keep the DOM small, use content-visibility to skip rendering of off-screen content, and be careful with large client-side HTML rendering, which the browser cannot break up the way it does streamed server HTML.

Common INP problems on business websites

The same patterns come up again and again on marketing sites and online stores. Treat this list as a set of hypotheses to check against your own field data, not as a diagnosis.

Many of these problems are added after launch rather than built in. A marketing team installs a new tag, a plugin adds a widget, or a product list grows from fifty items to two thousand. That is why INP should be owned by whoever approves changes to the live site, not only by the developers who built it.

  • Tag managers, chat widgets, consent banners and A/B testing scripts evaluating during load, which shows up as input delay on the first taps.
  • A mobile menu or filter panel that re-renders a large component tree on every toggle, which shows up as processing duration.
  • Analytics events sent synchronously inside click handlers before the visible update.
  • Category and search pages with thousands of DOM nodes, where every interaction triggers expensive layout and paint.
  • Form fields that validate, format and save on every keystroke instead of after the visual update.

How to confirm the fix worked

A lab test can show that an interaction got faster, but the score that matters is the 75th percentile in the field. Watch the RUM data for the specific pages and interactions you changed, segmented by device. Field data has to accumulate from real visits, so expect PageSpeed Insights and Search Console to reflect a release only after some weeks.

Google's own advice is that the key to improving INP is persistence: fixing one slow interaction often reveals the next one. Add an INP budget to your release checklist, and re-check after adding any new third-party script, because that is the change most likely to undo the work.

About the author

Jayson Hao

Founder of Innovation Trigger Lab and a University of Toronto Computer Science graduate with an AI/ML focus. He designs and ships production RAG systems, AI chatbots, web platforms and mobile products.

View profile

Frequently asked questions

What is a good INP score?

200 milliseconds or less at the 75th percentile of page loads is good. Between 200 and 500 ms needs improvement, and above 500 ms is poor.

Why is my INP fine on desktop but poor on mobile?

Phones have slower processors, so the same JavaScript produces longer tasks. The 2025 Web Almanac found 97% of websites had good INP on desktop but only 77% on mobile.

Does INP count scrolling?

No. INP observes clicks, taps and key presses only. Hovering, scrolling and zooming are not measured, although a tap or key press that starts a scroll can be.

Does INP replace First Input Delay?

Yes. Google describes INP as the successor to FID. Unlike FID, which measured only the first interaction's input delay, it covers every interaction and the full time until the next paint.

Sources and further reading

  1. 1.
    Interaction to Next Paint (INP)web.dev (Google), September 2, 2025
  2. 2.
    Optimize Interaction to Next Paintweb.dev (Google), September 2, 2025
  3. 3.
    Optimize long tasksweb.dev (Google), December 19, 2024
  4. 4.
    Understanding Core Web Vitals and Google search resultsGoogle Search Central, December 10, 2025
  5. 5.
    Performance | 2025 | The Web AlmanacHTTP Archive, January 15, 2026
  6. 6.
    WebKit Features for Safari 26.2WebKit, December 12, 2025