Best Core Web Vitals Image Optimization Guide – Fix LCP and CLS (2026) | ImageTools Blog

Best Core Web Vitals Image
Optimization Guide 2026

Images are responsible for the majority of Core Web Vitals failures on real websites. A slow-loading hero image tanks your LCP score. Images without declared dimensions cause layout shift. Uncompressed files hurt every metric simultaneously. This guide gives you the exact fixes — with before/after code examples — to go from red to green on PageSpeed Insights.

What Are Core Web Vitals?

Core Web Vitals are Google’s official set of user experience metrics — confirmed ranking signals since 2021. They measure three aspects of page experience that directly affect real users. Images impact all three metrics in measurable and significant ways:

🖼️
LCP — Largest Contentful Paint
Good: <2.5s OK: 2.5–4s Poor: >4s
How fast the largest visible element loads. Usually the hero image. Images are the #1 LCP element on most pages.
📐
CLS — Cumulative Layout Shift
Good: <0.1 OK: 0.1–0.25 Poor: >0.25
How much the page jumps while loading. Images without declared dimensions are the biggest CLS culprit in Core Web Vitals audits.
INP — Interaction to Next Paint
Good: <200ms OK: 200–500ms Poor: >500ms
How fast the page responds to user interaction. Heavy uncompressed images slow the main thread and indirectly impact INP scores.

According to Google’s Core Web Vitals documentation on web.dev, pages that meet the Good thresholds for all three metrics are eligible for a ranking boost in Google Search. Images that are improperly optimized are the single most common cause of failing these thresholds across all website types.

Fix LCP — Your Hero Image Is Too Slow

On most websites, the LCP element is the hero image — the large banner at the top of the page. If your Core Web Vitals LCP score is poor, your hero image is almost certainly the problem. Here are the fixes in order of impact:

1
Compress the Hero Image Under 200KB
Highest Impact

A hero image should be under 200KB in WebP format. Most unoptimized hero images are 800KB–3MB. Compressing from 1MB to 180KB cuts LCP by 1–2 seconds on mobile connections — the biggest single improvement you can make to your Core Web Vitals score. Use our Image Compressor and JPG to WebP converter before uploading.

2
Add fetchpriority=”high” to the Hero Image
High Impact

This single attribute tells the browser to prioritize this image above almost everything else — including resources it would normally load first. It was introduced specifically for LCP optimization and is now one of the most effective Core Web Vitals fixes available.

❌ Before
<img src="hero.webp" alt="...">
✅ After
<img src="hero.webp" alt="..." fetchpriority="high" loading="eager">
3
Preload the Hero Image in <head>
High Impact

A preload link tells the browser to start downloading the LCP image immediately — before even parsing the HTML body. This is especially effective when the hero is set via CSS background-image rather than an img tag, where the browser cannot discover it until the CSS is parsed.

<!– Add this to <head> for Core Web Vitals LCP fix –> <link rel=“preload” href=“hero.webp” as=“image” type=“image/webp”>
4
Never Lazy Load the Hero Image
High Impact

This is the single most common Core Web Vitals mistake. Adding loading="lazy" to your hero image intentionally delays its loading — which directly causes a poor LCP score because the hero is already in the viewport on first load. Only apply lazy loading to images below the fold.

❌ Kills LCP
<img src="hero.webp" loading="lazy">
✅ Correct
<img src="hero.webp" loading="eager" fetchpriority="high">
5
Resize Hero to Actual Display Dimensions
Medium Impact

If your hero displays at 1400px wide but you are serving a 4000px original, the browser downloads 4× more data than it needs. Use our Image Resizer to resize to 1600–1920px max width before uploading — most monitors and Core Web Vitals tests do not need anything larger.

Before Core Web Vitals Fix
42
LCP: 6.2s
Hero: 1.8MB JPG, no preload
loading=”lazy” on hero image
After Core Web Vitals Fix
94
LCP: 1.4s
Hero: 156KB WebP, preloaded
fetchpriority=”high” applied

