
For years, performance experts preached a simple mantra: Lazy load everything. We installed plugins, added attributes to every <img> tag, and cheered as our initial page weights plummeted.
But in 2026, blindly applying lazy loading is the number one reason websites fail their Core Web Vitals. Specifically, if you are lazy loading your Largest Contentful Paint (LCP) image, you are actively sabotaging your SEO rankings.
Search engines and users demand instantaneous above-the-fold rendering. When you tell a browser to delay the most important visual element on the screen, you create a massive bottleneck.
In this exhaustive guide, we are going to establish the definitive lazy loading best practices for LCP images. We will explore how browser preload scanners actually work, compare modern HTML attributes, and show you exactly how to exclude your critical assets from lazy loading across custom builds and CMS platforms.
Let’s rescue your LCP score.
Table of Contents
The Fatal Flaw: Why Lazy Loading Destroys LCP
Before we can optimize, we have to understand the mechanics of the browser.
When Google Chrome navigates to a URL, it uses a mechanism called the Preload Scanner. This scanner quickly parses your raw HTML document looking for critical resources (like CSS, fonts, and images) to download before it even finishes building the Document Object Model (DOM).
This is a race against the clock. Your LCP is almost always an image at the top of the page (a hero banner, a product photo, or an article featured image). You want the Preload Scanner to find it instantly.
Here is what happens when you lazy load that image:
- The Preload Scanner sees loading=”lazy” (or worse, a JavaScript lazy-load class).
- The scanner says, “Ah, this image isn’t important right now. I will skip it.”
- The browser finishes downloading the HTML, the CSS, and the JavaScript.
- The browser renders the page layout.
- Finally, the browser realizes the image is inside the user’s visible viewport (above the fold).
- The browser now starts downloading the image.
By lazy loading your LCP, you have artificially delayed its discovery by hundreds, sometimes thousands, of milliseconds. You have turned a VIP asset into an afterthought.
Learn more: Why is My LCP Slow on Mobile but Fast on Desktop
Should I Lazy Load LCP Image?
Should I lazy load LCP image? remains incredibly high FAQ in 2026, largely due to conflicting information.
The definitive answer is: NO. You should absolutely never lazy load your LCP image.
Any image that is visible within the initial viewport (above the fold) when the page first loads must load as quickly as possible. Lazy loading is strictly reserved for below-the-fold content, images that the user will only see if they decide to scroll down.
If your PageSpeed Insights report flags “Largest Contentful Paint element,” and you see that element is delayed by “Resource Load Delay,” lazy loading is almost certainly the culprit.
Fetchpriority=”high” vs loading=”eager”
If we are stripping loading=”lazy” off our hero images, what do we replace it with? In modern web development, you have two primary tools to tell the browser an image is critical.
Let’s break down the fetchpriority=”high” vs loading=”eager” debate.
1. loading=”eager” (The Baseline)
By default, all images are technically eager. If you omit the loading attribute entirely, or explicitly write loading=”eager”, you are telling the browser: “Do not wait for layout calculations. Download this as soon as you find it.”
While this removes the lazy loading penalty, it doesn’t necessarily bump the image to the front of the download line. It just puts it in the standard queue alongside your CSS and JavaScript.
2. fetchpriority=”high” (The VIP Pass)
Introduced to major browsers recently and fully standardized by 2026, fetchpriority is the ultimate weapon for LCP optimization.
When you add fetchpriority=”high” to an image, you are sending a massive signal to the browser’s networking stack. You are essentially saying: “Pause other non-critical downloads. Route maximum bandwidth to this specific image immediately.”
The Best Practice Combination
For the ultimate LCP image HTML tag in 2026, you should combine standard eager loading with high fetch priority, while explicitly avoiding asynchronous decoding.
The Perfect 2026 LCP Image Tag:
<img src="hero-banner.avif"
alt="Main product showcase"
fetchpriority="high"
loading="eager"
decoding="sync"
width="1200"
height="800">
How to Disable Lazy Load Above the Fold (By Platform)
Knowing the theory is one thing; executing it is another. Most modern platforms aggressively lazy load all images by default. Here is how to disable lazy load above the fold based on your tech stack.
WordPress Exclude LCP from Lazy Load
Since WordPress 5.5, the CMS has natively added loading=”lazy” to images. While recent core updates attempt to automatically omit this attribute from the first image on the page, the logic often fails, especially if you use complex page builders (like Elementor or Divi) or if your LCP is a background image.
If you use a Performance Plugin (WP Rocket, Perfmatters, FlyingPress):
- Navigate to the Media or Lazy Load settings in your plugin.
- Look for a field labeled “Exclude images from lazy loading.”
- Enter the specific filename of your hero image (e.g., hero-banner-2026.avif), or the CSS class attached to your hero section (e.g., .hero-lcp-image).
- Most premium plugins in 2026 also have a dedicated “Add fetchpriority to First Image” toggle. Turn this on.
If you are coding a custom WordPress Theme:
You can use the wp_get_attachment_image function and pass the attributes directly in your PHP template file for your hero section:
echo wp_get_attachment_image( $image_id, 'full', false, array(
'loading' => 'eager',
'fetchpriority' => 'high'
) );
Next.js / React Implementations
If you are running a headless setup using Next.js, the next/image component is incredibly powerful but must be configured correctly.
By default, <Image /> components are lazy-loaded. To fix your LCP, you must use the priority boolean on your hero image.
import Image from 'next/image'
export default function Hero() {
return (
<Image
src="/hero-banner.avif"
alt="Hero"
width={1200}
height={800}
priority={true}
/>
)
}
Adding priority={true} automatically removes loading=”lazy”, adds fetchpriority=”high”, and injects a <link rel=”preload”> tag into the document head.
The “Fold” is Dynamic: Handling Responsive LCP Images
One of the biggest mistakes developers make when establishing lazy loading best practices for LCP images is forgetting that the “fold” changes based on the device.
- On a Desktop: A massive widescreen banner is your LCP.
- On a Mobile Device: The widescreen banner might be hidden, and a square, mobile-cropped image becomes the LCP.
If you just slap fetchpriority=”high” on the desktop image, but hide it on mobile using CSS (display: none), mobile browsers will still waste precious bandwidth downloading the hidden desktop image with maximum priority, completely starving the actual mobile LCP image.
The Solution: Art Direction with <picture>
Always use the HTML <picture> element to serve different images based on media queries. You can apply fetchpriority=”high” to the <img> fallback, and the browser will brilliantly apply that priority to whichever source matches the user’s screen size.
<picture>
<!-- Mobile Image -->
<source media="(max-width: 768px)" srcset="hero-mobile.avif">
<!-- Desktop Image -->
<source media="(min-width: 769px)" srcset="hero-desktop.avif">
<!-- Fallback (Applies priority to chosen source) -->
<img src="hero-desktop.jpeg" alt="Hero" fetchpriority="high" loading="eager">
</picture>
The CSS Background Image Trap
If your LCP image is applied via CSS (background-image: url(‘hero.jpg’);), you have a massive problem.
The browser’s Preload Scanner cannot read CSS files. It only reads HTML. Therefore, the browser won’t even know your LCP image exists until it has downloaded the HTML, downloaded the CSS file, parsed the CSS, and matched the CSS selectors to the DOM. This guarantees a failed LCP score.
The Fix:
- Stop using CSS background images for LCP elements. Rewrite your hero section to use a standard HTML <img> tag, and use modern CSS like object-fit: cover; and position: absolute; to make it behave visually like a background image.
- If you must use a CSS background image, you must manually inject a preload tag into the <head> of your document to tell the Preload Scanner about it:
<link rel=”preload” as=”image” href=”hero.jpg” fetchpriority=”high”>

