Script loading attributes on React sites

30.0% of audited sites (2,870) still execute render-blocking synchronous scripts and drop to 67% good LCP (2.0s median), compared to 85% good LCP on sites using async (96.8%) and 76% on ES modules (7.9%).

Field data PhoneDesktopAll Scope All sites October 2026 edition · Phone field outcomes · React sites only
React Scoped to 9,570 sites out of 210,902 analyzed (frameworks) Compare with all sites →

61.1% of React sites use nomodule fallback scripts script loading strategy, and 94% of those sites have a good LCP, against 84% of all React sites.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
1

Core Web Vitals pass rate

Sites with nomodule fallback scripts script loading strategy have a good LCP most often: 94%, against 84% of all React sites. Sites with render-blocking scripts script loading have it least often, at 67%.

SitesGood, needs improvement, poor LCPMedian
All React sites5,48884%1.4s
Legacy fallback (<script nomodule>) 61.1%3,19294%1.1s
Deferred (<script defer>) 89.0%4,83886%1.3s
Async (<script async>) 96.8%5,31385%1.4s
Dynamic / script-injected 92.1%4,96785%1.4s
Inline <script> blocks 99.6%5,45984%1.4s
ES module (<script type="module">) 7.9%49076%1.8s
Render-blocking (<script src>) 30.0%1,76667%2.0s
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
2

Script loading strategy usage

Inline scripts is the most used: 99.6% of React sites. Nomodule fallback scripts is 61.1% of React sites.

Sites using each option (sites can use more than one) 9,570 sites
Inline <script> blocks 99.6% Async (<script async>) 96.8% Dynamic / script-injected 92.1% Deferred (<script defer>) 89.0% Legacy fallback (<script nomodule>) 61.1%
Inline <script> blocks 99.6% Async (<script async>) 96.8% Dynamic / script-injected 92.1% Deferred (<script defer>) 89.0% Legacy fallback (<script nomodule>) 61.1% Render-blocking (<script src>) 30.0% ES module (<script type="module">) 7.9%
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
3

LCP phase breakdown by script loading attribute

Across the four LCP sub-parts in Chrome's field data, the largest gap between nomodule fallback scripts and render-blocking scripts sits in time to first byte (TTFB): 402 ms median for nomodule fallback scripts against 1041 ms for render-blocking scripts. Overall median field LCP is 1.1s for nomodule fallback scripts (TTFB 402 ms, load delay 448 ms, load duration 109 ms, render delay 150 ms) versus 2.0s for render-blocking scripts.

Median LCP phase breakdown (Chrome field p75) Load delay Median LCP
All React sites 4,169502 ms433 ms433 mslab 439 ms1.4s
ES module (<script type="module">) 381855 ms400 ms277 ms400 mslab 385 ms1.8s
Inline <script> blocks 4,149505 ms432 ms432 mslab 437 ms1.4s
Render-blocking (<script src>) 1,3331041 ms433 ms255 ms433 mslab 425 ms2.0s
Deferred (<script defer>) 3,703477 ms433 ms433 mslab 440 ms1.3s
Dynamic / script-injected 3,806492 ms434 ms434 mslab 441 ms1.4s
Async (<script async>) 4,051494 ms437 ms437 mslab 443 ms1.4s
Legacy fallback (<script nomodule>) 2,439402 ms448 ms448 mslab 456 ms1.1s
TTFB Resource load delay Resource load time Element render delay
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
4

Script loading strategy per platform

Wix sets the script loading strategy to nomodule fallback scripts on 100% of its sites, and 94% of Wix sites have a good LCP, against 84% of all sites. WordPress sets the script loading strategy to inline scripts on 100% of its sites, and 63% of WordPress sites have a good LCP.

PlatformScript loading strategy on its sitesGood LCP
All React sites 9,570 sitesInline <script> blocks 100%Async (<script async>) 97%Dynamic / script-injected 92%Deferred (<script defer>) 89%Legacy fallback (<script nomodule>) 61%Render-blocking (<script src>) 30%84%
Wix 5,824 sitesAsync (<script async>) 100%Legacy fallback (<script nomodule>) 100%Inline <script> blocks 100%Deferred (<script defer>) 100%Dynamic / script-injected 100%94%
WordPress 2,342 sitesInline <script> blocks 100%Async (<script async>) 93%Dynamic / script-injected 91%Render-blocking (<script src>) 88%Deferred (<script defer>) 71%ES module (<script type="module">) 20%63%
Inline <script> blocks Async (<script async>) Dynamic / script-injected Deferred (<script defer>) Legacy fallback (<script nomodule>) Render-blocking (<script src>) ES module (<script type="module">)
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
5

Script loading attributes or the platform

Does the platform explain the script loading strategy difference?

Almost every site with nomodule fallback scripts script loading strategy is a Wix site, and almost every Wix site has nomodule fallback scripts script loading strategy, so the data can't tell nomodule fallback scripts script loading strategy and Wix apart. On WordPress, 63% of sites with inline scripts script loading strategy have a good LCP, against 62% of WordPress sites with async scripts. Within WordPress, sites with inline scripts and async scripts have a good LCP about equally often.

How synchronous blocking <script> tags halt the HTML parser before LCP

When the HTML parser hits a synchronous <script src> tag without async, defer, or type="module", it must pause DOM construction, wait for the network download, and execute the script before painting. Across 2,870 sites (30.0%) with render-blocking scripts, good LCP drops to 67% (2.0s median). Sites loading scripts with async (96.8%), defer (89.0%), or type="module" (7.9%) reach 85%, 86%, and 76% good LCP.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
6

Understanding script loading attributes

Add defer or type="module" to all first-party application scripts and async to independent third-party tags so zero synchronous <script src> tags block the HTML parser in <head>. Across all audited sites, 30.0% ship render-blocking scripts (67% good LCP, 2.0s median).

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field dataBy Arjen Karel · corewebvitals.io/state-of-cwv
Related signals Cookies per site → Uses @import → DOM size → Images per page → By Arjen Karel · 9,570 crawled React sites (5,488 with phone Chrome field data, October 2026) · How we measured