INP Interaction to Next Paint — Checker & Debugger

INP Checker — Interaction to Next Paint Tool

Enter any URL to check Interaction to Next Paint (INP) from real user data (Google CrUX). Also measure INP live in your browser or simulate values and get prioritized fixes. Core Web Vitals responsiveness metric that replaced FID in March 2024.

URL INP check Real user data (CrUX) Live INP meter INP simulator Core Web Vitals No login Free
INP Thresholds
0ms 200ms 500ms+
Good <200ms Needs Work 200–500ms Poor >500ms

Fetches real user INP data from Google CrUX (Chrome User Experience Report). Returns the 75th-percentile INP value that Google uses to assess Core Web Vitals. Data is only available for URLs with sufficient real user traffic in Chrome.

Fetching real user data from Google CrUX...

Data source: Google Chrome User Experience Report (CrUX) — 75th percentile of real Chrome users in the last 28 days. If no data appears, the URL may not have enough traffic or may not be indexed in CrUX. For lab-based testing, use Google PageSpeed Insights or integrate the web-vitals library.

--
ms

Live Interaction Measurement

Click Start, then interact with this page — click buttons, type, or select options. The meter captures each interaction using the PerformanceObserver API and displays the worst-case INP in real time.

Measuring...
Try interacting with these elements
Interaction Log 0 interactions
Start measuring and interact with the page to see individual interaction timings.

Enter your INP value and stack details to get a diagnosis and prioritized fix recommendations.

From PageSpeed Insights or CrUX above

What triggers high INP on your page

Frontend technology

Analytics, ads, chat widgets


// Core Web Vitals

What Is INP and Why Did Google Replace FID?

INP (Interaction to Next Paint) replaced FID (First Input Delay) as the Core Web Vitals responsiveness metric in March 2024. The change was significant: FID only measured the input delay before the browser started processing the first interaction on a page, and only that delay — not the full time to visual update. INP measures the entire duration of every click, tap, and keyboard interaction throughout a user's session, and reports the worst-case value.

This shift reflects how users actually experience sluggishness. A page can have excellent FID (the first tap is processed quickly) but terrible INP if clicking a filter button or typing in a search field causes a 600ms lag. Google's field data from the Chrome User Experience Report (CrUX) showed that many sites passing FID were still delivering poor interaction responsiveness to real users.

Phase 1 / Input Delay

Input Delay

Time from user gesture to when the browser begins running event handlers. A long task running on the main thread when the user interacts is the primary cause.

Phase 2 / Processing

Processing Duration

Time the event handler code itself takes to run. Heavy JavaScript, synchronous DOM reads, forced layout (reading offsetWidth after writes), and framework re-renders add up here.

Phase 3 / Presentation

Presentation Delay

Time the browser needs to render the visual update — style recalculation, layout, paint, and compositing. Complex CSS or large layout shifts after an interaction drive this up.


// INP vs FID comparison

INP vs FID — Full Comparison

Dimension FID (deprecated) INP (current)
Scope First interaction only All interactions in session
What is measured Input delay only (Phase 1) Full duration: delay + processing + presentation
Good threshold < 100ms < 200ms
Poor threshold > 300ms > 500ms
Outliers No exclusion logic Worst interaction, outliers optionally excluded
Core Web Vitals status Removed March 2024 Active ranking signal
Interaction types Click, tap, keydown only Click, tap, keyboard (scroll excluded)
Lab measurable? Partially (with lab interaction) Partially (requires scripted interactions)

// Fix guide by root cause

How to Fix High INP — Root Cause Guide

Long input delay — main thread blocked at time of interaction
If the input delay phase dominates your INP, a JavaScript long task was running when the user tapped or clicked. Use scheduler.yield() (Chromium 115+) to insert yield points inside long tasks. Where scheduler.yield() is unavailable, setTimeout(fn, 0) breaks up work but yields less control. Move non-critical initialization to requestIdleCallback. Audit third-party scripts — analytics, tag managers, and ad loaders are frequent culprits for input delay because they run continuous background tasks.

Heavy event handler code — processing duration too long
Synchronous work inside click or input handlers directly adds to INP. The most common mistake is triggering forced layout — reading a layout-triggering property like getBoundingClientRect() or offsetWidth immediately after writing to the DOM. This forces the browser to recalculate layout synchronously. Batch reads before writes, or separate them with requestAnimationFrame. In React, wrap expensive non-urgent updates with startTransition() to let the browser stay responsive to new input while rendering catches up.