Fix CLS — Images Causing Layout Shift

Cumulative Layout Shift is a Core Web Vitals metric that measures page instability. It happens when images load without the browser knowing their dimensions in advance — the page renders without the image, then when it loads everything shifts down, frustrating users and tanking your CLS score.

The fix is simple and takes 30 seconds per image: add width and height attributes to every <img> tag on your page.

<!– ❌ No dimensions: browser can’t reserve space → layout shift → poor CLS –> <img src=“blog-image.webp” alt=“Alt text here”> <!– ✅ With dimensions: browser reserves exact space → zero layout shift → good CLS –> <img src=“blog-image.webp” alt=“Alt text here” width=“800” height=“450” loading=“lazy”>
ℹ️

CSS Still Handles Responsiveness

Adding width and height attributes does not lock the image to a fixed size. As long as you have img { max-width: 100%; height: auto; } in your CSS — which every modern CSS reset includes — the image scales responsively. The browser simply uses the attributes to calculate the aspect ratio and reserve the correct amount of space before the image loads, eliminating the Core Web Vitals CLS penalty.

Other Image-Related CLS Causes

  • Images in sliders or carousels without fixed container heights — define a min-height on the wrapper to prevent layout shifts
  • Dynamically injected images via JavaScript — always specify dimensions in the element or use the aspect-ratio CSS property
  • Ad images loading above content — reserve space with a fixed-size container to prevent ads from shifting page content down

Fix Overall Speed — Compress Everything

Beyond LCP, uncompressed images slow every aspect of page loading and damage your overall Core Web Vitals performance profile. These are the target file sizes to hit before uploading any image:

1
Convert All Images to WebP Format
High Impact

WebP produces 25–35% smaller files than JPG at equivalent visual quality. On a page with 10 images, switching from JPG to WebP is equivalent to removing 3 images entirely in terms of bytes transferred — without any visible quality loss. Use our JPG to WebP and PNG to WebP converters to make the switch across your library.

2
Hit These Target File Sizes Per Image Type
High Impact

These targets achieve Good Core Web Vitals scores on mobile connections where most users are:

  • Hero image: under 150–200KB
  • Blog content images: under 80KB
  • Thumbnails and card images: under 30KB
  • Icons and logos: under 10KB — use SVG format if possible
3
Never Upload Full-Resolution Camera Files
High Impact

A raw photo from a modern smartphone or DSLR is typically 4–12MB. Displaying this at 800px wide means users download 10–50× more data than the display actually requires. Always resize to display dimensions and compress before uploading to prevent Core Web Vitals failures caused by oversized source files.

Lazy Loading — Use It Right

Lazy loading defers image loading until the user scrolls near the image — reducing initial page weight and improving first load time. But used incorrectly, it damages your Core Web Vitals scores more than it helps. The rule is simple: never lazy load above-fold images, always lazy load below-fold images.

<!– ❌ NEVER lazy load above-fold images — kills Core Web Vitals LCP –> <img src=“hero.webp” loading=“lazy”> <!– ✅ Hero image: eager loading + high fetch priority –> <img src=“hero.webp” width=“1400” height=“600” loading=“eager” fetchpriority=“high” alt=“Hero image description”> <!– ✅ Below-fold content images: apply lazy loading here –> <img src=“content-image.webp” width=“800” height=“450” loading=“lazy” alt=“Content image description”>
🚨

The Most Common Core Web Vitals Mistake: Lazy Loading Everything

Many WordPress performance plugins set loading="lazy" on all images by default, including the hero image. Check your plugin settings immediately — most have an option to exclude the first image or LCP image from lazy loading. Failing to exclude the hero is one of the most common reasons sites score poorly on Core Web Vitals despite running optimization plugins.

Responsive Images with srcset

