Explore 9,570 React websites

Pivot to any metric, technology, or signal in the dataset. Charts pick themselves. Prose writes itself.

Field data PhoneDesktopAll Scope All sites October 2026 edition · Phone field outcomes · React sites only
MCP Query the State of CWV directly from your AI!
https://www.corewebvitals.io/api/state-of-cwv/mcp Setup
Metric & Architecture Takeaways

What moves Core Web Vitals on React & Next.js

Field data findings across React & Next.js sites from our metric deep dives.

LCP image loading 5,497 sites
19.6% lazy-load the LCP image

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".

Read the LCP image loading study →
LCP resource discovery 9,109 sites
87% vs 67% good LCP (HTML img vs CSS background)

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).

Read the LCP resource discovery study →
Font-display 9,246 sites
93% vs 72% good LCP (all swap vs mixed rules)

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.

Read the font-display study →
HTML document protocol 9,282 sites
91% vs 66% good LCP (HTTP/3 vs HTTP/2)

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).

Read the HTML document protocol study →
Main-thread yielding 9,282 sites
96% vs 85% good INP (scheduler.yield vs requestIdleCallback)

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).

Read the main-thread yielding study →
LCP image format 6,642 sites
60.3% serve AVIF on the LCP image (94% good LCP)

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.

Read the LCP image format study →
Speculation rules 9,282 sites
60.1% use eager speculation rules

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.

Read the speculation rules study →
LCP priority hints 9,109 sites
92% vs 81% good LCP (highprio vs none)

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).

Read the LCP priority hints study →
As the LCP element 9,109 sites
88% vs 67% good LCP (<img> vs background-image)

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).

Read the as the LCP element study →
LCP image hosting 6,931 sites
72.1% React sites using external image CDNs

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).

Read the LCP image hosting study →
Responsive LCP image markup 9,109 sites
89% vs 82% good LCP (srcset vs non-responsive)

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).

Read the responsive LCP image markup study →
Speculation rules 9,282 sites
77.2% React sites with prefetch posture

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.

Read the speculation rules study →
HTML compression 9,282 sites
91% vs 67% good LCP (Brotli vs gzip)

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).

Read the HTML compression study →
An HTML edge CDN 9,282 sites
95% vs 77% good LCP (Fastly edge vs origin)

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).

Read the an HTML edge CDN study →
As their CMS 7,993 sites
73% React all-three CWV pass rate

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.

Open React & Next.js Explorer Hub →
CSS @import rules 9,282 sites
85% vs 74% good LCP (no @import vs @import)

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).

Read the CSS @import rules study →
Text compression coverage 9,282 sites
42.4% React sites with all text compressed

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).

Read the text compression coverage study →
ETag cache validation 9,282 sites
84% vs 72% good LCP (ETag vs no ETag)

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).

Read the ETag cache validation study →
Last-Modified cache validation 9,282 sites
99.6% React sites with Last-Modified

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).

Read the Last-Modified cache validation study →
Image loading strategies 9,274 sites
33.1% lazy-load an image inside the viewport

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".

Read the image loading strategies study →
Responsive image markup 9,216 sites
89% vs 84% good LCP (<picture> vs fixed <img>)

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).

Read the responsive image markup study →
Image dimension sizing 9,216 sites
93% vs 86% good CLS (width/height vs CSS aspect-ratio)

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).

Read the image dimension sizing study →
Image fetchpriority hints 9,216 sites
79.8% use fetchpriority="high" (87% good LCP)

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.

Read the image fetchpriority hints study →
Iframe loading 5,148 sites
82% vs 71% good LCP (default vs lazy embeds)

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).

Read the iframe loading study →
CSS rendering hints 8,797 sites
77.3% scroll-driven CSS (95% good INP)

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.

Read the CSS rendering hints study →
Subresource network protocols 9,282 sites
92.1% negotiate HTTP/3 (85% good LCP)

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).

Read the subresource network protocols study →
HTTP cache TTL tiers 9,282 sites
70.8% immutable hashed chunks (90% 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.

Read the HTTP cache TTL tiers study →
JavaScript frameworks 9,282 sites
73% vs 54% all 3 CWV pass (all React vs React + jQuery)

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).

Read the JavaScript frameworks study →
Analytics providers 4,068 sites
96.6% / 5.2% GA4 (91% INP) / Matomo (93% INP)

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).