Mobile Viewports and Latency
Why is LCP optimization so hyper-critical for local businesses? Latency.
If you are a local roofer or a local attorney, your potential clients are often searching for you on their mobile phones while on the go. They might be connected to a congested 4G network downtown or a spotty 3G connection in a suburban neighborhood.
Network latency acts as a massive multiplier for bad code. If a user is on fiber-optic Wi-Fi, a lazy-loaded LCP image might only delay the page by 200 milliseconds, barely noticeable. But on a high-latency mobile network, that exact same lazy-load delay can stall the page for 3 or 4 full seconds.
By aggressively implementing fetchpriority=”high” and stripping lazy loading from your above-the-fold assets, you guarantee that local users on weak connections see your logo and your “Call Now” button instantly. This drops your bounce rate, signals high user engagement to Google’s local algorithm, and directly protects your Google Map Pack rankings.
FAQ: Lazy Loading and Core Web Vitals
Absolutely not. Preloading is a “priority” signal. If everything is a priority, nothing is a priority. If you preload 10 images, the browser will split its bandwidth 10 ways, causing all of them to load slowly. Only preload or use fetchpriority=”high” on your single most important LCP image.
Yes! By lazy loading your footer logos, related post thumbnails, and comment avatars, you free up the browser’s bandwidth to focus entirely on downloading your hero image faster.
Carousels are notorious LCP killers. Only apply fetchpriority=”high” and loading=”eager” to the first slide in the carousel. Ensure slides 2, 3, and 4 are strictly lazy-loaded, as they are not immediately visible on the initial page load.
Open your webpage in an incognito window. Right-click your hero image and select “Inspect.” Look at the raw HTML code in the DevTools elements panel. If you see loading=”lazy” on that image tag, WordPress (or a plugin) is sabotaging your speed.
Conclusion: Take Back Control of Your Viewport
As web development practices evolve, we must constantly audit our old habits. The blanket advice to “lazy load all images” is dead in 2026.
By mastering these lazy loading best practices for LCP images, you take direct control over how the browser allocates its resources. Stop hiding your most important visual assets from the Preload Scanner. Strip away the loading=”lazy” attributes from your hero sections, implement the modern fetchpriority=”high” command, and ensure your responsive <picture> tags are properly configured.
When you prioritize the fold, you pass Core Web Vitals. And when you pass Core Web Vitals, you clear the technical roadblocks standing between your content and page one of Google.
Join the Discussion
Have you audited your hero images yet? Right-click your homepage banner right now and hit “Inspect.” Did you find a sneaky loading=”lazy” hiding in the code? Let us know in the comments below which plugin or theme was forcing the lazy load, and how you managed to exclude it!





