The median site with poor LCP spends 1.3 seconds on resource load delay—time wasted before even starting to download the LCP image.
Resource load delay is the time between when the browser receives the HTML and when it starts downloading the LCP resource. This happens when:
Why it hurts LCP: Every millisecond spent waiting to start downloading is a millisecond added to LCP.
Look at the waterfall chart. If the LCP image request starts late (far to the right), you have resource load delay.
Tell the browser to start downloading the LCP image immediately.
<head>
<!-- Preload LCP image -->
<link
rel="preload"
href="/images/hero.webp"
as="image"
fetchpriority="high"
>
</head>
For responsive images:
<link
rel="preload"
as="image"
href="/images/hero.webp"
imagesrcset="/images/hero-400.webp 400w, /images/hero-800.webp 800w"
imagesizes="100vw"
fetchpriority="high"
>
Tell the browser this resource is critical.
<img
src="/images/hero.webp"
fetchpriority="high"
alt="Hero image"
>
The fetchpriority attribute has grown from 0.03% adoption in 2022 to 15% in 2024.
If your LCP image URL is set by JavaScript or CSS, move it to HTML.
<!-- Before: image URL in CSS (discovered late) -->
<div class="hero" style="background-image: url(hero.webp)"></div>
<!-- After: image in HTML (discovered immediately) -->
<img src="hero.webp" class="hero" alt="Hero">
// Before: image URL from JavaScript (discovered late)
useEffect(() => {
setHeroImage('/hero.webp')
}, [])
// After: image in initial render
<img src="/hero.webp" alt="Hero" />
Never use loading="lazy" on your LCP image.
<!-- Wrong: lazy-loading LCP image -->
<img src="hero.webp" loading="lazy" alt="Hero">
<!-- Correct: eager loading (default) with high priority -->
<img src="hero.webp" loading="eager" fetchpriority="high" alt="Hero">
About 10% of LCP images are incorrectly lazy-loaded.
If your LCP resource depends on other resources loading first, eliminate the chain.
<!-- Before: chain of dependencies -->
<!-- HTML → CSS → background-image URL → image download -->
<!-- After: direct preload -->
<link rel="preload" href="hero.webp" as="image" fetchpriority="high">
priority prop on next/image:import Image from 'next/image'
<Image
src="/hero.jpg"
priority // Adds preload + fetchpriority
alt="Hero"
/>
preload prop on NuxtImg:<NuxtImg
src="/hero.jpg"
preload
alt="Hero"
/>
useHead for manual preload:useHead({
link: [{ rel: 'preload', href: '/hero.webp', as: 'image', fetchpriority: 'high' }]
})
After implementing:
Expected improvement: Eliminating 1.3 seconds of resource load delay can improve LCP by 1.3 seconds.
as attribute or missing crossorigin for fonts causes double downloads.Often appears alongside:
Resource load delay varies by page. Unlighthouse scans your entire site and identifies pages where LCP resources are discovered late.