Read the analytics providers study →
Ad networks 894 sites
58% vs 45% all 3 CWV pass (AdSense vs GPT)

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%).

Read the ad networks study →
Tag managers 3,659 sites
91% vs 65% good INP (GTM vs Tealium iQ)

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).

Read the tag managers study →
Performance optimization plugins 597 sites
69% / 67% all 3 CWV pass on hybrid WordPress + React sites

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%).

Read the performance optimization plugins study →
Third-party technology categories 9,280 sites
84% vs 62% all 3 CWV pass (RUM vs tag managers)

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).

Read the third-party technology categories study →
DOM element count 9,282 sites
95% vs 88% good INP (800-1,499 vs 1,500+ nodes)

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).

Read the DOM element count study →
Maximum DOM depth 9,282 sites
42.6% / 40.3% 21-31 levels / 32+ levels on React

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).

Read the maximum DOM depth study →
Initial HTML document size 9,282 sites
67.8% React sites over 75 KB HTML (90% LCP)

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).

Read the initial HTML document size study →
Preloaded font count 9,282 sites
94.7% / 3.1% 0 explicit link preloads / 1-2 preloads

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).

Read the preloaded font count study →
Iframe count per page 9,282 sites
92% vs 84% good CLS (0 iframes vs 4+ iframes)

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).

Read the iframe count per page study →
Lab Total Blocking Time (TBT) 9,282 sites
95% vs 88% good INP (0ms vs >600ms TBT)

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).

Read the lab Total Blocking Time (TBT) study →
CLS shift concentration 3,771 sites
90% vs 81% good CLS (single shift vs multi-shift)

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).

Read the CLS shift concentration study →
Layout shift count 9,282 sites
97% vs 70% good CLS (0 shifts vs 3-5 shifts)

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).

Read the layout shift count study →
Largest single layout shift score 3,867 sites
95% vs 67% good CLS (<0.01 vs >0.25 largest shift)

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).

Read the largest single layout shift score study →
Distinct network domain count 9,282 sites
80% vs 62% all 3 CWV pass (8-14 vs 15+ domains)

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).

Read the distinct network domain count study →
Third-party request share 9,282 sites
94% vs 88% good INP (25-50% vs >50% 3P requests)

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).

Read the third-party request share study →
Cacheable resource share 9,282 sites
87% vs 64% good LCP (80%+ vs <20% cacheable)

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).

Read the cacheable resource share study →
Third-party provider count 9,282 sites
84% vs 49% all 3 CWV pass (0-1 vs 9+ providers)

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%).

Read the third-party provider count study →
Page image format mix 9,274 sites
93% vs 77% good LCP (with AVIF vs with PNG)

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).

Read the page image format mix study →
Image hosting origin 9,274 sites
85% vs 68% good LCP (dedicated image CDN vs origin)

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).

Read the image hosting origin study →
Script loading strategy 9,282 sites
86% vs 67% good LCP (deferred vs blocking scripts)

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).

Read the script loading strategy study →
Script origin (first-party vs third-party) 9,282 sites
100.0% / 94.8% first-party / third-party scripts on React

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).

Read the script origin (first-party vs third-party) study →
Script initiator type 9,282 sites
99.6% / 95.1% parser / script-injected on React

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).

Read the script initiator type study →
Stylesheet loading and placement 9,281 sites
84% vs 62% good LCP (inline CSS vs <body> CSS)

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).

Read the stylesheet loading and placement study →
Stylesheet origin (first-party vs third-party) 9,281 sites
84% vs 78% good LCP (first-party vs third-party CSS)

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).

Read the stylesheet origin (first-party vs third-party) study →
Stylesheet initiator type 9,281 sites
84% vs 70% good LCP (inline CSS vs external parser CSS)

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).

Read the stylesheet initiator type study →
Web font format 9,147 sites
84% vs 60% good LCP (WOFF2 vs raw TTF on React)

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).

Read the web font format study →
Web font hosting source 9,147 sites
89% vs 65% good LCP (CDN font host vs Google Fonts)

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).

Read the web font hosting source study →
Video and audio media source 1,803 sites
91% vs 62% good LCP (external media CDN vs self-hosted)

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).

Read the video and audio media source study →
Main-thread scheduling API usage 9,276 sites
96% vs 91% good INP (scheduler.yield vs setInterval)

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).

