The State of Web Vitals

Real-user Core Web Vitals on mobile and desktop across 210,902 sites, paired with what we found in their HTML, CSS, and network traces.

Field data PhoneDesktopAll October 2026 edition · Phone field outcomes

69.7% of sites pass all three Core Web Vitals on mobile. INP (91.8% good) and CLS (88.9% good) pass on most sites. LCP is where sites still fail: 18.2% miss the 2.5 second threshold, and most of those misses start in the HTML or on the server before the page even renders.

What still slows sites down from 210,902 real sites

LCP image loading 83,267 sites with an image LCP
+184 ms resource load delay on mobile

17.4% of image-LCP sites put loading="lazy" on their own LCP image

When you put loading="lazy" on the LCP image, the browser waits for layout before it requests the file. Median resource load delay is 251 ms with default loading vs 435 ms with loading="lazy". On WordPress, sites without loading="lazy" on the LCP image pass LCP on 73% of sites, compared with 69% on sites that lazy-load their LCP image.

LCP image loading →
LCP discovery 196,430 sites
27.4% of LCP elements sit in CSS

27.4% of sites reference their LCP element in a stylesheet

The preload scanner only reads HTML. When the hero image is a CSS background-image, the browser has to download and parse the stylesheet before it knows the image URL exists. Sites with the LCP element in HTML pass LCP on 84% of sites (1.5s median). Sites that put it in CSS reach 77% (1.7s), and JavaScript-injected LCP elements reach 69% (2.0s).

LCP discovery →
Speculation rules 206,207 sites
34.9% of sites use speculation rules

34.9% of sites ship Speculation Rules, led by WordPress and Wix

65.1% of sites ship no speculation rules. Of the 34.9% that do, 89% use conservative (86% of which run WordPress) and 8% use eager (99% of which run Wix). Sites on eager pass LCP on 94% of sites, compared with 70% on conservative and 86% without rules.

Speculation rules →
@font-face font-display 188,407 sites with web fonts
39.6% of @font-face rules stay at auto

Sites mixing font-display: swap with blocking rules pass LCP on 78% vs 86%

Across 15.0 million @font-face rules, 49.7% set font-display: swap while 39.6% leave it at auto (which blocks text rendering up to 3 seconds). Sites that keep every text font on swap or optional pass LCP on 86% of sites. Sites that mix swap with blocking rules on the same page pass LCP on 78% and CLS on 87%.

@font-face font-display →
HTTP protocol 206,244 sites
191 ms lower median TTFB on HTTP/3

23.7% of sites serve HTML over HTTP/3

61.7% of sites serve their main HTML document over HTTP/2, and 14.6% still use HTTP/1.1. Sites on HTTP/3 record a 530 ms median Time to First Byte, compared with 721 ms on HTTP/2. 86% of HTTP/3 sites pass LCP, against 80% on HTTP/2.

HTTP protocol →
Main-thread yielding 206,118 sites
33 ms median TBT with scheduler.yield()

scheduler.yield() sites record 33 ms median blocking time across 77 scripts

68.3% of sites call no main-thread yielding API and load a median of 20 scripts. Sites that use scheduler.yield() (4.9% of sites) load a median of 77 scripts and record 33 ms median Total Blocking Time. Sites using requestIdleCallback() (26.8%) sit at 91 ms median TBT.

Main-thread yielding →

Which CMS or framework passes Core Web Vitals? ranked by sites passing LCP, INP, and CLS together

Wix (88.8%) and Shopify (84.9%) lead the CMS standings. WordPress is the most common CMS in our crawl (65,509 sites), with 62.7% passing all three Core Web Vitals. On the framework side, htmx (82.0%) and Alpine (78.3%) top the table, while Vue (62.5%) and Nuxt (48.3%) sit at the bottom of the top 7.

All 84 metrics we measure pick a topic to see the numbers and what to set

LCP Timing 1 metric
Speculation rules 2 metrics

How we measure, and how to query the dataset CrUX field data + Chromium crawl

Methodology

210,902 sites, real Chrome users + one cold Chromium load

Pass rates and p75 timings come from the Chrome UX Report (CrUX) rolling 28-day window. To find out why a site passes or fails, we crawl each homepage in headless Chromium and record 84 technical signals from the DOM, stylesheets, scripts, Long Animation Frames, and network waterfall.

MCP server

Query the State of Core Web Vitals dataset from Claude or Cursor

The Explorer and our public MCP server read the same State of Core Web Vitals dataset. Add the URL below to Cursor, Claude Desktop, or any MCP client to run get_metrics, get_histogram, and list_options filtered by CMS, framework, or CDN.

https://www.corewebvitals.io/api/state-of-cwv/mcp
{
  "state-of-cwv": {
    "type": "http",
    "url": "https://www.corewebvitals.io/api/state-of-cwv/mcp"
  }
}

Discovery: /.well-known/mcp.json · For per-site live RUM with attribution, use CoreDash