Performance

perf/lcp-image-not-lazy

The image most likely to be the Largest Contentful Paint (hero, high priority) is never loading="lazy".

moderatestaticfe-core-web-vitals

Why

A lazy image is requested only after layout shows it is in the viewport, so the largest image on screen starts downloading late and LCP rises by hundreds of milliseconds, often past the 2.5 s "good" line. Copying loading="lazy" onto every image is the usual cause.

Fix

Remove loading="lazy" from the hero or first large image and add fetchpriority="high" (one or two images per page at most). Keep loading="lazy" for images further down. In frameworks: Next.js <Image preload> or fetchPriority="high" (priority is deprecated in Next.js 16), Angular ngSrc with priority, Nuxt <NuxtImg preload>.

Examples

<!-- bad -->
<img class="hero" src="hero.avif" alt="…" width="1600" height="900" loading="lazy">
<!-- good -->
<img class="hero" src="hero.avif" alt="…" width="1600" height="900" fetchpriority="high">

Sources

Facts

Id
perf/lcp-image-not-lazy
Severity
moderate
Check
static checked in the source by audit
Applies to
html angular vue svelte astro jsx
Taught by the skill
fe-core-web-vitals Core Web Vitals
Since version
0.1.0

Rule file on GitHub

Read it in the terminal

npx github:dawidolko/frontend-skills explain perf/lcp-image-not-lazy