Read the main-thread scheduling API usage study →
Long Animation Frame (LoAF) script invoker type 5,701 sites
60.0% / 44.3% event listener / classic script LoAF on React

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%).

Read the Long Animation Frame (LoAF) script invoker type study →
Network resource type mix 9,282 sites
91.6% / 98.5% fetch() API / web fonts on React sites

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).

Read the network resource type mix study →
Subresource HTTP compression 9,282 sites
91.1% / 97.7% Brotli / Gzip subresources on React

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).

Read the subresource HTTP compression study →
Subresource CDN distribution 9,282 sites
91% / 89% good LCP (Fastly / CloudFront on React)

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).

Read the subresource CDN distribution study →
Total image payload 9,282 sites
91% vs 68% good LCP (< 350 KB vs > 3 MB)

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).

Explore React image payload data →
Total JavaScript payload 9,282 sites
89% sites shipping > 550 KB of JS

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).

Explore React script payload data →
Unused JavaScript bytes 9,282 sites
68% sites with > 1.5 MB unused JS

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%).

Explore React unused JS data →
Total CSS payload 6,014 sites
91% vs 56% good LCP (< 40 KB vs > 160 KB)

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).

Explore React CSS payload data →
Unused CSS bytes 9,279 sites
94% vs 66% good LCP (< 140 KB vs > 600 KB unused)

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).

Explore React unused CSS data →
Web font file count 9,282 sites
87% vs 78% good LCP (1-3 fonts vs 7+ fonts)

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).

Explore React font count data →
Audio and video payload 9,282 sites
81% sites with no initial media streams

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%).

Explore React media payload data →
Connection and preload hints 9,282 sites
92% vs 59% good LCP (preload vs dns-prefetch)

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).

Explore React resource hints data →
Cookie count 9,282 sites
92% vs 65% good LCP (3-5 cookies vs 6+ cookies)

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).

Explore React cookie count data →
Synthetic interaction sub-parts 6,169 sites
66% sites under 65ms lab interaction

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.

Explore React interaction sub-parts →
Long Animation Frame work 7,348 sites
63% sites under 130ms LoAF work

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.

Explore React LoAF breakdown →
Synthetic paint milestones 9,273 sites
95% vs 70% good field LCP (< 300ms vs > 1.5s lab)

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).

Explore React lab paint data →
Document lifecycle milestones 9,282 sites
93% vs 58% good LCP (< 350ms vs > 1.5s DOMComplete)

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).

Explore React document lifecycle data →
Main-thread CPU breakdown 9,282 sites
69% sites > 450ms scripting CPU

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.

Explore React main-thread CPU data →
LCP sub-part breakdown 6,559 sites
92% vs 79% good LCP (load delay vs TTFB dominant)

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).

Explore React LCP sub-part data →
LCP image byte weight 6,193 sites
89% vs 68% good LCP (< 40 KB vs > 300 KB hero)

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).

Explore React hero image size data →
Total page weight 9,282 sites
95% vs 69% good LCP (< 1.2 MB vs > 5 MB page)

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).

Explore React total page weight data →

Hot questions this edition

Or browse the data

120 signals across 13 sections. Use the tree on the left or the search box.

  • Headline metrics 5 signals LCP, INP, CLS…
  • Tech stack 3 signals CDN (7), CMS (12), Frameworks (11)…
  • Third parties 27 signals JS libraries (26), Analytics (20), CMS (17)…
  • Main thread 1 signals Top INP blockers (25)…
  • LCP Image 8 signals LCP discovery, LCP element type, LCP image format…
  • LCP Timing 1 signals LCP phase breakdown…
  • Page resources 36 signals Bytes by resource type, Compression mix, Cookies per site…
  • INP 6 signals Blocking frame breakdown, CSS hints, INP phase breakdown…
  • CLS 5 signals Largest single shift, Layout shift count, Shift concentration…
  • CDN & Delivery 12 signals Cache strategy mix, Cacheable responses, Connection hints…
  • Synthetic (lab) 4 signals Document lifecycle (lab), Lab paint timeline, Main-thread CPU (lab)…
  • Speculation rules 2 signals Speculation eagerness, Speculation posture…
  • Tech stack 10 signals Ad networks on page, Analytics on page, CMS…

210,902 crawled sites with Chrome field data, representing millions of real page loads, October 2026 edition. How we measured.