Core Web Vitals in 2026: INP is the one people still fail
Listen to this article

The short answer
The three Core Web Vitals and their 'good' thresholds: LCP ≤ 2.5s (how fast the main content appears), INP ≤ 200ms (how quickly the page responds to a tap or click), and CLS ≤ 0.1 (how much the layout jumps). INP replaced FID in March 2024 and is materially harder to pass because it measures the full response to every interaction, not just the first input delay. On mid-range Android over 4G — the realistic Indian baseline — INP failures are usually caused by heavy JavaScript on the main thread: large bundles, third-party tags, unnecessary hydration and expensive event handlers. Fix it by shipping less JavaScript, breaking long tasks, and deferring third-party scripts.
On this page
Every performance conversation I have starts with LCP because it is the one people have heard of, and ends with INP because it is the one their site is actually failing. The reason is structural: LCP is mostly about how fast you deliver content, which a good host and sensible images fix. INP is about how much work your page makes the phone's main thread do every time a finger touches the screen — and no amount of CDN solves that. This is how I diagnose and fix it.
The three metrics, and the thresholds that matter
Core Web Vitals are measured on real visits, at the 75th percentile — so passing means three quarters of your visits are good, not that your own laptop feels fine. That distinction is where most disagreements about site speed come from.
| Metric | Good | Needs work | Poor | What it measures |
|---|---|---|---|---|
| LCP | ≤ 2.5s | 2.5–4.0s | > 4.0s | When the main content appears |
| INP | ≤ 200ms | 200–500ms | > 500ms | How fast the page responds to interaction |
| CLS | ≤ 0.1 | 0.1–0.25 | > 0.25 | How much the layout shifts unexpectedly |
What is INP (Interaction to Next Paint)?
The time from a user's interaction — tap, click, key press — until the next frame is painted showing a response. It replaced First Input Delay in March 2024 and considers all interactions during the visit, not just the first, which is why it is much harder to pass.
Why INP fails when LCP passes
FID measured only the delay before the browser began handling your first input. INP measures the whole thing — input delay, the processing your event handler does, and the time to paint the result — across every interaction in the session, and reports close to the worst one.
So a site can deliver content in 1.8 seconds and still feel broken: the user taps a menu, a 400KB JavaScript bundle is still hydrating, three analytics scripts are initialising, and the tap takes 600ms to do anything. On a flagship phone you would never notice. On the ₹15,000 Android handset most Indian users own, it is the experience.
200ms
The INP threshold for 'good'. Measured at the 75th percentile of real visits — which for Indian traffic means mid-range Android on mobile data, not your laptop.
The usual causes, in the order I find them
First, too much JavaScript. Large client bundles, whole UI libraries imported for one component, and heavy hydration of content that was never interactive. Second, third-party tags — chat widgets, tag managers, pixels, review embeds, each initialising on load and competing for the main thread. Third, expensive event handlers doing layout-thrashing work synchronously on tap. Fourth, long tasks that block the main thread for hundreds of milliseconds with nothing to break them up.
Notice that three of the four are things a marketing team adds after launch, one tag at a time, each individually harmless. That is why performance regresses quietly on sites that launched fast.
Diagnosis order
- 1Get field data from real users — lab scores on fast hardware hide INP problems entirely.
- 2Identify the worst interaction. INP is usually driven by one or two specific elements, not the whole page.
- 3Profile the main thread while performing that interaction on a throttled mid-range device profile.
- 4Count third-party scripts and what each costs. Most sites are carrying two they no longer use.
- 5Look for long tasks over 50ms and find what to break up or defer.
What actually fixes it
Ship less JavaScript. That is the whole answer, expressed four ways: render on the server what does not need interactivity, code-split so a page loads only its own logic, remove libraries used for one function, and avoid hydrating static content. On a modern framework most of this is a matter of not opting into client-side behaviour by default.
Then manage third parties like a budget rather than a wish list: load them after interaction where possible, remove anything nobody reads a report from, and put a hard cap on how many you allow. And break long tasks — yield to the main thread between chunks of work so the browser can paint a response while the rest continues.
| Fix | Effort | INP effect |
|---|---|---|
| Remove unused third-party scripts | Low | High |
| Defer non-critical scripts until interaction | Low | High |
| Server-render non-interactive components | Medium | High |
| Code-split per route | Medium | Medium to high |
| Break long tasks / yield to main thread | Medium | High on the worst interaction |
| Replace heavy libraries with small alternatives | Medium to high | Medium |
| Upgrade hosting / CDN | Low | Helps LCP, not INP |
CLS and LCP: still worth ten minutes
CLS is usually fixed by reserving space: explicit width and height on images and embeds, no content injected above existing content, and fonts loaded so that swapping does not reflow the page. Banners and consent widgets are a frequent cause, because they appear late and push everything down.
LCP is about the largest element — usually a hero image — so serve it in a modern format at the right size, do not lazy-load it, preload it if necessary, and make sure nothing blocking sits in front of it. Both of these are hygiene. INP is where the engineering is.
Quick wins
- Explicit dimensions on every image, video and embed.
- Don't lazy-load the hero — it is your LCP element.
- Reserve space for banners so they do not shove content down on arrival.
- Preload the primary font and use a metric-compatible fallback to avoid reflow.
- Serve modern image formats at the actual displayed size.
Why this matters commercially, not just for rankings
Core Web Vitals are a ranking signal, and a modest one — you will not outrank a better page by shaving 100ms. The commercial case is conversion: a site that responds instantly to a tap converts better than one that hesitates, and on Indian mobile traffic the difference is not subtle.
So treat performance as a conversion project with an SEO side effect, and give it a budget you defend. A page-weight and INP threshold that any new script must respect prevents the slow accumulation that turns a fast site into a mediocre one over two years.
Set a budget, enforce it in review
Write down a maximum page weight, a maximum number of third-party scripts, and an INP target. Then make any new tag argue its case against those numbers. Performance is lost one reasonable request at a time.
Key takeaways
- Thresholds: LCP ≤ 2.5s, INP ≤ 200ms, CLS ≤ 0.1 — measured on real visits at the 75th percentile, which for India means mid-range Android on mobile data.
- INP is the common failure because it measures every interaction end to end; the cause is almost always JavaScript on the main thread, including third-party tags added after launch.
- Fix it by shipping less JavaScript, deferring or removing third-party scripts and breaking long tasks — better hosting improves LCP but does nothing for INP.
Frequently asked questions
What are the Core Web Vitals thresholds in 2026?
Largest Contentful Paint at or under 2.5 seconds, Interaction to Next Paint at or under 200 milliseconds, and Cumulative Layout Shift at or under 0.1 are all considered good. They are assessed on real user visits at the 75th percentile, so passing means three quarters of actual visits meet the threshold — not that the site feels fast on your own machine.
What is INP and how is it different from FID?
Interaction to Next Paint measures the time from a user interaction until the next frame is painted showing a response, across all interactions in a visit. First Input Delay, which it replaced in March 2024, measured only the delay before the browser started handling the first input. INP includes processing and rendering time for every interaction, which makes it a far more honest measure of how sluggish a page feels — and much harder to pass.
Why does my site pass LCP but fail INP?
Because they measure different things. LCP is about how quickly content is delivered, which good hosting, image optimisation and a CDN largely solve. INP is about how much work the main thread has to do when someone taps something — large JavaScript bundles hydrating, third-party tags initialising, expensive event handlers. A site can render in under two seconds and still take 600 milliseconds to respond to a tap.
How do I improve INP on a mobile-heavy Indian site?
Ship less JavaScript: server-render anything non-interactive, code-split per route, remove libraries imported for a single function, and avoid hydrating static content. Then audit third-party scripts ruthlessly, deferring or removing them, and break long tasks by yielding to the main thread so the browser can paint a response. Test on a throttled mid-range Android profile, not a laptop.
Do Core Web Vitals really affect rankings?
They are a ranking signal, but a modest one — better vitals will not lift a weaker page above a stronger one. The stronger argument is commercial: a page that responds immediately converts better than one that hesitates, and on Indian mobile traffic that difference is significant. Treat performance as a conversion project with an SEO benefit attached.
Tools & next steps
Put this into practice, go deeper, or see how we'd do it for you.
Written by

Mr. Siddhant Aryan
Lead Designer & AI Automation, Global Info Edge
Lead designer and AI-automation specialist at Global Info Edge with 5 years building fast, conversion-focused websites and the workflows that run behind them.
View full profile