Stop celebrating your Lighthouse 100.
This week we reviewed a site that scored 97 for desktop performance in Lighthouse. Green circle. The kind of screenshot people post on LinkedIn.
The same report, one section higher, said: Core Web Vitals Assessment: Failed.
Real desktop visitors over the previous 28 days saw the main content appear at 3.9 seconds (the "good" threshold is 2.5 s), the layout shift by 0.12 (good is 0.1 or less), and the first content at 3.6 seconds.
Same site. Same day. Two completely different stories, and only one of them is what visitors actually live through.
Lab data vs field data
PageSpeed Insights shows two different things, and most people only look at the big number.
Lighthouse (lab data) loads your page once, in a simulated environment: an emulated mid-range phone on throttled "Slow 4G" for mobile, from a data centre, with an empty cache. It's a controlled experiment. Great for debugging. Terrible as a verdict.
Core Web Vitals (field data) comes from the Chrome UX Report: real Chrome users, on real devices and networks, over the last 28 days, measured at the 75th percentile. It's the section at the top of PageSpeed Insights, and it's the data behind the Core Web Vitals report in Google Search Console.
When they disagree, believe the field data. Your visitors don't browse from a Google data centre.
Why the lab gets it wrong
- One load vs thousands. Lighthouse measures a single cold load. Real users arrive on old phones and bad Wi-Fi, with extensions, ad blockers and third-party scripts behaving differently every time.
- No interactions. Lighthouse can't measure INP (Interaction to Next Paint), because nobody clicks anything during a lab run. It reports Total Blocking Time as a stand-in. Your real users open menus, expand accordions and type into forms.
- Shifts after load. Lab CLS only covers the page load. Field CLS covers the whole visit, so the cookie banner, the chat widget and the late-loading embed all count.
- The page your users actually see. The lab sees an anonymous first visit. Real users see logged-in states, filled carts and whatever your A/B test is serving this week.
"But my site has no field data"
If PageSpeed Insights says there isn't enough real-user data, you have two options.
- Switch from "This URL" to "Origin" at the top of the report to see data for the whole site.
- Measure your own users. Google's web-vitals library takes a few lines:
import { onLCP, onINP, onCLS } from 'web-vitals'; function send(metric) { navigator.sendBeacon('/vitals', JSON.stringify({ name: metric.name, value: metric.value, rating: metric.rating, page: location.pathname, })); } onLCP(send); onINP(send); onCLS(send); Point /vitals at anything that can store a row. A week of real data will tell you more than any number of Lighthouse runs.
The hot take
A Lighthouse score is a unit test. Core Web Vitals is production monitoring. You wouldn't call an app reliable because its unit tests pass, so don't call a site fast because its lab score is green.
Next time a client, a boss or a vendor sends you a 100, ask one question: "What does the field data say?"
Disagree? I'd genuinely like to hear the case for optimising the lab score first. Comments are open.
We design, build and host websites at CoderCorn. If you want a quick second opinion on your own site, our free PageScore check is a good place to start.