Why Unoptimized Images Slow Your WordPress Site Down
When you optimize images in WordPress, you are usually fixing the single biggest source of page weight on the site. A phone photo straight from a camera can be 4,000 pixels wide and several megabytes, while the slot it fills on the page might only be 800 pixels wide. The browser still downloads the whole file, and on a mobile connection that delay shows up directly in Largest Contentful Paint and in how fast the page feels.
WordPress already helps. Every upload generates smaller copies — thumbnail, medium, medium-large, and large — and serves the right size through responsive srcset markup. Large uploads over 2,560 pixels wide are scaled down automatically. But WordPress does not resize your original to the display size, convert it to a modern format, or compress it aggressively. That part is your workflow, and this guide walks through it step by step.
Step 1: Resize Images Before You Upload Them
Resizing before upload is the highest-impact habit here, and it costs nothing. Check how wide the image will actually display — a blog column is usually 700–800 pixels wide, a full-width hero rarely more than 1,920 — and export at that width, not at the camera’s full resolution.
A practical rule of thumb:
- Blog content images: 800–1,200 pixels wide
- Full-width heroes: 1,600–1,920 pixels wide
- Featured images: 1,200 pixels wide (this also suits social sharing previews)
Free tools such as Squoosh handle batch resizing well. Do this before upload: WordPress keeps your original file alongside every generated size, so an oversized original wastes storage even if visitors never see it.
Step 2: Pick the Right Image Format
Format choice alone can cut a file by a quarter or more, before you touch a compression slider. Here is how the options compare for typical WordPress use:
- WebP: the sensible default in 2026. WordPress has accepted WebP uploads since version 5.8, browser support is effectively universal, and WebP files are typically 25–35% smaller than equivalent JPEGs with no visible quality loss. WebP also supports transparency, so it can replace many PNGs.
- AVIF: even smaller than WebP, but encoding is slower and older browsers need a fallback. Use it as a progressive enhancement through a plugin or CDN, not as your only format.
- JPEG: still fine for photographs when you need maximum compatibility, for example in email templates or downloads. For on-page photos, WebP beats it.
- PNG: reserve it for logos, icons, and graphics that need transparency or razor-sharp text. Never use PNG for photographs — the files are far larger than they need to be.
- SVG: the right choice for simple logos and icons, since it scales to any size without growing in file size.
If your workflow only changes one thing, make it this: export photographs as WebP instead of JPEG.
Step 3: Compress Without Visible Quality Loss
Compression has two modes, and the distinction matters. Lossless compression shrinks the file without changing a single pixel — safe, but the savings are modest. Lossy compression discards data the eye barely notices, which is where the big savings live. For photographs on the web, lossy compression at a sensible quality setting is visually identical to the original.
WordPress already compresses JPEG uploads at 82% quality by default. That is a reasonable baseline, but to optimize images in WordPress at scale you need a dedicated optimizer: one that strips metadata, applies smarter encoding, and generates WebP or AVIF copies. The established plugins each take a different approach:
- ShortPixel: API-based, with strong WebP and AVIF support and bulk optimization.
- Imagify: straightforward auto-optimization on upload, with bulk optimization and WebP conversion.
- Smush: popular free option with bulk optimization and lazy loading built in; WebP conversion sits in the Pro tier.
- EWWW Image Optimizer: compresses locally on your own server with no monthly quota.
Whichever plugin you choose, test it first on a photo, a screenshot, and a graphic with text, compared side by side at 100% zoom. Screenshots and text-heavy graphics show artifacts sooner than photographs, so they may need a higher quality setting or to stay as PNG.
A sensible starting point for photographs is WebP at quality 75–82. If you cannot see a difference at full size, the smaller file wins — nobody viewing your site will pixel-peep harder than you just did.
Step 4: Let WordPress Serve Responsive Sizes
One easy mistake is undoing WordPress’s responsive images by leaving an inserted image at “Full” size — a phone visitor may then download the 1,920-pixel version for a 360-pixel-wide screen.
Instead, insert images at the size closest to their display slot — usually “Large” or “Medium Large” for content images — and let WordPress’s srcset attribute do the rest. The browser then picks the smallest generated copy that still looks sharp on that device, including higher-resolution copies for retina screens.
If your theme needs a size WordPress does not generate, register it in code rather than uploading a second copy by hand:
add_image_size( 'blog-hero', 1200, 630, true );
The true at the end enables hard cropping to exactly those dimensions. After adding a new size, existing uploads will not have it — run a thumbnail-regeneration plugin once so the whole library gains the new copy.
Step 5: Lazy Load Everything Except the Hero
WordPress lazy loads images by default, adding loading="lazy" to images below the fold so they only download when the visitor scrolls near them. That is exactly right for content images, galleries, and footers.
The exception is the image visitors see first. Lazy loading your hero delays the very element that Largest Contentful Paint measures, so it hurts the score you are trying to improve. Keep the hero eager-loaded and, if your theme or plugin supports it, give it high fetch priority. I covered the full technique in my guide to lazy loading images in WordPress, and the same principle drives the fixes in my LCP improvement guide.
Step 6: Optimize the Library You Already Have
New uploads are only half the job on an established site. To optimize images in WordPress across a library you already have, use your plugin’s bulk optimization: it walks through the Media Library, compresses each image, and generates WebP or AVIF copies. Run it in batches on a large library rather than all at once, and take a backup first — the same rule as any bulk operation.
While you are there, audit for waste: old header images from retired designs, duplicate uploads, and full-size images inserted where a medium copy would do are all common. Deleting unused images also shrinks your backups, which makes backup and restore faster too.
Finally, check the result instead of assuming it worked. Open PageSpeed Insights on a heavy page before and after, and compare total page weight and LCP. If your caching plugin has image optimization of its own — LiteSpeed Cache does, and I walked through its settings in my LiteSpeed Cache configuration guide — make sure you are not running two optimizers that fight over the same files. One pipeline, configured well, beats two stacked ones.
Common Image Optimization Mistakes to Avoid
- Uploading PNG photographs: a PNG photo can be five times larger than the same shot as WebP, for zero visible benefit.
- Compressing the hero too hard: the largest image on the page is also the most visible. Keep its quality high; save aggressive compression for below-the-fold images.
- Forgetting alt text: optimization is not only about bytes. Descriptive alt text helps accessibility and gives search engines context for the image — write it when you upload, not later.
- Skipping the backup: bulk optimization rewrites files. A backup before the run turns any surprise into a five-minute restore.
- Optimizing once and stopping: every new upload reintroduces the problem unless resizing and auto-optimization are part of your publishing habit.
Quick Checklist
- Resize to display width before upload (800–1,200px for content, up to 1,920px for heroes).
- Export photographs as WebP; keep PNG for logos and graphics with text.
- Enable auto-optimization on upload with one plugin (ShortPixel, Imagify, Smush, or EWWW).
- Bulk-optimize the existing library, after a backup.
- Insert images at the right size so
srcsetcan serve responsive copies. - Lazy load below-the-fold images; keep the hero eager-loaded.
- Verify with PageSpeed Insights and descriptive alt text on every image.
Image optimization is unglamorous work, but it is the rare performance task where the payoff is immediate and the risk is low. Resize before upload, switch photographs to WebP, compress on upload, and let WordPress handle responsive delivery — most pages will drop a meaningful share of their weight without any visitor noticing a difference in quality. For a deeper look at the format trade-offs, see the guides on WordPress image optimization and WebP vs AVIF vs JPEG.
If your WordPress site still feels slow after optimizing images, or you would rather have the whole performance stack — caching, image delivery, and Core Web Vitals — handled for you, get in touch through my contact page and I will take a look.