Serving a 1600px wide image to a mobile user on a 390px screen wastes bandwidth and hurts mobile Core Web Vitals scores. The srcset attribute lets you provide multiple image sizes and lets the browser automatically select the most appropriate one for each device:

<!– ✅ Responsive images fix mobile Core Web Vitals bandwidth waste –> <img src=“hero-800.webp” srcset=“hero-400.webp 400w, hero-800.webp 800w, hero-1200.webp 1200w, hero-1600.webp 1600w” sizes=“(max-width: 600px) 100vw, (max-width: 1200px) 80vw, 1200px” alt=“Hero image” width=“1600” height=“700” fetchpriority=“high”>

WordPress automatically generates multiple image sizes and adds srcset to images inserted through the media library. For images added manually or via page builders, add srcset yourself or use a dedicated image optimization plugin to automate this for Core Web Vitals compliance.

⚡ Fix Core Web Vitals Images — Free Tools

Compress to under 150KB, convert to WebP, and resize to the correct dimensions. All in your browser — no upload required, your images never leave your device.

Complete Core Web Vitals Image Checklist

Run every page through this checklist before publishing to verify full Core Web Vitals image compliance:

⚡ Core Web Vitals — Image Optimization Checklist

LCP image identified — verify in PageSpeed Insights which element is your Core Web Vitals LCP target
Hero image under 150KB WebP — compress and convert before uploading
fetchpriority=”high” on hero and loading=”eager” — never lazy
Hero preloaded in <head> with <link rel=”preload” as=”image”>
All img tags have width + height attributes — fixes Core Web Vitals CLS
All below-fold images have loading=”lazy” — only below-fold, never above
All images converted to WebP — 25–35% smaller than JPG format
Images resized to display dimensions — no 4000px originals served to 800px containers
srcset used for responsive images — correct size served to every device
Verified with PageSpeed Insights — test both mobile and desktop Core Web Vitals scores

Frequently Asked Questions

LCP is the Core Web Vitals metric that measures how long it takes for the largest visible element on the page to fully load. For most websites this is the hero image. A Good LCP is under 2.5 seconds. Poor LCP over 4 seconds is a direct Google ranking signal. The three highest-impact fixes are compressing the hero image under 150KB, converting it to WebP, and adding fetchpriority=”high” to the img tag.
CLS happens when images load without the browser knowing their dimensions in advance. The browser renders the page without the image, then shifts everything when it arrives — a frustrating experience and a Core Web Vitals penalty. The fix is adding width and height attributes to every img tag. With modern CSS setting img to max-width 100% and height auto, this does not affect responsiveness — the browser simply uses the ratio to reserve space before the image loads.
Yes — indirectly but significantly. WebP files are 25–35% smaller than JPG at equivalent visual quality, meaning they download faster and LCP improves measurably. Format is not a direct Core Web Vitals metric, but its effect on file size and loading speed directly determines LCP scores. Converting all images to WebP is one of the easiest and highest-ROI improvements for Core Web Vitals.
Never. Lazy loading delays image loading until the user scrolls near it — which directly causes a poor Core Web Vitals LCP score since the hero image is already visible on first page load. Use loading=”eager” and fetchpriority=”high” on your hero. Only apply loading=”lazy” to images that are genuinely below the fold and not visible until the user scrolls down.
Google’s Core Web Vitals threshold for Good LCP is under 2.5 seconds. For competitive SEO in 2026, aim for under 2.0 seconds on mobile — where Google’s ranking signals are measured. The biggest LCP improvements come from compressing the hero image under 150KB, converting to WebP, adding fetchpriority=”high”, and adding a preload link in the HTML head. Verify your score at PageSpeed Insights after making these changes.
ImageTools Editorial Team

We build free, privacy-first image tools for designers, developers, and content creators. All processing runs in your browser — your images never leave your device. Our guides cover Core Web Vitals optimization, image search techniques, and user experience best practices.

Related Articles and Tools

Share.
Leave A Reply