Many teams stare at the Lighthouse score and celebrate a 100, yet the Core Web Vitals report in Google Search Console stays red. The reason is a common misunderstanding: the Lighthouse lab value does not affect ranking. Google evaluates Core Web Vitals exclusively through field data from the Chrome User Experience Report (CrUX) - measured on real Chrome users, over a rolling 28-day window and at the 75th percentile (Source: Google web.dev). A page can show a lab score of 68 and still reach 85 percent good LCP values in the field (Source: DebugBear). This article explains the difference between lab, CrUX and your own real-user monitoring (RUM), shows why the three data sources diverge and how to derive robust performance budgets at the 75th percentile from them. Those who optimize speed based on data rather than gut feeling measure the right values, prioritize the most effective measures and can prove every improvement with a well-founded performance analysis.
Key takeaways
- Three sources answer three questions: lab tests show why a page is slow, CrUX field data shows whether Google sees a problem, and your own real user monitoring shows which element or script causes it.
- The Lighthouse lab value does not feed into rankings: Google evaluates Core Web Vitals from CrUX field data of real Chrome users at the 75th percentile (Google web.dev). A score of 100 does not guarantee a pass in the field (DebugBear).
- CrUX and your own RUM diverge systematically: CrUX covers only signed-in Chrome users, excludes iOS devices and does not capture soft navigations in single-page applications (web.dev, DebugBear). Compare only after filtering RUM to Chrome, device type and the 75th percentile.
- CrUX aggregates over a rolling 28-day window (Chrome UX Report): a fix shipped today reaches its full field effect only after about four weeks. Until then, your own RUM serves as a real-time leading indicator.
- Performance budgets belong at the 75th percentile of field data: LCP under 2.5 seconds, INP under 200 milliseconds, CLS under 0.1 – set per template type and separately for mobile and desktop, because the origin average hides outliers.
- CrUX has an eligibility threshold: without enough traffic, no data appears for a URL (web.dev). Your own RUM reports from just a few visits and also covers Safari and Firefox – the two sources complement rather than replace each other.
Three Data Sources, Three Truths
Web performance can be measured from three fundamentally different angles, and each answers a different question. Lab data (synthetic tests like Lighthouse) loads a page in a controlled environment with a fixed device, fixed network connection and fixed location (Source: web.dev). Field data from CrUX reflects how real Chrome users actually experience a website - with the full range of devices, networks and behaviors (Source: web.dev). Your own real-user monitoring (RUM) collects the same kind of field data via a script on your own website, but across all browsers and with far more detail (Source: DebugBear).
The decisive point for ranking: Google uses CrUX field data to evaluate Core Web Vitals, not the lab score. A synthetic test like Lighthouse can explain why a page is slow but does not measure the Core Web Vitals that feed into ranking (Source: DebugBear). This implies a clear division of labour: CrUX shows whether a problem exists and whether Google sees it. RUM shows what causes it and which elements or scripts are responsible. Lab tests serve fast diagnosis and regression hunting in the build before changes even go live.
This separation explains why isolated Lighthouse optimization can come to nothing. Developers typically work with first-class internet connections on modern devices, while real users are often on older smartphones with fluctuating mobile connections (Source: web.dev). Anyone who optimizes only the lab optimizes for a scenario that barely appears in the ranking-relevant field data. A well-considered Core Web Vitals optimization therefore starts from the field and uses the lab as a tool, not as a goal.
Lab (Lighthouse)
One simulated test under fixed conditions. Fast, reproducible and ideal for diagnosis and regression checks in the build - but without direct ranking impact.
CrUX (field data)
Real Chrome users over a 28-day window, reported at the 75th percentile. This is the data source Google draws on to evaluate the Core Web Vitals.
Your own RUM
Field data across all browsers, in real time and with detail down to the triggering element or script. Shows the why behind the CrUX figures.
Why CrUX and RUM Diverge
One of the most common questions in practice is: why do the CrUX values not match the numbers from my own RUM? The answer lies in the different collection method. CrUX measures only a subset of Chrome users who have opted into data collection and are signed in with their Google account (Source: DebugBear). Users on iOS are not included, because the WebKit engine is used there - and so a group is missing that is typically on more performant devices and in regions with better network infrastructure (Source: web.dev). This omission can bias the CrUX values relative to your own RUM.
A second major difference concerns single-page applications. CrUX currently does not capture so-called soft navigations - page transitions within an SPA without a full reload - while many RUM solutions count these as separate page views (Source: web.dev). This can cause SPAs to show artificially high metric values in CrUX, because all interactions of a session are attributed to the first page view. Anyone running an SPA should be aware of this effect before comparing CrUX and RUM figures directly.
On top of this come technical subtleties in the measurement itself. CrUX treats back-forward-cache restores as page navigations, while the underlying web APIs do not - a source of systematic deviation (Source: web.dev). Access to content in iframes also differs: CrUX can measure inside iframes, RUM scripts usually cannot for security reasons (Source: web.dev). Anyone who ignores these differences compares apples with oranges and draws the wrong conclusions.
Compare Like With Like
| Aspect | CrUX (field data) | Your own RUM |
|---|---|---|
| Browser coverage | Chrome only, signed-in and opted-in users | all browsers incl. Safari and Firefox |
| iOS users | not included (WebKit engine) | fully captured |
| Freshness | 28-day window, effect only after weeks | available in real time to hourly |
| SPA soft navigations | currently not captured | countable as separate page views |
| Level of detail | five core metrics plus network data | element, script and diagnostic detail |
| Page eligibility | minimum traffic needed, else no data | available even with few visits |
The table makes clear why the two sources complement rather than replace each other. CrUX is the ranking-relevant truth but has an eligibility threshold: a page must be publicly discoverable and sufficiently popular for any data to appear at all (Source: web.dev). New or low-traffic URLs simply do not show up - this is where your own RUM steps in, which delivers even with few visits (Source: DebugBear). An accompanying technical analysis combines both views into a complete picture.
The 75th Percentile and the 28-Day Window
Two properties of the CrUX dataset are especially important in practice because they govern whether a page passes the Core Web Vitals. The first is the 75th percentile. Google does not evaluate a page on the average but on the value that 75 percent of user experiences reach or beat (Source: Google web.dev). Put concretely: if 100 people visit your page, the LCP must be 2.5 seconds or below for 75 of them for the value to count as good. The percentile is deliberately strict - it protects the evaluation against a few very fast visits masking a slow majority.
The second property is the rolling 28-day window. CrUX aggregates the values over the past 28 days and moves the window forward by one day each day: the oldest day drops out, the newest is added (Source: Chrome UX Report). This window smooths noise and daily fluctuation but has a direct consequence for the work - improvements become fully visible only after a few weeks, because they have to work their way through the entire window. A fix that goes live today typically shows its full effect in the field only four weeks later.
From this delay follows an important way of working: while waiting for field confirmation, you check the effect in your own RUM, which delivers in real time (Source: DebugBear). This keeps you able to act without waiting 28 days blindly. Your own RUM thereby becomes an early indicator for the CrUX movement that follows later. This combination of fast RUM feedback and slow but ranking-relevant CrUX confirmation is the core of a professional measurement strategy.
Patience Is Part of the Method
Why Lab Values Diverge From the Field
Lab and field data diverge for systematic reasons, and that is not a bug but a consequence of their construction. Lab data is created by loading a page in a synthetic environment with a single, predefined set of device and network conditions (Source: web.dev). Field data, by contrast, contains the full variety of real conditions plus countless behavior patterns of real users. A single lab run is therefore only ever an approximation of one point on a broad distribution.
The deviation is especially clear with metrics that depend on interaction. Interaction to Next Paint (INP) measures the response time to real user input - a headless browser in the lab, however, usually does not click, type or scroll through the page. Such metrics are hard to capture realistically in a classic lab run, which is why the field is the more reliable source here. How to surface and fix INP problems specifically is explored in our article on optimizing INP and reducing interaction latency.
Cumulative Layout Shift (CLS) also often diverges between lab and field, because a lab test loads the page once without scrolling or interacting - yet exactly there many real jumps occur. This gap becomes even more relevant with the successor signal discussed for 2026; the background is explored in our article on the Visual Stability Index as the CLS successor. Anyone who takes lab values as the sole yardstick systematically overlooks what real users experience - and what Google evaluates.
The Score-100 Fallacy
Setting Performance Budgets at the 75th Percentile
A performance budget defines an upper limit a metric must not exceed - and the decisive step for data-driven speed is to set this budget at the 75th percentile of field data, not at the lab value. Concretely, this means: the budget is held when the LCP stays under 2.5 seconds for 75 percent of real users, the INP under 200 milliseconds and the CLS under 0.1. These thresholds correspond to the values Google defines as good and are therefore directly ranking-relevant.
The advantage of a field-based budget is its honesty. A budget at the lab value can show green while a quarter of real users experience a markedly slower page - and it is exactly this quarter that decides the evaluation. The example shown in the mockup illustrates this: an LCP of 1.9 seconds in the lab looks clean, yet the field percentile of 3.1 seconds breaks the budget. Only a budget that checks at the 75th percentile catches this discrepancy.
- Set a budget per core metric: LCP under 2.5 s, INP under 200 ms, CLS under 0.1 - each at the 75th percentile of real users.
- Budget separately per template type: home, category, product detail and cart behave differently, and the origin average hides outliers.
- Separate mobile and desktop: CrUX reports both separately, and mobile values are usually the critical case.
- Couple RUM as an early-warning system: if a metric breaks the budget in real-time RUM, it will later arrive in CrUX too.
- Integrate the budget into the pipeline: flag the build or pull request as soon as a lab proxy breaks the budget, before the change goes live.
What matters is the distribution of roles in the budget process: the field defines the target, the lab watches over regressions. A lab test in the build cannot predict the exact 75th-percentile field result, but it reliably detects when a new script bloats the bundle or a delayed hero image worsens the LCP. How to build JavaScript budgets into the build concretely is explored in our article on JavaScript and performance budgets.
Measure Continuously Instead of Checking Once
Speed is not a state you reach once and then tick off. Every new plugin, every theme update, every marketing script and every additional feature can degrade hard-won performance again. Only continuous measurement surfaces such creeping regressions before they eat their way through the 28-day window into the ranking-relevant CrUX values. A one-off check delivers a snapshot - and goes stale as soon as the next change is deployed.
A robust measurement strategy combines all three sources according to their strengths. Lab tests run automatically in the build and catch regressions before they go live. Your own RUM delivers the why in real time and serves as an early indicator. CrUX confirms the ranking-relevant reality over the 28-day window. Only this interplay turns individual numbers into a basis for decisions. A continuous frontend optimization anchors this cycle as a fixed process instead of an occasional action.
Measure
Combine three sources: lab for diagnosis, RUM for real time and detail, CrUX for the ranking-relevant evaluation at the 75th percentile.
Prioritize
Order measures by impact on the 75th percentile. The metric that breaks the budget most clearly comes first - not the one that is easiest to fix.
Prove
Demonstrate the improvement in RUM immediately and in CrUX after the 28-day window. This turns speed into a measurable quantity rather than a claim.
Anyone who optimizes only the lab score optimizes for a device barely any real user owns. The ranking is decided by the field - at the 75th percentile.
From Gut Feeling to a Provable Speed Strategy
The economic lever lies in clarity about the right data source. Anyone who pours budget into optimizations that only lift the lab score invests in the wrong goal - the field data, and thus the ranking, barely move. Conversely, an optimization that improves the 75th percentile in the field delivers both better Core Web Vitals and a noticeably faster experience for real users on real devices. Data-driven speed means recognizing and prioritizing exactly these effective measures.
In practice this means: CrUX as the truth for ranking, your own RUM as a fast diagnostic and early-warning system, lab tests as a regression guard in the build - and above all a performance budget at the 75th percentile that applies to every change. This turns diffuse gut feeling into a provable strategy that backs every improvement with numbers from the field. This exact approach forms the core of our web performance services that measures and prioritizes first instead of blindly turning knobs.
Sources and Studies