Causal decomposition · open protocol

Did the web actually get faster?

Since 2023, the share of sites with “good” Core Web Vitals has climbed about 13 points — a number quoted everywhere as proof the web is improving. But during that window Google changed both the metric and the measuring instrument, so that +12.9 isn't one series: it splices FID-era months onto INP-era months. Measured on a single metric it is +14.3 points — the switch lowered the reported number, so the spliced headline understates the like-for-like move. And Google's own release notes prove a real chunk of it isn't sites getting faster at all.

The spliced headline

The raw fact is real: CrUX's headline share of origins passing Core Web Vitals rose from 43.0% in January 2023 to 55.9% in May 2026. The trap is reading that +12.9-point jump as one measurement, because in March 2024 Google replaced First Input Delay (FID) with Interaction to Next Paint (INP) as the responsiveness vital. The start of that span is on the FID basis and the end is on the INP basis: it is a splice, not a series.

INP is the stricter bar. CrUX published both headlines for seven consecutive months, August 2023 through February 2024, and the INP figure was lower every single time — by 3.2 to 3.7 points (mean 3.5), the gap narrowing as INP pass rates rose. All seven pairs are in the CSV below.

That fixes the direction. Because INP scores lower at the same date, putting the whole span on one metric raises the measured gain rather than shrinking it. From the earliest month CrUX published an INP substitution — 41.6% in August 2023 — to May 2026 the like-for-like move is +14.3 points, against +10.6 for the official headline over that identical span. Three other comparisons are worth having straight, and they are not interchangeable:

What we cannot do is convert January 2023 itself to an INP basis: CrUX published no INP substitution before August 2023, and the seven observed gaps are aggregate, not a per-origin conversion factor. So there is no single “corrected 2023–2026 number,” and any source offering one is estimating.

Line chart of the CrUX Core Web Vitals pass rate from 2023 to 2026. The official headline rises from 43.0% to 55.9%. A dashed INP-substituted line runs below it through the FID era, from 41.6% in August 2023 to 45.6% in February 2024; the two lines merge at the March 2024 switch, where the official series steps down onto the INP basis.
Figure 1 — CrUX headline pass rate, 2023–2026. The dashed line is the INP substitution CrUX published alongside the official FID headline for seven months; it runs 3.2–3.7 points below. The March 2024 switch therefore stepped the reported series down onto the stricter metric — which is why the spliced +12.9 (43.0% Jan 2023 → 55.9% May 2026) understates the like-for-like move of +14.3 on a single INP basis (41.6% Aug 2023 → 55.9%). Source-coded from CrUX monthly release notes.
+12.9 pp the quoted headline — spliced across two metrics, Jan 2023 → May 2026
+14.3 pp like-for-like on INP, Aug 2023 → May 2026
−3.2 to −3.7 pp FID→INP definition penalty across all seven paired months
? pp share that is actually site optimization

Two narratives die here. The web did not “get faster because INP replaced FID” — the switch lowered the reported pass rate. But the climb since the switch is far too big to wave away as just the transition: the official INP era alone runs +9.1 points (46.8% in March 2024 to 55.9%). The real, unresolved question is how to split a gain of that size between four very different forces — and the answer is not visible in any trend chart.

Four kinds of “faster”

“Faster” means at least four things in this literature, and they must be separated before any number means anything:

  1. Reported faster

    The official headline rises under the metric and data regime active that month. This is all a release note reports.

  2. Metric-definition faster

    The score improves because the metric changed. Excluding scroll-starting interactions from INP, for instance, removes interactions Google decided INP shouldn't measure — the number moves, the user feels nothing.

  3. Browser-side faster

    Users genuinely wait less because Chrome, Android, bfcache or the scheduler improved — with no change to the site's code.

  4. Site/platform optimized faster

    Site owners, CMSs, ad tags, CMPs or hosts changed markup, JavaScript, caching or delivery. This is the only category that answers “did websites get better?”

Only category 4 is site optimization. Category 3 is real user benefit but not the site's doing. Category 2 isn't a speed change at all. A headline number fuses all four — which is exactly why a raw year-over-year chart is methodologically unsafe when the metric definition and the instrument both move during the period being measured.

The documented shocks — and what's actually moving

Google's own CrUX release notes and Chromium changelogs date the discontinuities. Several explicitly are not ordinary site optimization. The component view shows where the headline comes from: LCP is the main mover (≈ +6 points), with CLS and INP improving from already-high bases.

Line chart of LCP, CLS and INP good-pass rates in the INP era (2024–2026): good-LCP rises from about 62% to 69%, good-CLS from 77% to 81%, good-INP stays high at 82–87%.
Figure 2 — Component pass rates in the official INP era. The headline tracks LCP most closely; several of the documented LCP movements below are browser-side, not site work.
Documented event windows from the release-note ledger. These windows overlap and are an upper-bound accounting, not a clean partition — the causal split needs the origin-panel study below.
WindowΔWhat the record attributes it to
FID → INP definition gap (Jan & Feb 2024)−3.2 ppMetric definition — a stricter bar, not a speed change
Jul → Sep 2024+1.8 ppMixed: INP scroll/modal exclusions + GPT yielding + LCP work
Feb → Mar 2025+1.0 ppBrowser-side: bfcache eligibility fixes by Chrome
Jun → Aug 2025+1.4 ppData quality: rebound after an Android data fix — not site work
Nov 2025 → Mar 2026+1.9 ppMixed seasonality / device / browser — unresolved

The events sort into families: metric-definition (FID→INP; the August 2024 scroll exclusion; the June 2024 modal-dialog timing change), browser-side (Chrome scheduler and Android cookie-caching gains; bfcache fixes; a March 2026 Android flagship boost Google measured at 4–6% faster loads), data-quality / coverage (the 2025 Android issue and fix; the ECT→RTT coverage change), and genuine site/platform work (WordPress LCP-image improvements; Google Publisher Tag and consent-platform yielding; Duda removing Cache-Control: no-store on ~40,000 origins).

