FID (First Input Delay)
A deprecated Core Web Vital that measured the delay before a page responds to user interaction.
What is FID?
First Input Delay (FID) was a Core Web Vital that measured the time between a user's first interaction with a page (clicking a link, tapping a button, or pressing a key) and the browser's ability to begin processing that interaction. FID captured the delay caused by the browser being busy executing JavaScript or other tasks when the user tried to interact, measuring only the input delay, not the processing time or visual response time.
As of March 2024, Google officially replaced FID with INP (Interaction to Next Paint) as the Core Web Vital for interactivity. INP is a more comprehensive metric that considers all interactions throughout the page lifecycle, not just the first one. However, understanding FID remains useful for context and for interpreting historical performance data.
How It Was Calculated
FID measured the delta between when the browser received the user's first input event and when the browser was able to begin processing event handlers in response. A FID under 100ms was considered "good," 100-300ms "needs improvement," and over 300ms "poor."
Why It Matters for Publishers
While FID has been replaced by INP, the underlying issue it measured — browser responsiveness during page load — remains critical for publishers. Ad-heavy pages are particularly susceptible to interactivity delays because ad scripts often execute heavy JavaScript during page load, blocking the main thread and preventing the browser from responding to user input.
The replacement of FID with INP actually raised the bar for publishers because INP measures interactivity throughout the page lifecycle, not just the first input. Pages that passed FID but had poor interactivity during ad refresh cycles or lazy-load events may fail INP.
Best Practices
- Migrate monitoring to INP: Update your performance monitoring dashboards and alerts to track INP instead of FID. FID data is still collected but is no longer used as a ranking signal.
- Reduce main thread blocking: Break up long JavaScript tasks into smaller chunks using techniques like requestIdleCallback, setTimeout, or web workers to keep the main thread responsive.
- Defer non-critical JavaScript: Load analytics, ad scripts, and other non-essential JavaScript after the page is interactive. Use dynamic import() for code-splitting.
- Minimize third-party impact: Audit all third-party scripts (ad tech, analytics, social widgets) for their main thread impact. Remove or defer scripts that cause excessive blocking.