Introduction
Image optimization helps websites deliver visual content efficiently without sacrificing quality or delaying important page elements. Choosing modern formats such as WebP and AVIF, compressing images appropriately, serving responsive sizes, and specifying image dimensions can reduce unnecessary downloads and help prevent layout shifts. Lazy loading can also save bandwidth for offscreen images, but applying it to the main above-the-fold or Largest Contentful Paint (LCP) image can delay rendering and hurt performance.
The problem is rarely just “use a smaller image.”
Image performance depends on several decisions working together:
- Which image format you use
- How aggressively the image is compressed
- Whether the image dimensions match its actual display size
- Whether the browser can choose an appropriate image for the device
- Whether the image is critical to the initial view
- Whether non-critical images are loaded later
- Whether the browser knows the image dimensions before it loads
WebP and AVIF can reduce file sizes. Responsive images can prevent unnecessary downloads. Lazy loading can keep below-the-fold images out of the initial loading path.
But these techniques are easy to apply incorrectly.
For example, lazy-loading the main image at the top of a page can delay the very resource you want the browser to load quickly. Converting an image to WebP does not solve the problem if you are still serving a 3000-pixel image into a 600-pixel container.
Good image optimization is therefore less about choosing one “best” format and more about sending the right image, at the right size, at the right time.

