Home Features For Vibe Coders For Developers Pricing Documentation Services Contact
← Back to blog

Your Lighthouse score is lying to you

A 95 in Lighthouse means almost nothing.

I know that’s harsh. Lighthouse is a useful tool. I run it. But after spending too many evenings chasing green scores and watching real users still load pages slowly, I’ve stopped treating it as the answer.

Here’s what’s actually going on.

Lighthouse runs in a fantasy world

By default, Lighthouse simulates a 4G connection on a moderately-throttled CPU. Your laptop. Your dev server. No browser extensions. No service worker quirks from a prior visit. No third-party scripts that took 4 seconds to load because the user was on hotel wifi.

The score you get reflects that simulation. Not your users.

Worse, the simulation is deterministic enough that you can game it. Lazy-load every image. Defer every script. Inline the critical CSS. Your score climbs. Your real users see the same thing they always saw, because they were never the ones with a fast laptop and a clean browser profile.

What to measure instead

There are exactly two sources of truth for web performance:

  1. CrUX (Chrome User Experience Report). Real-user data from real Chrome users on real connections, aggregated by Google. Free, public. Available via PageSpeed Insights or the CrUX API. This is what Google itself uses for ranking signals.
  2. Your own RUM. Real User Monitoring with the web-vitals library, or any RUM provider. Sends LCP, INP, CLS from actual page loads to your analytics.

Lighthouse simulates. CrUX measures. They are not the same thing.

If your CrUX p75 LCP is 3.2 seconds and your Lighthouse score is 98, your users are slow. Period. The 98 is irrelevant.

Where Lighthouse is still useful

Regression detection in CI. If a PR drops the score from 92 to 71, something broke. The absolute number is noise; the delta is signal.

Diagnosing the cause of a real-world problem you already know about. Lighthouse’s audit panel will tell you which images are unoptimized, which scripts are blocking, which CLS shifts are happening. Use it as a debugger, not a scoreboard.

What to ship

Stop celebrating Lighthouse scores in standup. Pull your CrUX data. If you don’t have enough traffic for CrUX, install web-vitals and start collecting your own. After a month you’ll know whether your real users are happy.

If they are: ship features. If they aren’t: Lighthouse will help you find out why.

But don’t confuse the audit with the answer.

Join the feed

Get feature releases and engineering updates delivered to your inbox.