React — Core Web Vitals
The distribution, not just the median
Each bar is the good / needs-work / poor split for React. The marks where the whole fleet sits, so you can see who is ahead and who is behind.
What moves Core Web Vitals on React & Next.js
Field data findings across React & Next.js sites from our metric deep dives.
19.6% of React sites have loading="lazy" on their hero component.
Next.js <Image> sets loading="lazy" by default unless priority or preload is configured. Across React sites, 88% with default loading pass LCP compared with 88% with loading="lazy".
React sites with an HTML <img> hero pass LCP 20 percentage points more often than sites with CSS background heroes.
Across React sites, 84.1% include the LCP image in initial HTML (87% good LCP, 1.3s median) compared with 13.7% that reference the hero image in CSS (67% good LCP, 2.0s median).
React sites with all fonts on swap pass LCP 21 points more often than mixed-font sites.
Across React sites, 71.3% of @font-face rules use swap. Sites with all fonts on swap pass LCP at 93% (1.2s median) compared with 72% (1.9s median) on mixed-rule sites.
68.3% of React sites serve HTML over HTTP/3 (91% good LCP vs 66% on HTTP/2).
Across React sites, 68.3% serve main HTML over HTTP/3 (91% good LCP, 1.2s median) compared with 23.9% on HTTP/2 (66% good LCP, 2.1s median).
React sites using scheduler.yield() pass INP 11 points more often than sites using requestIdleCallback().
Across React sites, 62.9% call scheduler.yield() (96% good INP, 79ms median) compared with 22.9% calling requestIdleCallback() (85% good INP, 115ms median).
60.3% of React sites serve an AVIF hero image (1.2s median LCP).
Next.js Image Optimization supports image/avif and image/webp output formats. Across React sites, 60.3% serve AVIF hero images (94% good LCP, 1.2s median), 13.5% serve WebP, and 25% serve JPEG or PNG.
60.1% of React sites emit eager speculation rules and 16.8% emit no inline tag.
Next.js App Router provides route prefetching on <Link> components in JavaScript. Across React sites in the dataset, 60.1% carry inline eager speculation rules, 22.2% carry conservative rules, and 16.8% have no inline speculation rules tag.
35.3% of React & Next.js sites set fetchpriority="high" on the LCP element (92% vs 81% good LCP).
Next.js <Image> supports the fetchPriority="high" and priority props. Across React sites, 35.3% set fetchpriority="high" on the LCP element (92% good LCP, 1.2s median) compared with 60.9% with no hint (81% good LCP, 1.5s median, 11 percentage points apart).
React & Next.js sites with an <img> LCP element pass LCP 21 percentage points more often than sites with CSS background-image LCP.
Across React sites, 60.3% paint LCP from an <img> tag (88% good LCP, 1.3s median), 23.0% paint from text blocks (86% good LCP), and 14.6% paint from CSS background-image styles (67% good LCP, 2.0s median).
72.1% of React & Next.js sites load LCP media from external image origins (91% good LCP).
Next.js <Image> supports custom loader functions for external image CDNs. Across React sites, 72.1% load the LCP image from an external origin (91% good LCP, 1.2s median) and 27.9% load it from the application origin (67% good LCP, 2.0s median).
React & Next.js sites with responsive srcset pass LCP at 89% vs 82% without responsive markup.
Next.js <Image> generates a responsive srcset when the sizes prop is set. Across React sites, 26.9% use srcset on the LCP image (89% good LCP, 1.3s median) and 64.8% have no responsive candidates (82% good LCP, 7 points apart).
Among React & Next.js sites with speculation rules, 77.2% use prefetch and 5.7% use prerender_until_script.
Across React sites in the dataset, 77.2% emit prefetch rules (78% CWV pass rate), 5.7% emit prerender_until_script (88% CWV pass rate), and 16.8% emit no inline speculation rules tag.
React & Next.js sites on Brotli (70.6%) pass LCP 24 percentage points more often than sites on gzip (17.9%).
Across React sites, 70.6% serve Brotli-compressed HTML (91% good LCP, 1.2s median) compared with 17.9% serving gzip-compressed HTML (67% good LCP, 2.0s median).
React sites serving HTML from Fastly (37.1%) pass LCP at 95% vs 77% on direct origins.
Across React sites, 37.1% serve main HTML from Fastly edge nodes (95% good LCP, 1.1s median) compared with 46.9% serving HTML from direct origins (77% good LCP, 1.6s median, 18 points apart).
React & Next.js sites record a 73% all-three CWV pass rate across 7,993 sites.
Across 7,993 audited React & Next.js sites, 73% pass all three Core Web Vitals (LCP, INP, and CLS) simultaneously.
React & Next.js sites without CSS @import pass LCP 11 percentage points more often than sites with @import.
Across React sites, 96.0% ship stylesheets without runtime @import rules (85% good LCP, 1.4s median) compared with 4.0% that include a runtime CSS @import (74% good LCP, 1.9s median).
57.6% of React & Next.js sites ship at least one uncompressed JSON, SVG, or script response.
Across React sites, 42.4% compress every text asset (84% good LCP, 1.4s median) and 57.6% include at least one uncompressed text response (84% good LCP, 1.4s median).
Next.js generates ETag headers by default (97.1% of React sites, 12 points higher LCP pass rate than sites without ETag).
Next.js enables generateEtags: true by default for pages. Across React sites, 97.1% serve ETag headers (84% good LCP, 1.4s median) compared with 2.9% that omit ETag headers (72% good LCP, 1.9s median).
99.6% of React & Next.js sites include Last-Modified headers on static and CDN responses.
Across React & Next.js deployments, 99.6% emit Last-Modified timestamps on static chunks or media assets (84% good LCP, 1.4s median).
33.1% of React sites lazy-load at least one above-the-fold image.
Next.js <Image> components default to loading="lazy" unless priority or preload is passed. Across React sites, 96.6% render an eager image in the viewport and 33.1% have a visible viewport image with loading="lazy".
React sites using <picture> (29.4%) pass LCP at 89%, 5 points above sites with fixed images.
Next.js <Image> generates responsive srcset candidate URLs. Across React sites, 84.9% use srcset on <img> (86% good LCP) and 29.4% use <picture> (89% good LCP).
React sites with HTML width/height (88.4%) pass CLS 7 points more often than sites with CSS-only aspect-ratio (5.1%).
Next.js <Image> requires width and height props unless fill is set. Across React sites, 88.4% include HTML width and height attributes (93% good CLS) and 5.1% use CSS aspect-ratio (86% good CLS).
79.8% of React sites use fetchpriority="high" (87% good LCP vs 84% with auto priority).
Next.js <Image> emits fetchpriority="high" when priority or fetchPriority="high" is configured. Across 9,216 React sites, 79.8% use fetchpriority="high" (87% good LCP) compared with 84% on sites with default priority.
Iframe-using React sites with lazy iframes (5.7%) pass LCP at 71% vs 82% with default iframes (11 points apart).
Across React sites that render iframes, 97.2% include default iframes (82% good LCP) and 5.7% include iframes with loading="lazy" (71% good LCP).
Hint-using React sites include scroll-driven CSS on 77.3% and will-change on 71.3% (95% good INP).
Across 8,797 hint-using React sites, 77.3% include scroll-driven animation rules (95% good INP), 71.3% use will-change, and 53.5% use aspect-ratio.
React sites reach 98.8% HTTP/2 and 92.1% HTTP/3 subresource adoption (85% good LCP).
Across 9,282 React sites, 98.8% serve subresources over HTTP/2 and 92.1% serve subresources over HTTP/3 (85% good LCP).
70.8% of React & Next.js sites serve Cache-Control: immutable assets (90% good LCP).
Across React sites, 70.8% emit Cache-Control: immutable headers on static chunks (90% good LCP) compared with 79% on short-TTL sites.
27.7% of React sites also load jQuery (54% CWV pass vs 73% across all React sites).
Across 9,282 React sites, 27.7% load jQuery alongside React and pass all three Core Web Vitals at 54% (19 points below the 73% React cohort pass rate).
React sites with analytics use GA4 on 96.6% (91% good INP) and Matomo on 5.2% (93% good INP).
Across 4,068 analytics-using React sites, 96.6% load Google Analytics 4 (91% good INP), 71.0% include UA tags, and 5.2% run Matomo Analytics (93% good INP).
Ad-supported React sites pass all three CWV at 58% with AdSense and 45% with GPT.
Across 894 React sites running display ads, 93.5% load Google AdSense (58% passing all three CWV) and 8.9% load Google Publisher Tag (45%).
React sites with GTM (95.3%) pass INP at 91% vs 65% with Tealium iQ.
Across 3,659 React sites with a tag manager, 95.3% load Google Tag Manager (91% good INP), 4.5% load Matomo Tag Manager (95% good INP), and 0.7% load Tealium iQ (65% good INP).
On the 597 WordPress + React sites using caching plugins, LiteSpeed Cache (26.1%) passes all three CWV at 69% and WP Rocket (34.7%) at 67%.
Across 597 React sites with a detected WordPress optimization plugin, 34.7% use WP Rocket (67% passing all three CWV), 26.1% use LiteSpeed Cache (69%), and 20.8% use Autoptimize (58%).
React sites with RUM (64.0%) pass all three CWV at 84% vs 62% on sites with tag managers (39.4%).
Across 9,280 React sites, 89.8% use a CDN (74% passing all three CWV), 64.0% include Real User Monitoring (84% CWV pass), and 39.4% load tag managers (62% CWV pass).
React & Next.js apps with 1,500+ DOM nodes (19.5%) pass field INP at 88% vs 95% at 800 to 1,499 nodes.
Across 9,282 React sites, 36.0% render 400 to 799 nodes (94% good INP), 36.1% render 800 to 1,499 nodes (95% good INP), and 19.5% exceed 1,500 nodes (88% good INP).
83% of React & Next.js sites have a DOM depth above 20 levels (40.3% at 32+ levels).
Across React sites, 42.6% have a maximum DOM depth of 21 to 31 levels (93% good INP) and 40.3% have 32+ levels (95% good INP).
67.8% of React & Next.js sites ship over 75 KB of HTML (90% good LCP).
Across React sites, 67.8% transfer over 75 KB of initial HTML (90% good LCP) and 16.8% transfer 30 to 75 KB (65% good LCP).
94.7% of React & Next.js sites have zero HTML font preload tags (85% good LCP vs 67% with 1 to 2 preloads).
Across 9,282 React sites, 94.7% have 0 explicit <link rel="preload" as="font"> tags in the DOM (85% good LCP) and 3.1% have 1 to 2 font preload links (67% good LCP).
React & Next.js sites with 4+ iframes (8.1%) pass field CLS at 84% vs 92% with 0 iframes.
Across 9,282 React sites, 44.5% use 0 iframes (92% good CLS), 25.7% use 1 iframe (94%), and 8.1% embed 4 or more iframes (84% good CLS).
React & Next.js sites over 600ms lab TBT (13.1%) pass field INP at 88% vs 95% at 0ms TBT.
Across React sites, 31.6% record 0ms lab TBT (95% good INP), 14.3% sit at 201 to 600ms TBT (90% good INP), and 13.1% exceed 600ms TBT (88% good INP).
React & Next.js sites with multi-shift lab CLS (18.6%) pass field CLS at 81% vs 90% for a single shift.
Across 3,771 React sites with lab layout shifts, 58.8% have one isolated shift (90% good field CLS), 22.6% sit at 65% to 94% (75%), and 18.6% have multiple shifts (81% good CLS).
58.3% of React & Next.js sites record 0 lab layout shifts (97% good CLS vs 70% at 3 to 5 shifts).
Across 9,282 React sites, 58.3% record 0 lab shifts (97% good CLS), 26.0% record 1 to 2 shifts (93%), 9.2% record 3 to 5 shifts (70% good CLS), and 6.4% record 6+ shifts (76% good CLS).
Shifting React & Next.js sites with a largest shift over 0.25 (15.3%) pass field CLS at 67% vs 95% under 0.01 (28 points apart).
Across 3,867 shifting React sites, 36.3% have a largest shift under 0.01 (95% good CLS) and 15.3% exceed 0.25 (67% good CLS).
React & Next.js sites connecting to 15+ domains (16.6%) pass all three CWV at 62% vs 80% at 8 to 14 domains.
Across 9,282 React sites, 61.3% connect to 8 to 14 domains (80% passing all three CWV) and 16.6% connect to 15 or more domains (62%, 18 percentage points apart).
React & Next.js sites with over 50% third-party requests (14.7%) pass field INP at 88% vs 94% at 25% to 50%.
Across 9,282 React sites, 57.5% sit in the 25% to 50% third-party request tier (94% good INP) and 14.7% have over 50% external requests (88% good INP, 103ms median).
React & Next.js sites caching under 20% of resources (9.3%) pass LCP at 64% vs 87% at 80%+ (23 points apart).
Across React sites, 58.3% cache 80%+ of assets (87% good LCP), 29.0% cache 50% to 79% (86%), and 9.3% cache under 20% (64% good LCP).
React & Next.js sites with 9+ third-party providers (7.7%) pass all three CWV at 49% vs 84% at 0 to 1 providers (35 points apart).
Across 9,282 React sites, 43.2% load 0 to 1 external providers (84% passing all three CWV), 23.0% load 2 to 4 (75%), 26.0% load 5 to 8 (65%), and 7.7% load 9+ providers (49%).
React & Next.js sites serving AVIF (63.5%) pass LCP at 93% vs 77% on sites serving PNG (54.4%).
Next.js <Image> supports image/avif and image/webp output formats. Across 9,274 React sites, 63.5% serve AVIF images (93% good LCP, 1.2s median), 54.4% serve PNGs (77% good LCP, 1.7s median), and 44.2% serve JPEGs (76% good LCP).
93.9% of React & Next.js sites serve images from external image origins (85% good LCP vs 68% self-hosted).
Next.js <Image> supports custom loader functions for external media CDNs. Across 9,274 React sites, 93.9% serve images from external origins (85% good LCP, 1.4s median) and 32.3% serve images from the primary origin (68% good LCP, 2.0s median).
React & Next.js sites with synchronous blocking scripts (30.0%) pass LCP at 67% vs 86% with defer.
Across React sites, 89.2% load scripts with defer (86% good LCP), 96.8% use async (85% good LCP), and 30.0% include synchronous blocking scripts in <head> (67% good LCP, 2.0s median, 19 points apart).
94.8% of React & Next.js sites load cross-origin scripts (93% good INP, 90ms median).
Across 9,282 React sites, 100.0% run first-party bundles (92% good INP) and 94.8% also execute cross-origin scripts (93% good INP, 90ms median).
99.6% of React & Next.js sites declare scripts in HTML and 95.1% also load script-initiated chunks (93% good INP).
Across 9,282 React sites, 99.6% use parser-discovered <script> tags (92% good INP), 95.1% load script-initiated chunks (93% good INP), and 71.8% use other initiators (93% good INP).
React & Next.js sites with <body> stylesheets (14.1%) pass LCP 22 points less often than sites with inline CSS (62% vs 84%).
Across 9,281 React sites, 99.3% use inline <style> blocks (84% good LCP, 1.4s median), 56.0% load blocking <head> CSS (77%), and 14.1% include <link rel="stylesheet"> tags inside <body> (62% good LCP, 2.2s median).
React & Next.js sites loading third-party stylesheets (44.8%) pass LCP 6 points less often than sites on first-party CSS (78% vs 84%).
Across 9,281 React sites, 99.9% serve first-party CSS (84% good LCP, 1.4s median) and 44.8% load external third-party stylesheets (78% good LCP, 1.6s median).
99.3% of React & Next.js sites use inline styles (84% good LCP), while 37.4% load external <link> CSS (70%).
Across 9,281 React sites, 99.3% emit inline <style> tags (84% good LCP, 1.4s median), 36.2% load CSS from JS chunks (80% good LCP), and 37.4% load parser <link rel="stylesheet"> tags (70% good LCP, 2.0s median).
React & Next.js sites loading TTF fonts (7.3%) pass LCP 24 points less often than sites on WOFF2 (60% vs 84%).
Across 9,147 font-using React sites, 97.1% serve WOFF2 (84% good LCP, 1.4s median), 13.8% serve WOFF (66% good LCP), and 7.3% serve TTF (60% good LCP, 2.2s median).
React & Next.js sites loading external Google Fonts (18.9%) pass LCP at 65% vs 89% on dedicated CDNs.
Across 9,147 font-using React sites, 77.3% serve fonts from external CDNs (89% good LCP, 1.2s median) and 18.9% load Google Fonts at runtime (65% good LCP, 2.0s median, 24 percentage points apart).
85.6% of media-using React & Next.js sites stream from external CDNs (91% good LCP vs 62% self-hosted).
Across 1,803 React sites with <video> or <audio> tags, 85.6% serve media from external CDNs (91% good LCP, 1.3s median) and 15.9% serve media from their own origin (62% good LCP, 2.1s median, 29 points apart).
62.9% of React & Next.js sites call scheduler.yield() (96% good INP, 79ms median).
Across 9,276 React sites, 62.9% call scheduler.yield() (96% good INP, 79ms median) and 63.4% call setInterval() (91% good INP, 96ms median).
60.0% of LoAF React & Next.js sites record long frames in event listeners (93% good INP).
Across 5,701 React sites recording Long Animation Frames, 60.0% record long frames in DOM event listeners (93% good INP, 89ms median), 44.3% during script evaluation (92% good INP), and 18.6% in timer callbacks (92%).
91.6% of React & Next.js sites execute fetch() requests during load (85% good LCP, 1.4s median).
Across 9,282 React sites, 100.0% load JS bundles, 99.9% load images, 98.5% load web fonts (84% good LCP), and 91.6% fire fetch() requests (85% good LCP).
91.1% of React & Next.js sites serve Brotli-compressed subresources (85% good LCP, 1.4s median).
Across 9,282 React sites, 91.1% serve Brotli-compressed bundles (85% good LCP), 97.7% use Gzip (84% good LCP), and 41.3% include Zstandard-compressed scripts (76% good LCP).
74.6% of React & Next.js sites load subresources from CloudFront (89% good LCP) and 68.1% from Fastly (91%).
Across 9,282 React sites, 74.6% load subresources from Amazon CloudFront (89% good LCP, 1.3s median), 68.1% from Fastly (91% good LCP, 1.2s median), and 36.0% from Cloudflare (76% good LCP).
React apps exceeding 3 MB of images pass LCP 23 points less often than apps under 350 KB.
Across React sites, 38% transfer under 350 KB of images (91% good LCP, 1.2s median) compared with 14% transferring over 3 MB (68% good LCP, 2.0s median).
89% of React sites ship over 550 KB of JavaScript bundles.
Across React sites, 45% transfer 550 KB to 1 MB of JavaScript (96% INP pass rate, 79ms median) and 44% exceed 1 MB (90% pass rate, 102ms median).
68% of React sites load over 1.5 MB of unexecuted JavaScript code.
Across React sites, 68% have over 1.5 MB of unused JS on initial load (92% INP pass rate, 95ms median) and 26% have 850 KB to 1.5 MB (96%).
React sites under 40 KB of external CSS pass LCP 35 points more often than sites over 160 KB.
Across React sites, 55% ship under 40 KB of external CSS (91% good LCP, 1.3s median) and 22% ship over 160 KB (56% good LCP, 2.3s median).
React sites with over 600 KB of unused CSS pass LCP 28 points less often than sites under 140 KB.
Across React sites, 28% have under 140 KB of unused CSS (94% good LCP, 1.1s median) and 22% have over 600 KB of unused styles (66% good LCP, 2.0s median).
React sites loading 7+ font files pass LCP 9 points less often than sites with 1 to 3 fonts.
Across React sites, 27% load 1 to 3 font files (87% good LCP), 42% load 4 to 6 font files, and 30% load 7 or more font files (78% good LCP, 1.6s median).
81% of React apps load no audio or video streams on initial render.
Across React sites, 81% load no audio or video requests during initial navigation (84% LCP pass rate, 1.4s median) and 12% load under 500 KB (86%).
63% of React sites emit preload hints (92% good LCP vs 59% on dns-prefetch only).
Across React sites, 63% emit preload hints (92% good LCP, 1.2s median) compared with 9% emitting dns-prefetch only (59% good LCP, 2.3s median).
React sites with 6+ cookies pass LCP 27 points less often than sites with 3 to 5 cookies.
Across React sites, 43% set 3 to 5 cookies (92% good LCP, 1.2s median) and 20% set 6 or more cookies (65% good LCP, 2.0s median).
66% of React sites complete lab interactions under 65ms.
Across React sites, 40% complete synthetic interactions in under 35ms (93% field INP pass rate, 88ms median) and 26% finish in 35 to 65ms (92%), compared with 88% (107ms median) on the 14% over 110ms.
63% of React sites record under 130ms of Long Animation Frame work.
Across React sites, 36% record under 80ms of LoAF work (92% INP pass rate, 84ms median) and 27% record 80 to 130ms (93%), compared with 87% (110ms median) on the 17% exceeding 250ms.
React sites painting under 300ms in the lab pass field LCP 25 points more often than sites over 1,500ms.
Across React sites, 46% paint their hero element in under 300ms in the lab (95% field LCP pass rate, 1.1s median) compared with 26% taking over 1,500ms (70% pass rate, 1.8s median).
React sites reaching DOMComplete under 350ms pass field LCP 35 points more often than sites over 1,500ms.
Across React sites, 48% reach DOMComplete in under 350ms (93% field LCP pass rate, 1.1s median) and 18% take over 1,500ms (58% pass rate, 2.2s median).
69% of React sites spend over 450ms in scripting CPU.
Across React sites, 39% spend 450 to 1,200ms in scripting CPU (94% INP pass rate, 88ms median) and 30% exceed 1,200ms (89%, 106ms median), compared with 94% (78ms median) at 150 to 450ms.
TTFB is the largest LCP sub-part on 57% of React sites (79% good LCP vs 92% when load delay leads, 13 points apart).
Across React sites, TTFB is the largest LCP sub-part on 57% (79% LCP pass rate, 1.6s median) and load delay is the largest sub-part on 38% (92% pass rate, 1.2s median).
React hero images over 300 KB pass LCP 21 points less often than hero images under 40 KB.
Across React sites, 49% serve an LCP image under 40 KB (89% LCP pass rate, 1.3s median), 29% serve 40 to 100 KB (88%), and 9% exceed 300 KB (68% pass rate, 2.1s median).
React sites exceeding 5 MB of total transfer pass LCP 26 points less often than sites under 1.2 MB.
Across React sites, 14% transfer under 1.2 MB (95% LCP pass rate, 1.0s median), 42% transfer 1.2 to 2.5 MB (92%), and 20% exceed 5 MB (69% pass rate, 1.9s median).
framework standings
210,902 crawled sites (126,761 with phone Chrome field data), representing millions of real page loads, October 2026 edition. How we measured.