What is Interaction to Next Paint (INP)?
Interaction to Next Paint (INP) is a Core Web Vitals metric that assesses overall responsiveness by measuring the latency of all interactions (clicks, taps, keyboard inputs) that occur during a page session and reporting the worst-case value (or near-worst, excluding outliers). It replaced First Input Delay (FID) as a Core Web Vital in March 2024.
What INP Measures
INP captures whether the page consistently responds quickly to interactions throughout the entire session — not just the first one. An interaction's INP contribution includes the time from user input until the browser paints the next frame in response. High INP means the page's JavaScript is blocking the main thread too much, making it feel sluggish and unresponsive.
What is a Good INP Score?
What Causes Poor INP Scores?
- ✗Long-running event handlers that do heavy synchronous work (e.g., filtering large arrays, DOM manipulation) inside click handlers
- ✗Third-party scripts that continue to run tasks on the main thread after page load
- ✗Expensive re-renders in React/Vue — components that update large trees on every interaction
- ✗Heavy layout and paint costs triggered by the interaction (forced reflows after DOM changes)
- ✗Large JavaScript bundles executing during or after interactions due to lazy loading
- ✗Excessive DOM size that makes style recalculation and layout expensive after each interaction
How to Fix INP
- ✓Break up long event handlers using scheduler.postTask() or setTimeout(fn, 0) to yield to the browser between tasks
- ✓Move expensive computation out of event handlers into async functions or Web Workers
- ✓Memoize expensive React components with React.memo() and useMemo() to prevent unnecessary re-renders
- ✓Defer loading of third-party scripts that fire after page load interactions
- ✓Use CSS contain: content on large sections to limit layout recalculation scope
- ✓Reduce DOM complexity — large tables, lists with hundreds of items, or deeply nested elements all increase INP cost
Check Your INP Score
Run a Lighthouse audit at speedexporter.com to see your TBT score (the lab proxy for INP) and identify the specific JavaScript and DOM issues contributing to poor interactivity.
Run a free Lighthouse audit →Frequently Asked Questions
What is a good INP score?
Google considers INP "good" at 200ms or under. Between 200ms and 500ms needs improvement. Above 500ms is poor. INP is measured from real-user CrUX data, not lab tests.
Is INP a ranking factor?
Yes. INP replaced FID as one of Google's three Core Web Vitals in March 2024. It is a direct SEO ranking factor via the Page Experience signal.
What is the difference between INP and FID?
First Input Delay (FID) measured only the delay before the browser began processing the first interaction. INP measures the full duration of the worst-case interaction during the entire session, making it a more comprehensive measure of responsiveness.
How do I measure INP?
INP is a real-user metric measured from the Chrome User Experience Report (CrUX). The Lighthouse lab metric Total Blocking Time (TBT) is the best lab-based predictor. Run a PageSpeed Exporter audit to see both your TBT score and your real-user INP from CrUX.