A correction to a popular driver

One change is frequently miscredited: Chromium's February 2025 cross-origin LCP renderTime fix. Its changelog states plainly that the issue “did not affect the Chrome User Experience Report (CrUX)” and that it made RUM LCP “more in line with CrUX.” So it's a real-user- monitoring measurement event and a negative control for CrUX — if a decomposition attributes a 2025 CrUX LCP jump to it, the model is wrong.

Why a trend chart can't answer it — and what can

The Web Almanac's 2025 performance chapter is admirably honest: mobile CWV rose from 36% (2023) to 48% (2025), but it says that rise “may reflect browsers, devices and networks” alongside site optimization. That's the ambiguity. This study turns it into a falsifiable decomposition. Because web-platform events hit all Chrome users at once, there's no clean control group — so the design leans on exposure gradients and negative controls, not naïve before/after.

  1. An origin-month panel

    Pull chrome-ux-report.materialized.metrics_summary for every origin, Jan 2024–May 2026, and define pass/fail per metric at the 75%-good threshold — avoiding fragile p75 units.

  2. Constant-origin, not all-origin

    Run every model three ways: all reported origins, a constant-origin panel (present every month), and balanced-by-rank/device. Composition = (all-origin Δ) − (constant-origin Δ) — reported explicitly, never as “optimization.”

  3. Exposure-gradient event studies

    Each event gets an exposure proxy and a negative control: the Android data fix should load on phone density, with desktop as control; bfcache should help most where back/forward traffic is high; the cross-origin LCP change should produce no CrUX move (a falsification test).

  4. Additive + Shapley decomposition

    Because windows overlap, allocate the +10.1 points of the panel window (January 2024 → May 2026) across metric-definition, data-quality, browser/device, site/platform, composition and an unexplained residual using order-averaged (Shapley) shares — so the result doesn't depend on which overlapping cause is counted first.

The reproducibility pack below ships the exact BigQuery extraction, the constant-origin panel construction, the exposure-feature SQL, a CSV export step, and an R/fixest event-study skeleton — enough to reproduce the three exposure-gradient models, not the full allocation, which is specified rather than coded. The shares themselves are deliberately not estimated here: guessing them from aggregate monthly notes would be the exact error this paper exists to prevent.

The decomposition table the origin-panel study fills. Left blank on purpose — a confident number here without origin-level models would be theatre, not science.
Component of the +10.1 pp (Jan 2024 → May 2026)ShareIdentification basis
Metric definition & scoringFID/INP paired gap; INP scroll/modal exposure
Data quality & coverageAndroid fix; ECT/RTT constant-coverage checks
Browser / device real speedbfcache, scheduler, Android exposure models
Explicit site/platform changesWordPress / GPT / CMP / Duda technology strata
Residual site optimizationresidual after event families + composition
Origin-set compositionall-origin minus constant-origin

What it means for performance teams

The decomposition isn't academic — it changes what you do:

And it reframes the speed-vs-revenue question our sister study “The cost of a millisecond” tackles: if your CrUX improved but the cause was a browser change, don't expect the conversion lift a real site optimization would have bought.

Limitations — read before quoting

  1. The causal shares are not estimated here

    This article establishes the descriptive accounting — which comparisons the published series does and does not support — and the design. The numeric decomposition requires running the supplied origin-panel models on CrUX BigQuery; treat the table above as a specification, not a result.

  2. No randomized control

    Web-platform and metric events are global. Identification rests on exposure gradients and negative controls; aggregate interrupted-time-series alone is weak evidence and is labelled as such.

  3. CrUX is Chrome-only and eligibility-gated

    It excludes Chrome on iOS, WebView and other browsers, and origins enter/leave as popularity/eligibility shifts — which is precisely why constant-origin and composition panels are mandatory.

  4. Endpoint sensitivity

    May 2026 carries a documented, unexplained Android-heavy regression; March 2026 (56.5%) is the local maximum. Headline deltas should be reported against both endpoints.

  5. The series is source-coded by hand

    The headline numbers are transcribed from monthly release notes (spot-checked against the live notes — e.g. May 2026's 68.6/81.3/86.6/55.9 components match exactly). The published CSV lets you re-verify every row.

Data, code & sources

The reproducibility pack is published under CC BY 4.0: the source-coded headline series, the dated event ledger, the window accounting, the BigQuery extraction (panel, constant-origin panel, exposure features and a CSV export step), and an R/fixest event-study skeleton that runs the three exposure-gradient models. Be clear about what that is and isn't: it is the extraction and the event-study layer. The balanced-panel runs, the technology strata and the additive/Shapley allocation described above are specified here but not implemented in the shipped code — you would write them.

Key sources

Cite this study

PageSpeedAudit Research (2026). Did the web actually get faster? A causal
decomposition framework for 2023-2026 Core Web Vitals improvement.
https://pagespeedaudit.com/research/did-the-web-get-faster

@misc{pagespeedaudit2026webfaster,
  title  = {Did the web actually get faster? A causal decomposition framework
            for 2023-2026 Core Web Vitals improvement},
  author = {{PageSpeedAudit Research}},
  year   = {2026},
  url    = {https://pagespeedaudit.com/research/did-the-web-get-faster},
  note   = {Headline series + event ledger + BigQuery/R code, CC BY 4.0}
}

Is your site actually faster — or did the metric move?

A PageSpeedAudit report separates real, code-level wins from measurement and browser effects, and tells you which fixes will move your field metrics. See also our study on whether Lighthouse's predicted savings materialize, and the free cloaking test.