Framework re-render performance — React, Vue, Angular
In React: use React.memo, useMemo, and useCallback to prevent unnecessary re-renders. Avoid re-rendering large trees on every keystroke — debounce state updates that feed search or filter logic. For long lists, virtualize with TanStack Virtual or react-window. In Vue: v-memo prevents re-rendering list items whose dependencies haven't changed. Use shallowRef for large objects to avoid deep reactivity overhead. In Angular: switch to ChangeDetectionStrategy.OnPush to limit change detection to components whose inputs have changed.

Presentation delay — complex rendering after interaction
If the presentation delay phase is large, the browser is doing too much layout and paint work after the event handler completes. Reduce the number of DOM nodes in the layout scope triggered by the interaction. Avoid CSS properties that trigger full layout (width, height, top, left) in favor of transform and opacity, which only require compositing. Use CSS content-visibility: auto on off-screen content to skip rendering work for elements not in the viewport.

Third-party scripts — auditing and deferring
Third parties (Google Tag Manager, Hotjar, Intercom, ad networks) frequently cause input delay by running long tasks on the main thread throughout the page lifecycle. In Chrome DevTools Performance tab, look for long tasks from third-party origins in the Main thread flamechart. Load non-critical third parties after the first user interaction using a deferred loading pattern. Consider partytown to run third-party scripts in a Web Worker, isolating their main-thread impact. Measure the INP delta with and without each third party to quantify impact.

Diagnosing INP with Chrome DevTools and LoAF
The Long Animation Frames (LoAF) API, available in Chrome 123+, provides the most detailed INP breakdown available without RUM tooling. In DevTools Performance panel: record a trace, interact with the page, and look for the LoAF entry that corresponds to your interaction. It breaks down input delay, processing duration, and presentation delay with script attribution. The web-vitals library (import { onINP } from 'web-vitals/attribution') surfaces LoAF data for real users and sends it to your analytics.


// INP tools comparison

How to Measure INP — Tool Comparison

Tool Data Type INP Coverage Notes
This tool (URL Checker) Field (CrUX) 75th percentile real users Google CrUX API, no login needed
Google PageSpeed Insights Field + Lab CrUX + some scripted interactions Most trusted; official tool
Google Search Console Field (CrUX) Aggregated site-wide Requires site ownership verification
Chrome DevTools Lab Manual interactions only Best for diagnosing specific interactions
web-vitals library Field (RUM) All real user interactions Best for ongoing monitoring in production
Lighthouse Lab Does not measure INP No interaction simulation; use for other metrics
WebPageTest Lab Scripted interactions only Supports custom interaction scripts

// FAQ

Frequently Asked Questions about INP

INP (Interaction to Next Paint) is Google's Core Web Vitals metric for page responsiveness. It captures the latency of every click, tap, and keyboard interaction throughout a user's session and reports the worst-case value. Good INP is under 200ms. It replaced FID in March 2024 as the responsiveness signal in Core Web Vitals and directly affects Google search rankings.
Google's threshold for good INP is under 200ms. Scores between 200ms and 500ms need improvement. Above 500ms is poor and can negatively affect your Core Web Vitals assessment, which is a confirmed Google ranking signal. The measurement is based on the 75th percentile of real users — meaning 75% of your users' worst interactions must be under 200ms to pass.
The CrUX dataset only includes URLs with enough real Chrome user traffic. Pages with low traffic, recently published pages, or pages behind logins won't have CrUX data. Try checking the origin root (e.g. https://example.com instead of a specific page path) — origin-level data is available for lower-traffic sites than page-level data. For low-traffic sites, use the web-vitals library to collect your own field data.
FID (First Input Delay) only measured the delay before the browser began processing the very first interaction on the page, and only measured input delay — not event handler execution or rendering. INP measures all interactions throughout the session, captures the full end-to-end duration (input delay + processing + presentation), and reports the worst case. INP is a far more accurate reflection of real-world interaction responsiveness.
No. Scroll events are explicitly excluded from INP measurement. INP only counts discrete interactions: click, tap, and keyboard events (keydown/keyup/keypress). Scroll performance is measured by other metrics like FPS and is relevant to Cumulative Layout Shift (CLS) in some scenarios, but not INP.
The PerformanceObserver API can only run inside the page being measured — it cannot inspect another URL from a separate origin. Real URL testing requires either server-side headless browser automation or collecting field data from real users via the web-vitals library. This live meter demonstrates exactly how INP is measured, using the same PerformanceObserver event entries that the web-vitals library uses. For cross-URL testing, use the URL Checker tab (CrUX field data) or Google PageSpeed Insights.