Script loading attributes on React sites

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

Field data PhoneDesktopAll Scope All sites October 2026 edition · Desktop 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 92% of those sites have a good LCP, against 79% of all React sites.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop 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: 92%, against 79% of all React sites. Sites with render-blocking scripts script loading have it least often, at 69%.

SitesGood, needs improvement, poor LCPMedian
All React sites1,97979%1.5s
Legacy fallback (<script nomodule>) 61.1%76292%1.2s
Deferred (<script defer>) 89.0%1,61980%1.5s
Async (<script async>) 96.8%1,90479%1.5s
Inline <script> blocks 99.6%1,97479%1.5s
Dynamic / script-injected 92.1%1,74879%1.5s
ES module (<script type="module">) 7.9%32576%1.7s
Render-blocking (<script src>) 30.0%99069%1.9s
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop 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 · 1,979 with desktop 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): 349 ms median for nomodule fallback scripts against 1012 ms for render-blocking scripts. Overall median field LCP is 1.2s for nomodule fallback scripts (TTFB 349 ms, load delay 478 ms, load duration 256 ms, render delay 140 ms) versus 1.9s for render-blocking scripts.

Median LCP phase breakdown (Chrome field p75) Load delay Median LCP
All React sites 1,324703 ms413 ms192 ms413 mslab 429 ms1.6s
ES module (<script type="module">) 245838 ms316 ms255 ms316 mslab 364 ms1.7s
Render-blocking (<script src>) 7431012 ms359 ms240 ms359 mslab 398 ms1.9s
Inline <script> blocks 1,322703 ms413 ms192 ms413 mslab 429 ms1.6s
Async (<script async>) 1,278707 ms414 ms192 ms414 mslab 431 ms1.6s
Dynamic / script-injected 1,148719 ms418 ms418 mslab 434 ms1.6s
Deferred (<script defer>) 1,060696 ms421 ms421 mslab 424 ms1.5s
Legacy fallback (<script nomodule>) 398349 ms478 ms256 ms478 mslab 469 ms1.2s
TTFB Resource load delay Resource load time Element render delay
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop 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 92% of Wix sites have a good LCP, against 79% of all sites. WordPress sets the script loading strategy to inline scripts on 100% of its sites, and 66% 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%79%
Wix 5,824 sitesInline <script> blocks 100%Async (<script async>) 100%Legacy fallback (<script nomodule>) 100%Deferred (<script defer>) 100%Dynamic / script-injected 100%92%
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%66%
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 · 1,979 with desktop 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, 66% of sites with inline scripts script loading strategy have a good LCP, against 66% 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 69% (1.9s median). Sites loading scripts with async (96.8%), defer (89.0%), or type="module" (7.9%) reach 79%, 80%, and 76% good LCP.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop 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 (69% good LCP, 1.9s median).

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 1,979 with desktop 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 (1,979 with desktop Chrome field data, October 2026) · How we measured