Lighthouse runs on a quiet tab with a scripted click. Real users tap
while your analytics bundle, chatbot, and carousel are still parsing.
INP (Interaction to Next Paint) measures how long until
the next frame after a tap, click, or keypress. Google's “good” bar is
under 200ms at p75. Plenty of pretty sites sit at 300–500ms
and wonder why bounce is high on mobile.
The usual INP villains
- Huge click handlers that do layout, fetch, and DOM work on the same tick.
- Third-party scripts — tag managers, live chat, A/B tools — blocking the main thread.
- Hydration cliffs on JS-heavy frameworks: first tap waits for the tree to wake up.
- Custom cursors, scroll-jacking, infinite rAF loops that steal frames.
- No press feedback. Even a fast tap feels dead if nothing happens until mouseup.
"Speed is what the next frame does, not what the audit PDF says." — performance review
How we debug it in a day
- Chrome Performance + “Web Vitals” overlay on a real Android, not just DevTools throttling.
- Field data: CrUX / RUM (p75 INP by page and by interaction name).
- Long tasks > 50ms: who owns them? Your code or a vendor?
- Break the tap: paint a
:activestate immediately, then do the expensive work inrequestAnimationFrame/ idle / a worker. - Delete or defer anything that isn't on the critical path for that click.
Highlight on pointer-down, not on click. A 100ms scale on
:active makes a 180ms INP feel instant. Apple has been
saying this for years. The web still ignores it.
Framework notes (2026)
- React / Next: prefer Server Components for static chrome; keep client islands small. Watch hydration on the hero CTA.
- Plain HTML: you're already ahead. Don't undo it with four marketing pixels.
- SPAs: route transitions shouldn't lock input. If the URL changed but the button is dead for 400ms, INP will punish you.
What “fast enough” looks like for a marketing site
LCP under 1.5s on a mid phone, INP under 200ms on the primary CTA and nav, CLS under 0.1, and no custom cursor eating rAF. If you only have budget for one metric this quarter, fix INP on the tap that makes you money.
We treat feel as a product requirement
Audits are a starting point. We ship press states, kill main-thread jank, and measure field INP after launch — because a 98 that feels slow still loses the lead.