Shopify script loading attributes and the Core Web Vitals

29.9% of audited sites (2,463) still execute render-blocking synchronous scripts and drop to 92% good LCP (1.5s median), compared to 95% good LCP on sites using async (99.9%) and 95% on ES modules (99.5%).

Field data PhoneDesktopAll Scope All sites October 2026 edition · Phone field outcomes · Shopify sites only
Shopify Scoped to 8,248 sites out of 203,892 analyzed (cms) Compare with all sites →

99.5% of Shopify sites use ES module scripts script loading strategy, and 95% of those sites have a good LCP, against 95% of all Shopify sites.

The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy Arjen Karel · corewebvitals.io/state-of-cwv
1

Core Web Vitals pass rate

Sites with ES module scripts script loading strategy have a good LCP most often: 95%, against 95% of all Shopify sites. Sites with dynamically injected scripts script loading have it least often, at 92%.

SitesGood, needs improvement, poor LCPMedian
All Shopify sites5,82595%1.4s
ES module (<script type="module">) 99.5%5,79795%1.4s
Deferred (<script defer>) 99.6%5,80395%1.4s
Async (<script async>) 99.9%5,82395%1.4s
Inline <script> blocks 99.9%5,82295%1.4s
Render-blocking (<script src>) 29.9%1,85092%1.5s
Dynamic / script-injected 32.1%1,95592%1.5s
Legacy fallback (<script nomodule>) 0.3%1867%1.7s
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy Arjen Karel · corewebvitals.io/state-of-cwv
2

Script loading strategy usage

Inline scripts is the most used: 99.9% of Shopify sites. ES module scripts is 99.5% of Shopify sites.

Sites using each option (sites can use more than one) 8,243 sites
Inline <script> blocks 99.9% Async (<script async>) 99.9% Deferred (<script defer>) 99.6% ES module (<script type="module">) 99.5%
Inline <script> blocks 99.9% Async (<script async>) 99.9% Deferred (<script defer>) 99.6% ES module (<script type="module">) 99.5% Dynamic / script-injected 32.1% Render-blocking (<script src>) 29.9% Legacy fallback (<script nomodule>) 0.3%
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy 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 ES module scripts and dynamically injected scripts sits in resource load delay: 590 ms median for ES module scripts against 690 ms for dynamically injected scripts. Overall median field LCP is 1.4s for ES module scripts (TTFB 401 ms, load delay 590 ms, load duration 206 ms, render delay 312 ms) versus 1.5s for dynamically injected scripts.

Median LCP phase breakdown (Chrome field p75) Load delay Median LCP
Shopify sites with script loading strategy 5,046402 ms590 ms206 ms312 ms590 mslab 596 ms1.4s
Deferred (<script defer>) 5,027401 ms590 ms206 ms312 ms590 mslab 596 ms1.4s
ES module (<script type="module">) 5,026401 ms590 ms206 ms312 ms590 mslab 596 ms1.4s
Inline <script> blocks 5,045402 ms590 ms206 ms312 ms590 mslab 596 ms1.4s
Async (<script async>) 5,046402 ms590 ms206 ms312 ms590 mslab 596 ms1.4s
Dynamic / script-injected 1,683416 ms690 ms199 ms361 ms690 mslab 691 ms1.5s
Render-blocking (<script src>) 1,646410 ms717 ms193 ms378 ms717 mslab 724 ms1.6s
TTFB Resource load delay Resource load time Element render delay
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy Arjen Karel · corewebvitals.io/state-of-cwv
4

Script loading strategy per framework

Vue sets the script loading strategy to ES module scripts on 100% of its sites, and 94% of Vue sites have a good LCP, against 95% of all sites. jQuery sets the script loading strategy to inline scripts on 100% of its sites, and 93% of jQuery sites have a good LCP.

FrameworkScript loading strategy on its sitesGood LCP
Shopify sites with script loading strategy 8,243 sitesInline <script> blocks 100%Async (<script async>) 100%Deferred (<script defer>) 100%ES module (<script type="module">) 100%Dynamic / script-injected 32%Render-blocking (<script src>) 30%95%
Vue 933 sitesInline <script> blocks 100%ES module (<script type="module">) 100%Deferred (<script defer>) 100%Async (<script async>) 100%Dynamic / script-injected 38%Render-blocking (<script src>) 34%94%
jQuery 3,150 sitesInline <script> blocks 100%Async (<script async>) 100%Deferred (<script defer>) 100%ES module (<script type="module">) 99%Render-blocking (<script src>) 51%Dynamic / script-injected 49%93%
Inline <script> blocks Async (<script async>) Deferred (<script defer>) ES module (<script type="module">) Dynamic / script-injected Render-blocking (<script src>) Legacy fallback (<script nomodule>)
The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy Arjen Karel · corewebvitals.io/state-of-cwv
5

Script loading attributes or the framework

Does the framework explain the script loading strategy difference?

On jQuery, 93% of sites with ES module scripts script loading strategy have a good LCP, against 93% of jQuery sites with inline scripts. Within jQuery, sites with ES module scripts and inline scripts have a good LCP about equally often. On Vue, 94% of sites with ES module scripts script loading strategy have a good LCP, against 94% of Vue sites with inline scripts. Within Vue, sites with ES module scripts and inline 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,463 sites (29.9%) with render-blocking scripts, good LCP drops to 92% (1.5s median). Sites loading scripts with async (99.9%), defer (99.6%), or type="module" (99.5%) reach 95%, 95%, and 95% good LCP.

The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy 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, 29.9% ship render-blocking scripts (92% good LCP, 1.5s median).

The State of Web Vitals · October 2026 · Shopify: 8,246 crawled sites · 5,825 with phone field data · 8,243 sites with script loading strategyBy Arjen Karel · corewebvitals.io/state-of-cwv
Related signals Cookies per site → Uses @import → DOM size → Images per page → By Arjen Karel · 8,246 crawled Shopify sites (5,825 with phone Chrome field data, 8,243 sites with script loading strategy, October 2026) · How we measured