Performance

How Image Optimization Impacts Core Web Vitals

Google's Core Web Vitals are now a ranking factor, and images play a crucial role in your scores. This guide explains how image optimization directly impacts each Core Web Vital metric and provides actionable strategies for improvement.

What Are Core Web Vitals?

Core Web Vitals are three specific metrics that measure user experience:

  1. LCP (Largest Contentful Paint) - Loading performance
  2. INP (Interaction to Next Paint) - Responsiveness
  3. CLS (Cumulative Layout Shift) - Visual stability

Images significantly impact LCP and CLS, making optimization essential for good scores.

Images and Largest Contentful Paint (LCP)

LCP measures how long it takes for the largest content element to become visible. In most cases, this element is an image.

LCP Score Thresholds

Score LCP Time
Good < 2.5s
Needs Improvement 2.5s - 4.0s
Poor > 4.0s

Why Images Dominate LCP

The LCP element is often:

  • Hero images
  • Featured product photos
  • Banner images
  • Above-the-fold graphics

If these images are large or slow to load, your LCP score suffers.

Improving LCP with Image Optimization

1. Compress Your Images

Reduce file sizes without visible quality loss:

<!-- Before: 2.4MB JPEG -->
<img src="hero-original.jpg" alt="Hero">

<!-- After: 485KB WebP (80% smaller) -->
<img src="hero-optimized.webp" alt="Hero">

2. Use Modern Formats

WebP and AVIF offer significantly better compression:

<picture>
  <source srcset="hero.avif" type="image/avif">
  <source srcset="hero.webp" type="image/webp">
  <img src="hero.jpg" alt="Hero image">
</picture>

3. Preload Critical Images

Tell the browser to prioritize your LCP image:

<head>
  <link rel="preload" as="image" href="hero.webp" type="image/webp">
</head>

4. Use Responsive Images

Serve appropriately sized images for each viewport:

<img
  srcset="hero-400.webp 400w,
          hero-800.webp 800w,
          hero-1200.webp 1200w"
  sizes="(max-width: 600px) 400px,
         (max-width: 1000px) 800px,
         1200px"
  src="hero-1200.webp"
  alt="Hero image"
>

5. Use a CDN

Serve images from edge locations close to your users:

<!-- Slow: Single origin server -->
<img src="https://yoursite.com/images/hero.webp">

<!-- Fast: CDN with global edge network -->
<img src="https://cdn.yoursite.com/images/hero.webp">

Images and Cumulative Layout Shift (CLS)

CLS measures unexpected layout shifts during page load. Images without defined dimensions are a major cause of poor CLS scores.

CLS Score Thresholds

Score CLS Value
Good < 0.1
Needs Improvement 0.1 - 0.25
Poor > 0.25

How Images Cause Layout Shifts

When an image loads without explicit dimensions, the browser doesn't know how much space to reserve. This causes content to shift as the image loads:

[Page loads]     [Image loads]    [Content pushed down]
┌─────────┐      ┌─────────┐      ┌─────────┐
│  Text   │  →   │  Image  │  →   │  Image  │
│         │      │  Text   │      │         │
└─────────┘      └─────────┘      │  Text   │
                                   └─────────┘

Preventing CLS from Images

1. Always Specify Dimensions

<!-- Bad: No dimensions -->
<img src="product.webp" alt="Product">

<!-- Good: Explicit dimensions -->
<img src="product.webp" alt="Product" width="400" height="300">

2. Use Aspect Ratio CSS

Modern CSS can maintain aspect ratios without knowing exact dimensions:

.image-container {
  aspect-ratio: 16 / 9;
  width: 100%;
}

.image-container img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

3. Reserve Space with Placeholders

Use a placeholder that matches the final image dimensions:

<div class="image-wrapper" style="background-color: #f0f0f0;">
  <img
    src="product.webp"
    alt="Product"
    width="400"
    height="300"
    loading="lazy"
  >
</div>

4. Use BlurHash or LQIP

Show a blurred preview while the full image loads:

<div class="image-container">
  <!-- Low quality placeholder (base64 inline) -->
  <img
    src="data:image/webp;base64,UklGR..."
    class="placeholder"
    aria-hidden="true"
  >
  <!-- Full quality image -->
  <img
    src="product-full.webp"
    alt="Product"
    class="full-image"
    loading="lazy"
  >
</div>
.image-container {
  position: relative;
}

.placeholder {
  position: absolute;
  width: 100%;
  height: 100%;
  filter: blur(10px);
}

.full-image {
  position: relative;
  z-index: 1;
}

Measuring Your Image Performance

Using Chrome DevTools

  1. Open DevTools (F12)
  2. Go to Lighthouse tab
  3. Run a Performance audit
  4. Check "Avoid enormous network payloads"
  5. Review image-specific suggestions

Using PageSpeed Insights

Visit PageSpeed Insights and analyze your URL. Look for:

  • "Properly size images"
  • "Serve images in next-gen formats"
  • "Efficiently encode images"
  • "Preload Largest Contentful Paint image"

Using Web Vitals Library

Monitor Core Web Vitals in production:

import { onLCP, onCLS, onINP } from 'web-vitals';

onLCP(metric => {
  console.log('LCP:', metric.value);
  // Check if LCP element is an image
  console.log('LCP Element:', metric.entries[0].element);
});

onCLS(metric => {
  console.log('CLS:', metric.value);
});

onINP(metric => {
  console.log('INP:', metric.value);
});

Image Optimization Checklist for Core Web Vitals

For LCP (Loading)

  • Compress all images (target 70-80% reduction)
  • Use WebP or AVIF formats
  • Preload the LCP image
  • Implement responsive images
  • Use a CDN
  • Enable HTTP/2 or HTTP/3
  • Set appropriate cache headers

For CLS (Stability)

  • Add width and height to all images
  • Use aspect-ratio CSS
  • Implement placeholders
  • Avoid lazy loading above-the-fold images
  • Test on slow connections

General Best Practices

  • Lazy load below-the-fold images
  • Use native loading="lazy" attribute
  • Optimize images before upload
  • Monitor Core Web Vitals in production

Real-World Impact

A case study from our users:

Before Optimization:

  • LCP: 4.2s (Poor)
  • CLS: 0.18 (Needs Improvement)
  • Total image payload: 8.5MB

After Optimization:

  • LCP: 1.8s (Good)
  • CLS: 0.02 (Good)
  • Total image payload: 1.2MB

Results:

  • 85% reduction in image payload
  • 57% improvement in LCP
  • 89% improvement in CLS
  • 23% increase in conversions

Conclusion

Images are often the biggest opportunity for improving Core Web Vitals:

  1. For LCP: Compress, use modern formats, preload, and serve from CDN
  2. For CLS: Always specify dimensions and use aspect ratios
  3. For Both: Implement responsive images and lazy loading appropriately

By optimizing your images, you'll improve not just your Core Web Vitals scores, but also your users' experience and your search rankings.

Start by auditing your current images with PageSpeed Insights, then systematically address each optimization opportunity. The investment in image optimization pays dividends in performance, SEO, and user satisfaction.

Share:

Related Articles

Ready to optimize your images?

Start compressing images for free and see the difference.

Try OctoSqueeze Free