Back to blog
Performance

Mastering Core Web Vitals: How to measure, test, and optimize for better load times

INP became a Core Web Vital in 2024 and it has rewritten what "fast" means. Here is how to measure it, what kills it on most B2B sites, and how to fix it without rewriting your stack.

DW
Demi Wilkinson
·March 21, 2025· 7 min read

INP — Interaction to Next Paint — replaced FID as a Core Web Vital in March 2024, and it changed the game for performance-conscious teams. Where FID measured input *delay*, INP measures the full latency of a user's interaction: input + processing + paint. That means the heavy third-party scripts your tag manager fires on click can wreck your INP, even if your TBT looks fine in Lighthouse.

Why INP is the metric that matters now

Google ranks against the 75th-percentile INP across all interactions on a page. The threshold for "good" is 200ms; "needs improvement" is 200-500ms; "poor" is anything above. On a typical B2B SaaS marketing site running GTM with 10+ tags, the INP p75 frequently lands in the 600-900ms range — entirely driven by third-party JavaScript that fires synchronously on click events.

Measure it before you fix it

You have two ways to measure INP. The synthetic Lighthouse run in PageSpeed Insights gives you a *modeled* INP based on the longest interaction during the test trace. The real one comes from field data — Chrome's Web Vitals library, the Quickload runtime beacon, or Google's Chrome User Experience Report. The numbers will differ; field is the one that ranks.

What actually hurts INP

In our analysis of 200+ B2B sites, the top three INP offenders are: A/B testing SDKs (Optimizely, VWO, Mutiny) that swap above-the-fold content on engagement events; chat widgets (Intercom, Drift) that initialize heavy DOM work the first time the user clicks anywhere; and tag managers loaded with custom HTML tags that all fire synchronously on the first click event.

Fixing it

The fix is not to rewrite the third-party scripts; it's to defer them so they don't compete with the user's interaction. Quickload defers the scripts until they're actually needed — interaction-triggered scripts run after the user has already engaged, idle-triggered scripts run when the main thread has time, and consent-triggered scripts run after the user has acted on the banner.

The result on the average B2B site we measured: INP p75 drops from ~620ms to ~280ms in the first 30 days, with no code changes and no broken vendor tags.

Ready to defer your scripts?

Drop the WordPress plugin in. Flip one toggle. Watch the numbers move.