Quick Answer
The most effective image optimization strategy is to:
- Use modern formats such as WebP or AVIF when they provide a useful size reduction.
- Compress images without creating visible quality problems.
- Resize images to match their actual display requirements.
- Use srcset and sizes so the browser can select an appropriate image resource.
- Set explicit width and height attributes to reserve layout space.
- Lazy-load images that are not needed for the initial viewport.
- Avoid lazy-loading important above-the-fold or LCP images.
- Test the actual image request in the browser rather than assuming optimization is working.
The goal is not to make every image as small as possible. The goal is to avoid sending more pixels and bytes than the page actually needs.
Why Image Optimization Matters for Website Performance
A browser has to download, decode, and render an image before the user can fully benefit from it.
Large images can therefore increase:
- Network transfer time
- Bandwidth consumption
- Image decoding work
- Rendering work
- Mobile data usage
- Page weight
- The time required to display important visual content
The effect becomes particularly noticeable on mobile connections, where bandwidth and device resources can be more constrained.
Images can also influence Core Web Vitals.
A large image that becomes the Largest Contentful Paint element can contribute directly to a poor LCP. Images that appear later on the page are less likely to affect the initial LCP, but loading dozens of unnecessary images can still consume bandwidth and compete for browser resources.
There is another issue that is easy to overlook: image dimensions can affect layout stability.
If the browser does not know how much space an image needs before the image arrives, surrounding content can move when the image is finally rendered. Reserving the correct space helps prevent this kind of layout shift.
Image optimization is therefore connected to more than download size.
WebP vs AVIF: Which Image Format Should You Use?
WebP and AVIF are modern image formats designed to provide efficient compression while maintaining useful visual quality.
Neither should be treated as a universal replacement for every other format.
WebP
WebP is widely supported and provides good compression for many common website images.
It works well for:
- Photographs
- Blog images
- Product images
- Thumbnails
- Transparent graphics
- General-purpose website imagery
For many websites, moving appropriately sized JPEG or PNG images to WebP can produce a noticeable reduction in file size.
WebP is also relatively straightforward to integrate into existing content systems and image optimization workflows.
AVIF
AVIF can often achieve smaller files than WebP at comparable visual quality, although the actual result depends on the image and encoding settings.
It can be particularly useful when:
- Image bandwidth is a significant concern
- Your image pipeline supports AVIF properly
- You are willing to test encoding quality
- Your audience’s browser support and fallback strategy are accounted for
Smaller does not automatically mean better.
An aggressively compressed AVIF that introduces visible artifacts is not an improvement simply because its file size is lower.
WebP or AVIF?
There is no universal winner.
A sensible approach is to test representative images from your own website.
For example:
| Format | Typical role | Main advantage |
| WebP | General website images | Good compression and broad support |
| AVIF | Performance-focused image delivery | Often excellent compression |
| JPEG | Legacy/fallback use | Broad compatibility and mature tooling |
| PNG | Transparency or lossless graphics | Useful where lossless quality matters |
| SVG | Logos, icons, simple graphics | Scales without raster resolution limits |
The important measurement is not which format sounds more modern.
It is how much useful visual quality you get for the number of bytes transferred.
Don’t Confuse Format With Image Size
This is one of the most common image optimization mistakes.
Imagine a website displays an image at roughly 700 pixels wide.
You convert the original 3000-pixel JPEG to WebP.
The resulting WebP might be smaller than the original JPEG, but you may still be sending far more pixels than the browser needs.
For example:
Original
3000 × 2000 JPEG
2.4 MB
Converted
3000 × 2000 WebP
550 KB
Resized
900 × 600 WebP
120 KB
The third version may be much more appropriate for the page.
The format helped.
The resizing helped more.
This is why “convert everything to WebP” is not a complete image optimization strategy.
Choose Image Dimensions Based on Display Size
The browser ultimately displays an image at some CSS size.
If an image is rendered at 600 CSS pixels wide, serving a 2400-pixel-wide file may be unnecessary for many situations.
That does not mean every image should exactly match its CSS width. High-density displays can require additional source resolution.
The better approach is to provide several suitable sizes and allow the browser to choose.
For example, you might generate:
- 400px
- 800px
- 1200px
- 1600px
The exact breakpoints should depend on the layout and the images your site actually uses.
A narrow article column does not need the same source dimensions as a full-width hero image.
Responsive Images: Use srcset and sizes
Responsive images solve a basic problem:
Different devices do not need the same image resource.
A phone may display an image at 360 CSS pixels wide. A desktop may display it at 900 pixels. A high-density display may need a larger source to maintain sharpness.
Instead of forcing every device to download the largest file, you can provide several candidates.
A simplified example looks like this:
<img
src=”image-800.webp”
srcset=”
image-400.webp 400w,
image-800.webp 800w,
image-1200.webp 1200w,
image-1600.webp 1600w”
sizes=”(max-width: 600px) 100vw, 800px”
width=”1600″
height=”1067″
alt=”Example image”>
The important pieces have different jobs.
srcset
srcset tells the browser which image resources are available and their intrinsic widths.
sizes
sizes gives the browser information about how wide the image is expected to appear in the layout under different conditions.
This helps the browser select an appropriate candidate.
src
src provides the normal image source and fallback behavior.
The browser can then make the resource selection instead of the website simply sending the largest image to everyone.
Why sizes Matters More Than Many Developers Realize
A common mistake is adding srcset but ignoring sizes.
If the browser does not have useful information about the image’s expected display size, it has less information with which to make an efficient choice.
Consider an image that is:
- 100% width on a phone
- roughly 700px wide in the desktop article column
A useful sizes value could reflect that layout:
sizes=”(max-width: 700px) 100vw, 700px”
The exact value should match the real layout.
Do not copy this example blindly.
The browser needs an accurate description of the image’s likely slot size, not a generic mobile/desktop formula.
Use <picture> When You Need Different Formats or Crops
The <picture> element can be useful when you want to offer different image formats or art-directed versions.
For example:
<picture>
<source srcset=”image.avif” type=”image/avif”>
<source srcset=”image.webp” type=”image/webp”>
<img
src=”image.jpg”
width=”1200″
height=”800″
alt=”Example image”>
</picture>
This lets the browser use a supported modern format while retaining a fallback.
You can also use <picture> for art direction.
Art direction is different from simply serving different resolutions.
For example, you might want:
- A wide landscape crop on desktop
- A tighter portrait crop on mobile
That is a different image composition, not merely a smaller version of the same image.
Use <picture> when the content or crop needs to change. Use srcset and sizes when you mainly need different resolutions of the same image.
Compression: Reduce Bytes Without Destroying Quality
Compression is another major part of image optimization.
There is no single quality setting that works for every image.
A photograph can often tolerate substantial compression because subtle differences may not be noticeable at normal display sizes.
A screenshot, logo, illustration, or image containing text may behave differently.
The right workflow is:
- Start with the original image.
- Resize it to appropriate dimensions.
- Export to an efficient format.
- Apply reasonable compression.
- Inspect the result at its actual display size.
- Compare visual quality and file size.
- Adjust if necessary.
Do not judge compression only by zooming into the image at 400%.
What matters is whether the image looks good where users actually see it.
Don’t Upload Huge Originals Directly to the Website
A common workflow is:
Take a high-resolution camera image → upload the original → let the browser resize it with CSS.
That is convenient, but CSS resizing does not reduce the bytes transferred.
A 4000-pixel image displayed at 800 pixels is still a 4000-pixel image being downloaded.
The better workflow is to create web-appropriate variants.
For content websites, that might mean generating several predefined widths rather than manually creating a new image for every page.
Your CMS or image CDN may already do this automatically.
The important thing is to verify the actual network request.
Always Specify Image Dimensions
Images should normally have explicit dimensions available to the browser.
For example:
<img
src=”photo.webp”
width=”1200″
height=”800″
alt=”Example photograph”>
The browser can use those dimensions to calculate the image’s aspect ratio and reserve the appropriate space before the image finishes loading.
This is particularly important for images that load later.
Without reserved space, the surrounding content can move when the image appears.
That can contribute to layout instability and a poor CLS experience.
The dimensions do not force the image to appear at exactly 1200 × 800 CSS pixels. CSS can still control its displayed size.
The attributes primarily provide intrinsic dimensions and aspect-ratio information.
Lazy Loading: What It Actually Does
Lazy loading means delaying the loading of resources that are not immediately needed.
For images, this can be implemented with:
<img
src=”photo.webp”
loading=”lazy”
width=”1200″
height=”800″
alt=”Example photograph”>
The browser can defer loading the image until it determines that the resource is sufficiently close to being needed.
This can reduce unnecessary initial downloads, particularly on long pages containing many images.
For example, an article containing 30 images does not necessarily need to download all 30 before the user sees the opening section.
Lazy loading allows the browser to prioritize resources that matter sooner.
Do Not Lazy-Load Your LCP Image
This deserves special attention.
Lazy loading is not automatically good for every image.
If the main hero image is visible immediately and becomes the page’s LCP element, adding loading=”lazy” can delay its request.
That can make LCP worse.
Above-the-fold images that are important to the initial experience generally need a different loading strategy from images far down the page.
A simplified distinction is:
Important image in the initial viewport
→ Let the browser discover and load it promptly.
Image well below the initial viewport
→ Lazy loading may be appropriate.
The exact behavior should be verified with the page’s actual layout and performance data.
Lazy Loading Does Not Replace Image Optimization
Another common misconception is:
“All my images are lazy-loaded, so image performance is solved.”
It is not.
Suppose a page contains ten below-the-fold images.
Lazy loading can prevent all ten from being downloaded immediately.
But when the user scrolls down, those images still need to be downloaded.
If each one is a 2 MB original image, the page can still waste enormous amounts of bandwidth.
Lazy loading controls when an image is requested.
Compression and responsive sizing control how much data needs to be transferred.
You usually want both.
Which Images Should Be Lazy-Loaded?
A practical rule is to consider lazy loading for images that are:
- Below the initial viewport
- Part of long articles
- In related-post sections
- In galleries further down the page
- In comments or secondary content
- Not required for the initial rendering experience
Be more cautious with images that are:
- Visible immediately
- Hero images
- Likely to become the LCP element
- Critical to the main content
- Needed immediately after navigation
There is no universal pixel distance at which lazy loading suddenly becomes correct.
Browsers make their own decisions about when lazy resources are fetched.
Image Loading and LCP
Image optimization can have a particularly noticeable effect when an image is the LCP element.
The browser has to:
- Discover the image.
- Request it.
- Receive the response.
- Download the resource.
- Decode it.
- Render it.
A large image can spend a significant amount of time in the download portion of that process.
If the browser discovers the image late, that creates another delay.
If the image is unnecessarily large, the download takes longer.
If the image is lazy-loaded even though it is immediately visible, its request can be delayed further.
This is why the right approach for an LCP image is generally different from the approach for images deep in an article.
For a deeper diagnosis, use your LCP and image-loading troubleshooting guides rather than treating every image as the same performance problem.
Image Optimization for WordPress
WordPress sites can make image optimization easier because the platform can generate multiple image sizes.
But installing an image optimization plugin does not automatically guarantee an efficient result.
Check what the site is actually serving.
Look for:
- Modern image formats
- Appropriate generated sizes
- Responsive srcset
- Correct sizes
- Proper width and height attributes
- Lazy loading for suitable images
- Reasonable compression
- CDN delivery where appropriate
- No unnecessarily huge original requests
A plugin can generate the files, but your theme, page builder, templates, CDN, and image settings can still determine which file reaches the browser.
Do not judge image optimization by the plugin’s settings screen alone.
Inspect the rendered page.
How to Check Whether Your Images Are Really Optimized
You can verify image delivery using browser developer tools.
Open the page in Chrome and inspect the Network panel.
Filter requests by images.
Then check:
1. Which image was requested?
Is the browser downloading the 400px, 800px, 1600px, or original image?
2. What is the transferred size?
A modern format does not automatically mean a small file.
3. What are the intrinsic dimensions?
A 2000px image may be unnecessary if the layout displays it at 600px.
4. Is the image loading immediately?
Check whether below-the-fold images are being deferred.
5. Which image is the LCP element?
If the largest content element is an image, investigate that request separately.
6. Is the browser selecting the expected source?
Responsive image behavior depends on the actual layout, viewport, device pixel ratio, and available candidates.
Testing the real request is more useful than simply checking whether your HTML contains srcset.
Common Image Optimization Mistakes
Converting every image to WebP and stopping there
Modern format conversion is useful, but oversized dimensions can still waste bandwidth.
Using AVIF at excessively aggressive compression
A smaller file is not valuable if the visual result is poor.
Serving one huge image to every device
Responsive image candidates exist specifically to avoid this.
Adding srcset without meaningful sizes
The browser needs useful information about the intended display size.
Lazy-loading every image
This can delay important images, including the LCP resource.
Removing width and height attributes
This can make it harder for the browser to reserve the correct space and can contribute to layout instability.
Using CSS to resize oversized images
CSS changes presentation, not the amount of image data downloaded.
Optimizing only file size
A 50 KB image that looks terrible is not necessarily better than a 90 KB image that looks correct.
Assuming the optimization plugin solved everything
Always inspect what the browser actually downloads.
Using the same dimensions everywhere
A thumbnail, article image, hero image, and full-width background image have different requirements.
A Practical Image Optimization Workflow
Use this process when optimizing an existing website.
Step 1: Identify the important images
Start with images that are:
- Large
- Frequently requested
- Above the fold
- LCP candidates
- Used repeatedly across templates
Step 2: Measure their actual display size
Find out how wide the image is actually rendered on desktop and mobile.
Step 3: Generate suitable image sizes
Create enough candidates for the site’s real layouts.
Avoid creating dozens of unnecessary variants without a reason.
Step 4: Choose an efficient format
Test WebP and AVIF where appropriate.
Keep a suitable fallback strategy when necessary.
Step 5: Compress
Reduce file size while maintaining acceptable visual quality.
Step 6: Add responsive image information
Use srcset and sizes where multiple resolutions are appropriate.
Step 7: Reserve layout space
Provide correct image dimensions.
Step 8: Apply lazy loading selectively
Defer images that are not needed for the initial viewport.
Do not blindly lazy-load critical images.
Step 9: Test the actual requests
Use browser developer tools and performance testing tools to confirm the browser is receiving the expected files.
Step 10: Measure again
Compare performance after the changes.
Do not assume that a smaller image automatically produces a measurable improvement everywhere.
A Simple Image Optimization Checklist
Before publishing a page, check:
- Image is appropriately cropped
- Image dimensions match its intended use
- Image has been compressed
- WebP or AVIF has been considered
- Responsive image candidates are available where useful
- srcset is correctly configured
- sizes reflects the actual layout
- width and height are defined
- Below-the-fold images can be lazy-loaded
- Important above-the-fold images are not unnecessarily lazy-loaded
- LCP image has been checked separately
- No oversized original is being downloaded unnecessarily
- Actual network requests have been inspected
- Image quality remains acceptable
- Mobile performance has been tested
Final Verdict
Image optimization is not one setting.
WebP and AVIF can reduce the amount of data required to deliver images. Proper dimensions prevent oversized files from being downloaded. srcset and sizes allow browsers to select more appropriate resources for different layouts. Explicit dimensions help reserve space. Lazy loading prevents non-critical images from competing with the initial page experience.
The strongest implementation combines all of these decisions rather than relying on any one of them.
If you remember only one principle, make it this:
Send the right image, at the right dimensions, in an efficient format, at the right time.
That is what effective image optimization really means.
Related Guides
Consider linking this article with these relevant Friday topics:
- What Is LCP? Largest Contentful Paint Explained
- How to Fix Poor LCP: A Practical Troubleshooting Guide
- Why Your LCP Image Loads Slowly
- How TTFB Affects LCP
- What Is CLS? Cumulative Layout Shift Explained
- Website Speed Optimization Checklist
- Lighthouse vs CrUX: Lab Data vs Real-World Data
Recommended Resources
- web.dev: Optimize Images: Learn how image formats, compression, and delivery choices affect website performance.
- MDN: Responsive Images: Understand
srcsetandsizesfor delivering appropriately sized images to different screens. - Google Search Central: Image SEO Best Practices: Explore image discoverability and optimization guidance.
- web.dev: Optimize Largest Contentful Paint: Learn how to identify and prioritize the LCP resource.
- MDN: Lazy Loading: Understand native lazy loading for images and iframes.