View contents
LCP Image Lazy Loading: The Critical Performance Mistake
Introduction
You’ve added lazy loading to your images to improve performance—but your page actually got slower. What happened?
One of the most common performance mistakes on the web today is applying loading="lazy" to your LCP (Largest Contentful Paint) image. This single error can add hundreds of milliseconds to your most important performance metric and hurt your search rankings.
In this guide, you’ll learn why lazy loading your LCP image is a critical mistake, how to identify which image is your LCP element, and how to fix this issue in minutes.
What is LCP?
Largest Contentful Paint (LCP) measures how long it takes for the largest content element—usually an image or text block—to become visible on screen. Google uses LCP as a Core Web Vital ranking factor.
LCP thresholds:
- Good: ≤ 2.5 seconds
- Needs Improvement: 2.5 - 4.0 seconds
- Poor: > 4.0 seconds
For most pages, the LCP element is a hero image, featured product photo, or large banner. This is the image users are waiting to see.
The Lazy Loading Mistake
How Lazy Loading Works
The loading="lazy" attribute tells browsers to defer loading an image until it’s about to enter the viewport. This is excellent for images below the fold—users don’t waste bandwidth downloading content they might never scroll to see.
<!-- Lazy loading for below-the-fold images -->
<img src="photo.jpg" alt="Description" loading="lazy">
Why It Breaks LCP
Here’s the problem: when you apply loading="lazy" to your LCP image, you’re telling the browser to wait before loading the most important visual element on your page.
What happens:
- Browser starts parsing HTML
- Browser sees
loading="lazy"on the hero image - Browser delays the image request
- Browser waits for layout to determine if image is in viewport
- Browser finally starts loading the image
- LCP is recorded—but now it’s hundreds of milliseconds slower
According to web.dev, this delay can add 500ms or more to your LCP time.
How to Identify Your LCP Image
Using Chrome DevTools
- Open Chrome DevTools (F12 or right-click → Inspect)
- Go to the Performance tab
- Click the reload button
- In the timeline, look for “LCP” marker
- Click it to see which element was measured
Using Lighthouse
- Open Chrome DevTools
- Go to the Lighthouse tab
- Run a performance audit
- Scroll to “Largest Contentful Paint element”
- It will show you exactly which element is your LCP
Using PageSpeed Insights
- Go to PageSpeed Insights
- Enter your URL
- Look for “Largest Contentful Paint element” in the diagnostics
The Fix: Remove Lazy Loading from LCP Image
Step 1: Remove loading=“lazy”
If your LCP image has loading="lazy", remove it:
<!-- WRONG: Lazy loading on LCP image -->
<img src="hero.jpg" alt="Hero image" loading="lazy">
<!-- CORRECT: No lazy loading on LCP image -->
<img src="hero.jpg" alt="Hero image">
Step 2: Add fetchpriority=“high” (Recommended)
Go further by telling the browser to prioritize this image:
<!-- BEST: Prioritize the LCP image -->
<img src="hero.jpg" alt="Hero image" fetchpriority="high">
Step 3: Consider Preloading
For maximum performance, preload your LCP image:
<head>
<link rel="preload" as="image" href="hero.jpg">
</head>
Best Practice: Selective Lazy Loading
Lazy loading is still excellent—just not for above-the-fold content.
DO use loading=“lazy” for:
- Product images in a grid (below the first few)
- Blog post thumbnails
- Gallery images
- Footer images
- Any image below the fold
DON’T use loading=“lazy” for:
- Hero images
- First visible product image
- Logo images
- Any above-the-fold content
- Your LCP element
Common Mistakes to Avoid
1. Blanket Lazy Loading
Don’t apply lazy loading to all images globally:
<!-- WRONG: All images lazy loaded via CSS/JS -->
<style>
img { loading: lazy; } /* This doesn't work, but frameworks might do similar */
</style>
Instead, be selective about which images get lazy loading.
2. CMS Auto-Lazy Loading
Many CMS platforms and image optimization plugins automatically add loading="lazy" to all images. Check your:
- WordPress theme settings
- Image optimization plugins
- CDN settings
- Framework defaults
3. Framework Defaults
Some frameworks lazy load by default. Check your configuration:
- Next.js Image component
- Nuxt Image module
- Angular image directive
How to Check with UXR SEO Analyzer
The UXR SEO Analyzer automatically detects this critical issue:
- Install the Chrome extension
- Navigate to any page
- Open the extension
- Look for “LCP Image Lazy Loading” in the Images tab
- If flagged, the analyzer will show which image has the problem
The extension identifies when loading="lazy" is applied to your LCP element and recommends removal.
Impact on Core Web Vitals
Fixing this single issue can have dramatic results:
| Metric | Before Fix | After Fix |
|---|---|---|
| LCP | 3.8s | 2.2s |
| Lighthouse Performance | 62 | 89 |
Results vary by site, but improvements of 500ms+ are common.
Next Steps
- Identify your LCP element using Chrome DevTools or Lighthouse
- Check for loading=“lazy” on that specific image
- Remove the attribute if present
- Add fetchpriority=“high” for additional improvement
- Re-test with Lighthouse to measure improvement
Ready to learn more? Read our Lazy Loading Best Practices Guide for advanced strategies.
Related Articles
- LCP Optimization Guide - Complete guide to improving LCP
- Image Fetchpriority Explained - Priority hints for images
- Image Preloading Explained - When to preload images
- Images SEO Hub - All image optimization guides
References
- web.dev - Largest Contentful Paint - Google’s official LCP documentation
- web.dev - Browser-level lazy loading - When to use lazy loading
- Chrome Developers - Lighthouse LCP - Measuring LCP
- MDN - Lazy loading - Technical reference