Script loading attributes on React sites

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

Field data PhoneDesktopAll Scope All sites October 2026 edition · All devices 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 85% of all React sites.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 9,110 with all devices 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 85% of all React sites. Sites with render-blocking scripts script loading have it least often, at 65%.

SitesGood, needs improvement, poor LCPMedian
All React sites9,11085%1.4s
Legacy fallback (<script nomodule>) 61.1%5,53994%1.2s
Deferred (<script defer>) 89.0%8,10086%1.4s
Async (<script async>) 96.8%8,82485%1.4s
Dynamic / script-injected 92.1%8,38785%1.4s
Inline <script> blocks 99.6%9,07685%1.4s
ES module (<script type="module">) 7.9%72775%1.8s
Render-blocking (<script src>) 30.0%2,77165%2.0s
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 9,110 with all devices 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 · 9,110 with all devices 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): 416 ms median for nomodule fallback scripts against 1082 ms for render-blocking scripts. Overall median field LCP is 1.2s for nomodule fallback scripts (TTFB 416 ms, load delay 457 ms, load duration 137 ms, render delay 151 ms) versus 2.1s for render-blocking scripts.

Median LCP phase breakdown (Chrome field p75) Load delay Median LCP
All React sites 6,740516 ms439 ms439 mslab 439 ms1.4s
ES module (<script type="module">) 546829 ms401 ms262 ms401 mslab 401 ms1.8s
Render-blocking (<script src>) 2,0641082 ms418 ms253 ms418 mslab 418 ms2.1s
Inline <script> blocks 6,720518 ms439 ms439 mslab 439 ms1.4s
Deferred (<script defer>) 6,033491 ms442 ms442 mslab 442 ms1.4s
Dynamic / script-injected 6,240505 ms442 ms442 mslab 442 ms1.4s
Async (<script async>) 6,557505 ms443 ms443 mslab 443 ms1.4s
Legacy fallback (<script nomodule>) 4,091416 ms457 ms457 mslab 457 ms1.2s
TTFB Resource load delay Resource load time Element render delay
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 9,110 with all devices 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 85% of all sites. WordPress sets the script loading strategy to inline scripts on 100% of its sites, and 61% 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%85%
Wix 5,824 sitesInline <script> blocks 100%Legacy fallback (<script nomodule>) 100%Async (<script async>) 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%61%
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 · 9,110 with all devices 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, 61% of sites with inline scripts script loading strategy have a good LCP, against 60% 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 65% (2.0s median). Sites loading scripts with async (96.8%), defer (89.0%), or type="module" (7.9%) reach 85%, 86%, and 75% good LCP.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 9,110 with all devices 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 (65% good LCP, 2.0s median).

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