View contents
LCP Image Lazy Loading: The Critical Performance Mistake
Introduction
Lazy loading images is widely considered a best practice for web performance. It defers loading off-screen images until users scroll to them, saving bandwidth and speeding up initial page load. However, there’s one critical exception: never lazy load your LCP image.
The UXR SEO Analyzer flags this as a critical error because adding loading="lazy" to your Largest Contentful Paint image directly harms your Core Web Vitals score and can negatively impact SEO rankings.
What Is the LCP Image?
The Largest Contentful Paint (LCP) is a Core Web Vital that measures how long it takes for the largest visible element to render on screen. In most cases, this is an image—typically a hero image, featured product photo, or banner.
Common LCP elements:
- Hero images at the top of the page
- Featured product images on e-commerce pages
- Banner images
- Large headshots or profile photos
- Background images (when visible as foreground content)
Google considers LCP “good” when it occurs within 2.5 seconds of page load.
The Problem: Lazy Loading Delays LCP
When you add loading="lazy" to an image, you’re telling the browser:
“Don’t prioritize this image. Wait until the user might need it.”
For LCP images, this creates a devastating sequence:
Without lazy loading (CORRECT):
┌──────────────────────────────────────────────────────────────┐
│ 0.0s: Browser starts loading HTML │
│ 0.1s: Browser discovers hero image, starts downloading │
│ 0.8s: Hero image loads → LCP complete ✓ │
└──────────────────────────────────────────────────────────────┘
With lazy loading (WRONG):
┌──────────────────────────────────────────────────────────────┐
│ 0.0s: Browser starts loading HTML │
│ 0.1s: Browser sees loading="lazy", SKIPS hero image │
│ 0.5s: JavaScript/CSS loads │
│ 0.7s: Intersection Observer triggers (image in viewport) │
│ 0.8s: Browser FINALLY starts downloading hero image │
│ 1.5s: Hero image loads → LCP complete ✗ (almost 2x slower!) │
└──────────────────────────────────────────────────────────────┘
Why This Happens
Native lazy loading (loading="lazy") uses the browser’s Intersection Observer API to detect when an image enters or approaches the viewport. The problem is:
- LCP images are already in the viewport on initial load
- The browser still has to wait for JavaScript to determine this
- This creates an artificial delay in loading your most important image
Even though the image is immediately visible, the browser doesn’t know that until it runs the lazy loading logic—by which time, it’s already behind.
How to Identify Your LCP Image
Using Chrome DevTools
- Open DevTools (F12)
- Go to Performance tab
- Record a page load
- Look for the LCP marker in the timeline
- Click it to see which element triggered LCP
Using Lighthouse
- Run a Lighthouse audit
- Check the Largest Contentful Paint element in the Performance section
- It shows exactly which element is your LCP
Using PageSpeed Insights
- Enter your URL at PageSpeed Insights
- Scroll to Diagnostics
- Look for “Largest Contentful Paint element”
The Fix: Remove loading=“lazy” from LCP Images
The solution is simple:
<!-- WRONG: Lazy loading on LCP image -->
<img
src="hero-image.jpg"
alt="Hero banner"
loading="lazy"
>
<!-- CORRECT: No lazy loading on LCP image -->
<img
src="hero-image.jpg"
alt="Hero banner"
>
<!-- EVEN BETTER: Add fetchpriority for fastest loading -->
<img
src="hero-image.jpg"
alt="Hero banner"
fetchpriority="high"
>
The fetchpriority="high" Bonus
For maximum LCP performance, add fetchpriority="high" to your LCP image. This tells the browser:
“This image is critical. Load it before other resources.”
This can improve LCP by 100-200ms or more.
When to Use Lazy Loading
Lazy loading is still excellent for images that are:
- Below the fold: Users must scroll to see them
- Off-screen initially: Images in carousels, tabs, or hidden sections
- Non-critical: Decorative images, thumbnails, avatars
- Further down the page: Blog post images, gallery items
Rule of thumb: If users see the image without scrolling on most devices, don’t lazy load it.
How UXR SEO Analyzer Checks This
The analyzer evaluates your LCP image by:
- Identifying the LCP element on the page
- Checking if it has
loading="lazy"attribute - Flagging as critical error if lazy loading is present on LCP
- Recommending
fetchpriority="high"for optimal performance
This is marked as a critical issue because it directly impacts Core Web Vitals, which are Google ranking factors.
Common Mistakes
1. Blanket Lazy Loading
<!-- Don't automatically add lazy to ALL images -->
<img src="hero.jpg" loading="lazy"> <!-- This is the LCP! -->
<img src="product.jpg" loading="lazy">
<img src="footer-logo.jpg" loading="lazy">
2. CMS Default Settings
Many CMS platforms and themes add loading="lazy" to all images by default. Check your theme settings and disable it for hero/featured images.
3. JavaScript Libraries
Some lazy loading libraries apply to all images. Configure them to exclude above-the-fold images.
Quick Checklist
- [ ] Identify your LCP image using DevTools or Lighthouse
- [ ] Remove
loading="lazy"from the LCP image - [ ] Add
fetchpriority="high"to the LCP image - [ ] Keep
loading="lazy"on below-the-fold images - [ ] Test LCP improvement with PageSpeed Insights
- [ ] Check all major page templates (home, product, blog)
Impact on Core Web Vitals
Fixing lazy loading on LCP images typically improves scores dramatically:
| Metric | Before Fix | After Fix | Improvement |
|---|---|---|---|
| LCP | 3.8s | 2.1s | 45% faster |
| Lighthouse Performance | 62 | 85 | +23 points |
| Core Web Vitals | Failing | Passing | Critical fix |
Next Steps
For comprehensive lazy loading implementation including JavaScript libraries, placeholder strategies, and advanced techniques, read our detailed Lazy Loading Best Practices Guide.
Related Articles
- LCP Optimization Guide - Complete Largest Contentful Paint optimization
- Responsive Images Explained - Serving the right size to every device
- Image Optimization Explained - Complete image optimization overview
- Images SEO Hub - All image optimization guides
References
- web.dev - Lazy loading images
- Chrome Developers - Optimize Largest Contentful Paint
- web.dev - Largest Contentful Paint (LCP)
- Google Search Central - Page experience