Best Image Sizes for Web Performance in 2026
Why Image Size Matters More Than Ever
Images account for roughly 50% of the average web page's total weight. A single unoptimized hero image can be larger than the entire rest of the page — HTML, CSS, JavaScript, and fonts combined. In 2026, with Core Web Vitals directly affecting search rankings and users expecting near-instant page loads on mobile, getting image sizes right is not optional.
Target File Sizes
For most web use cases, aim for these maximum file sizes after compression. Hero images and large banners should stay under 200 KB. Content images within articles should be under 100 KB. Thumbnails and gallery previews should be under 30 KB. Icons and logos should be under 10 KB, ideally served as SVG.
These are upper bounds, not targets. Smaller is always better as long as the visual quality meets your standards. A well-compressed hero image at 80-120 KB is entirely achievable with modern encoders like MozJPEG or WebP.
Recommended Dimensions
The days of serving a single image size to all devices are over. Responsive images with multiple sizes are the standard approach. That said, here are the maximum dimensions you typically need.
For full-width hero images, 1920 pixels wide is sufficient for virtually all desktop displays. Anything wider is wasted — even 4K monitors displaying a full-width image at CSS pixel dimensions will use at most 1920 CSS pixels (retina displays double the pixel count, so serving a 1920px image to a retina display gives you effective 960 CSS pixel coverage, which is fine with srcset 2x images at 1920px).
For content images within articles (typically constrained to 700-800px wide in the layout), serve 1600px wide as the largest size (for retina), 800px as medium, and 400px as a small mobile version.
For thumbnails in grids and cards, 600px wide covers retina displays for cards that are typically 200-300px wide in the layout.
The Responsive Images Approach
Use the HTML picture element or img srcset attribute to serve different sizes to different devices. This prevents mobile users on slow connections from downloading desktop-sized images they will never display at full resolution.
A common srcset setup provides three sizes: a small version (400px wide, for mobile), a medium version (800px wide, for tablets and small desktops), and a large version (1600px wide, for large desktops and retina displays). The browser automatically selects the appropriate size based on the viewport width and device pixel ratio.
Format Selection for Performance
Serve WebP to browsers that support it (which is all modern browsers) and JPEG as a fallback. The picture element makes this straightforward — list the WebP source first, then the JPEG fallback. This alone can save 25-30% on image payload with zero visual quality loss. For a deeper comparison of the three main formats, see JPEG vs PNG vs WebP.
For icons and simple graphics, SVG is the best choice — it scales to any resolution with zero quality loss and typically weighs less than 5 KB. For photographs and complex graphics, WebP with MozJPEG JPEG fallback is the optimal combination.
Lazy Loading
Use loading="lazy" on all images below the fold. This tells the browser to defer loading images until they are close to entering the viewport, which dramatically improves initial page load time. The one exception is your LCP (Largest Contentful Paint) image — typically the hero image — which should load eagerly to avoid hurting Core Web Vitals scores. For email-specific size constraints, which are stricter than the web, see how to reduce image size for email.
A Worked Example: A Real Article Hero
Suppose you are publishing a blog post with a hero image that displays at 1200×675 in the article layout. Here is how to think about each device tier:
- Mobile (≤640px viewport): serve a 800×450 JPEG/WebP at ~60 KB. The image is displayed at well under 600 CSS pixels wide; anything bigger is wasted.
- Tablet / small desktop (641–1280px): serve a 1200×675 JPEG/WebP at ~120 KB. This matches the layout dimensions exactly.
- Large desktop / retina (>1280px): serve a 2400×1350 JPEG/WebP at ~200 KB. Twice the layout resolution covers retina displays sharply.
A `<picture>` element with `srcset` lets the browser pick the right one automatically. The mobile user gets 60 KB instead of 200 KB — a 70% bandwidth saving on the slowest connection, which is exactly the user who needs it most.
Common Misunderstandings
- "Retina-ready" does not mean serving 4K to everyone. It means having a 2× variant available for high-DPI screens. Low-DPI users still get the 1× version.
- CSS `width` does not reduce the bytes the browser downloads. If you serve a 4000×3000 image and display it in a 400-pixel-wide container, the browser still downloads the full 4000×3000 file. Resizing must happen on the source, not in CSS.
- A "fast" image is not just a small file. It also needs to load early relative to its position on the page. The hero image should load eagerly; everything below the fold should use `loading="lazy"`.
Frequently Asked Questions
Q: What's a good target file size for product images on an e-commerce site?
For a typical 600×600 product image, aim for 30–60 KB. Use MozJPEG or WebP at quality 80. Pages with many product thumbnails (catalog listings, category pages) compound bandwidth quickly — a 100-product grid where each thumbnail is 30 KB instead of 100 KB saves 7 MB per page load. See how compression works for why quality 80 is the practical sweet spot.
Q: Should I use AVIF instead of WebP?
AVIF compresses 20–30% smaller than WebP for the same visual quality, but encoder maturity, CMS support, and email-client support are still behind. For 2026, WebP is the safer default with JPEG fallback. AVIF makes sense as an extra source on `<picture>` elements when bandwidth is the dominant cost.
Q: Do I need different sizes for portrait vs landscape images?
Yes — base your `srcset` widths on the actual rendered width in your layout. A square Instagram-style image rendered at 600×600 needs different breakpoints than a wide blog hero rendered at 1200×675. Match the source dimensions to the largest rendered size at each tier; otherwise you waste bytes.
Ready to compress your images?
Open Compressor