← All guides

Reduce Image Size for Faster WordPress

Images are the #1 cause of slow WordPress sites. Resize before upload, serve WebP, lazy-load, pick the right plugin — the full workflow.

By Formatly

If your WordPress site is slow, images are almost certainly the reason. The typical pattern: someone uploads 5 MB phone photos straight from the camera roll, WordPress dutifully serves them, and every page loads like it’s 2009. Here’s the complete workflow to fix it — most of it takes an afternoon.

Step 1: Resize BEFORE uploading (the biggest win)

WordPress generates thumbnails, but it still stores and often serves your original. A 4032 × 3024 iPhone photo displayed at 800px wide is ~90% wasted bytes. Resize images to their display size before they ever touch WordPress:

  • Blog content images: 1200–1600px on the long edge is plenty
  • Hero/banner images: match your theme’s max content width (commonly 1200–1920px)
  • Thumbnails and avatars: let WordPress handle these from a sane original

Resize in your browser — no plugin needed for this step, and doing it before upload means your media library stays lean forever.

Step 2: Compress every image

After resizing, compress. For WordPress content images, JPG/WebP at quality 80–85 is the sweet spot — visually identical to the original at a fraction of the size. Typical results:

OriginalAfter resize + compress
4.5 MB phone photo120–200 KB WebP
2 MB screenshot PNG150 KB WebP (or keep PNG if text-heavy)
800 KB product photo90 KB WebP

Compress them before upload, or use a plugin (below) to handle existing library images.

Step 3: Serve WebP (or AVIF)

WordPress has supported WebP uploads since version 5.8, and modern WordPress generates WebP sub-sizes automatically. You have two approaches:

Convert before upload (recommended). Upload WebP files directly. You control the quality, there are no plugin surprises, and it works on every host. Convert to WebP in bulk, then upload.

Use an optimization plugin. Plugins like ShortPixel, Imagify, or Smush convert your existing media library to WebP and serve them automatically. This is the pragmatic choice if you already have thousands of images uploaded — just be aware most operate on freemium credit models, and you’re trusting a third party with your media.

Either way, keep JPG fallbacks in mind for the small fraction of ancient browsers — WordPress core and good plugins handle this.

Step 4: Lazy-load (it’s probably already on)

WordPress has added loading="lazy" to images automatically since version 5.5. Verify it’s actually working — some themes and page builders strip it. Exclude your hero/LCP image from lazy loading (most optimization plugins let you exclude by class or URL); lazy-loading the largest image hurts the metric you’re optimizing.

Step 5: Fix the images already in your library

New uploads are only half the battle. For the existing media library:

  1. Install a bulk optimization plugin and run it once over the library (overnight for large sites)
  2. Use a plugin like “Media Cleaner” carefully to find unattached images — but back up first; false positives happen
  3. For the worst offenders (multi-MB originals), consider re-uploading properly resized versions — plugins can’t recover quality lost to bad originals, but they can shrink the files

Step 6: Pick the right plugin stack (don’t overdo it)

You need one image optimization plugin, not three. Running multiple optimizers causes double-compression and conflicts. A sane stack:

  • One image optimizer (ShortPixel / Imagify / Smush — pick one)
  • One caching plugin (which often includes its own lazy-load — disable duplicates)
  • CDN with image optimization (Cloudflare Polish, Bunny, etc.) as an alternative to plugins entirely

More plugins ≠ faster site. Audit with Query Monitor if you’re unsure what’s actually running.

What about retina / 2× images?

WordPress’s srcset serves larger variants to high-DPI screens automatically. You don’t need to manually upload 2× versions — upload one good-quality original at ~2× your display size and let srcset do its job. Uploading only a 1× image looks soft on modern phones and laptops.

Measure, don’t guess

Before and after, test with:

  • PageSpeed Insights — the official Core Web Vitals verdict
  • GTmetrix / WebPageTest — filmstrip view shows exactly which images block rendering
  • Your media library sorted by file size — the hall of shame tells you where to start

Target: every content image under ~200 KB, hero under ~300 KB. If your homepage’s images total under 1 MB, you’re doing better than most of the web.

Practical next steps

  • Resize your images to content width before uploading — the single biggest win.
  • Batch convert to WebP for the whole media folder in one pass.
  • Compress anything that’s still too heavy, with a visual quality preview.