LCP image loading on React sites

No loading attribute, loading="lazy", or loading="eager" on the LCP image: how many sites use each, where the 43 ms lazy-load delay shows up, and whether fetchpriority="high" overrides it.

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 →

Of the React sites whose LCP element is an <img>, 19.3% put loading="lazy" on that image. 73.6% leave loading at the browser default and 7.1% set loading="eager". Across React sites, 88% with default loading and 87% with a lazy-loaded LCP image have a good LCP. In Chrome's field data, loading="lazy" adds 43 ms of resource load delay before the image request starts (467 ms against 424 ms).

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
1

LCP pass rate

Sites with no loading attribute have a good LCP most often at 88%, followed by loading="eager" at 87% and loading="lazy" at 87%. Within React, default loading and loading="lazy" have a good LCP about equally often.

SitesGood, needs improvement, poor LCPMedian
All React sites5,48884%1.4s
No loading attribute (auto) 73.6%2,41988%1.3s
loading="eager" 7.1%23387%1.4s
loading="lazy" 19.3%64487%1.3s
GoodNeeds improvementPoorSites: with Chrome field data
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
2

LCP image loading usage

An <img> element is the Largest Contentful Paint element on 60.6% of audited React sites, ahead of CSS background images (14.6%) and text blocks (22.7%). Among the 5,689 React sites with an <img> LCP element, 73.6% omit the loading attribute, 19.3% set loading="lazy", and 7.1% set loading="eager".

LCP element type across all audited sites 9,390 sites
<img> element 60.6%Text block 22.7%CSS background-image 14.6%
Sites with an <img> LCP element by loading attribute 5,689 sites
No loading attribute (auto) 73.6% loading="lazy" 19.3%
No loading attribute (auto) 73.6% loading="lazy" 19.3% loading="eager" 7.1%
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
3

Where lazy LCP images lose time: the four LCP phases

Putting loading="lazy" on the LCP image raises median resource load delay from 424 ms to 467 ms in Chrome's field data. That is a 43 ms wait before the browser starts downloading the image. Without loading="lazy", Chrome's preload scanner queues the <img> as soon as it reads the HTML. With loading="lazy", Chrome holds the request back until layout confirms the image sits in the viewport. Sites with loading="eager" show a 444 ms load delay in the field because many of them also preload other assets or load the hero image from a script.

Median LCP phase breakdown (Chrome field p75) Load delay Median LCP
React sites with an <img> LCP element by loading attribute 2,574459 ms435 ms174 ms435 mslab 444 ms1.3s
No loading attribute (auto) 1,892458 ms424 ms173 ms424 mslab 432 ms1.3s
loading="eager" 186457 ms444 ms190 ms444 mslab 461 ms1.4s
loading="lazy" 496469 ms467 ms170 ms467 mslab 475 ms1.3s
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 data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
4

LCP loading combined with fetchpriority and preload

Adding fetchpriority="high" to a lazy-loaded LCP image does not fix the lazy-load delay. The 90 sites with both attributes still wait 580 ms before the image request starts, and 94% have a good LCP. In Chromium, ShouldDeferImageLoad runs before resource priority is assigned, so the request stays deferred until layout. Pairing loading="lazy" with a <link rel="preload"> tag cuts the field load delay to 212 ms because the preload tag starts the fetch right away. Removing loading="lazy" and adding fetchpriority="high" on a normal <img> reaches a 437 ms load delay without duplicate markup.

loading attribute No priority hint fetchpriority="high" <link rel="preload"> <link rel="preconnect">
No loading attribute (auto)
76% 279 ms delay 779 sites
92% 437 ms delay 3,194 sites
few sites
89% 570 ms delay 199 sites
loading="lazy"
87% 454 ms delay 990 sites
94% 580 ms delay 90 sites
few sites few sites
loading="eager"
89% 463 ms delay 325 sites
85% 282 ms delay 71 sites
few sites few sites
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
5

LCP image loading per platform

Wix puts loading="lazy" on the LCP image on 22% of its sites, and 94% of Wix sites have a good LCP. WordPress leaves the LCP image at the browser default on 77% of its sites and sets loading="lazy" on 18%, and 63% of WordPress sites have a good LCP.

PlatformLCP image loading on its sitesGood LCP
React sites with an <img> LCP element by loading attribute 5,689 sitesNo loading attribute (auto) 74%loading="lazy" 19%84%
Wix 4,113 sitesNo loading attribute (auto) 71%loading="lazy" 22%94%
WordPress 853 sitesNo loading attribute (auto) 77%loading="lazy" 18%63%
No loading attribute (auto) loading="lazy" loading="eager"
The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
6

LCP image loading or the platform

Does the platform explain the loading="lazy" pass rate?

On Wix, 94% of sites with default loading have a good LCP, against 95% of Wix sites with loading="lazy" on the LCP image. Within Wix, sites with default loading and loading="lazy" have a good LCP about equally often. On WordPress, 68% of sites with default loading have a good LCP, against 57% of WordPress sites with loading="lazy" on the LCP image. Within WordPress, sites with default loading and loading="lazy" have a good LCP about equally often.

Why loading="lazy" holds back the preload scanner

Chrome's HTML preload scanner finds <img> tags in the first bytes of the document. It starts fetching default and eager images right away, before stylesheets and blocking scripts finish downloading. When an <img> carries loading="lazy", Chromium's ShouldDeferImageLoad check stops the preload scanner from queuing the request. The image waits until CSS downloads, the render tree builds, and layout confirms the image sits in the viewport. WordPress core has skipped loading="lazy" on the first three content images since version 6.3. Theme templates and page builders that hardcode loading="lazy" on hero banners still pay the full layout wait.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
7

Understanding LCP image loading

Leave the loading attribute off the LCP image, or set loading="eager", and pair it with fetchpriority="high". Never put loading="lazy" on an image in the initial viewport. In Chrome's field data, loading="lazy" adds 43 ms of resource load delay (467 ms against 424 ms for default loading). Adding fetchpriority="high" on top of loading="lazy" does not fix that delay, because Chromium decides whether to defer the image before it applies resource priority. Omitting the loading attribute and setting loading="eager" do the exact same thing in the browser: both fetch the image right away. Omitting the attribute is cleaner, and fetchpriority="high" raises the network priority from Low to High before layout runs.

The State of Web Vitals · October 2026 · React: 9,570 crawled sites · 5,488 with phone field data · 5,689 sites with an <img> LCP element by loading attributeBy Arjen Karel · corewebvitals.io/state-of-cwv
Related signals LCP origin → LCP image format → LCP image size → LCP element type → By Arjen Karel · 9,570 crawled React sites (5,488 with phone Chrome field data, 5,689 sites with an <img> LCP element by loading attribute, October 2026) · How we measured