By |

WordPress Image Optimization: Plugin vs Pre-Upload Compression

Most WordPress image optimization advice starts with "install a plugin." Ends with "install a plugin." So half the time you end up with an optimizer you didn't need, plus another update cycle, plus another thing that can break during uploads.

Decide whether you actually need one first.

  • Your Media Library is already full — a bulk optimizer (EWWW, ShortPixel) earns its keep. Processing the backlog is the real value
  • New site, or you have a handful of images — compress before uploading, skip the plugin
  • You're uploading phone photos straight from the camera roll — fix that before anything else. It matters more than every other lever in this article

First: WordPress is already compressing (most people miss this)

WordPress doesn't store your original JPEG untouched — it re-encodes every upload at quality 82 by default, and has since 4.5. Since 5.3, anything whose longest side exceeds 2560px also gets auto-resized (controlled by big_image_size_threshold). Upload a camera original and WordPress quietly serves you a scaled version.

You can change the quality in your theme's functions.php:

add_filter('jpeg_quality', function () {
  return 75; // default is 82; lower = smaller files but more artifacts
});

Go below 75 and you'll start seeing edge artifacts in photographs. Honestly, reducing the file size of what you upload in the first place is a better lever than cranking quality down. You get the same result without the visual cost.

Option 1: Optimize with a plugin

If your Media Library is already stuffed with unoptimized images, this is the fastest path. The real value here is bulk processing the backlog. Automatic optimization of new uploads is a bonus, not the point.

Plugin What it does When it makes sense
EWWW Image Optimizer Runs locally on your server, no image count cap on the free tier. WebP conversion included Large libraries, or you don't want to send images to a third-party API
Smush Simple UI, straightforward setup. Free tier limits batch size Smaller sites, or you just want the path of least resistance
ShortPixel Aggressive compression. Credit-based monthly quota You want maximum file reduction while keeping quality
Converter for Media Focuses on WebP/AVIF delivery rather than compression itself Specifically want next-gen formats served to visitors

Whichever one you go with: back up before running a bulk operation. "I don't like how this looks, let me undo it" isn't always available afterwards. If the plugin offers to retain originals, turn it on. It costs disk space, but it buys you a way out.

Why you might skip plugins entirely

Optimization plugins run image processing on every upload. On shared hosting, that can hit CPU limits and cause timeouts during bulk uploads. Plugin conflicts of exactly this kind are one of the documented reasons image uploads fail in WordPress.

For a small or new site, uploading already-optimized images keeps both your server load and your plugin list lean.

Option 2: Compress before uploading

Structurally the better answer. Less data over the wire, faster uploads, no extra plugin running on every request.

On desktop

  1. Squoosh (browser-based, from Google) — drop an image in and tune quality visually
  2. ImageOptim (Mac) — drag a whole folder for batch processing
  3. 1600px on the longest side is plenty for in-content. Anything over 2560px gets resized by WordPress anyway

On a phone

This is where it breaks, though. iOS Photos doesn't do batch resize, and running images through an editor one at a time isn't a workflow. Meanwhile, iPhone photos are 3-6MB each — over 10MB on Pro models — which is enough to hit upload_max_filesize on plenty of hosts.

SnapPress resizes on send, with three quality presets, so you don't need a separate compression step before uploading. HEIC→JPEG conversion happens in the same pass. If your workflow is "photos taken on a phone, published to WordPress," this keeps the compression work off both your server and your plugin list.

Is WebP worth it?

WordPress 5.8 and later accepts WebP uploads. But automatic WebP generation isn't in core — it was proposed for 6.1 and dropped over server load and storage concerns.

To actually serve WebP you need a plugin (Converter for Media, EWWW) or a CDN-level transform like Cloudflare's. The payoff is real: 25-35% smaller than JPEG at visually equivalent quality, and it compounds on photo-heavy sites.

That said, if your JPEGs are already sized correctly, WebP is a marginal gain. Converting a 1MB image to WebP still leaves you with an image that was never sized properly. Get dimensions right first, then worry about format.

Target sizes that actually matter

Use Dimensions Target file size
In-content images 1200-1600px longest side 100-200KB
Featured images 1200x630px around 150KB
Header / hero images 1920px wide 200-300KB
Thumbnails and icons up to 2x display size under 30KB

These are guidelines, not rules. The real test is whether Largest Contentful Paint lands under 2.5s; once it does, further tuning is optional. For sizing featured images specifically, see WordPress featured image size.

When optimization doesn't make the site faster

A common and frustrating outcome: images are compressed, the score doesn't move. Usually the bottleneck is somewhere else.

  1. Oversized images still requested in HTML — a 1600px file rendering in a 400px slot. Verify srcset is doing its job
  2. LCP isn't an image — run PageSpeed Insights, find the actual Largest Contentful Paint element. If it's a font or a script, image work changes nothing
  3. Lazy loading applied too aggressively — loading="lazy" on an above-the-fold image delays LCP rather than improving it
  4. No CDN — serving every image from one origin means every visitor pays the full distance

Bottom line

  • WordPress already re-encodes JPEGs at quality 82 and resizes above 2560px. You're not starting from zero
  • Plugins earn their place when you're processing an existing backlog. Otherwise, pre-upload compression is cleaner
  • WebP auto-generation isn't in core — you need a plugin or CDN for that
  • Aim for 100-200KB in content, ~150KB for featured. The real benchmark is LCP under 2.5s
  • Uploading phone originals? Fix that before anything else

For managing the library itself, see the WordPress Media Library guide. If uploads are failing outright, start with Cannot Upload Images to WordPress? 8 Causes and How to Fix Each One.

Send iPhone photos to WordPress without a separate compression step

SnapPress resizes on send with three quality presets and converts HEIC to JPEG automatically. Up to 20 photos per batch, straight into your Media Library — no compression plugin, no desktop round trip. Free to start (10 photos/month).

Two steps to start: install the free "SnapPress Connect" plugin on WordPress, then install the iPhone app and pair them with a QR code.

About the author

Ken Furuta

Founder & CEO, 37Design

Founder & CEO of 37Design, a web and AI consultancy based in Tokyo, Japan. Built SnapPress to eliminate the pain of uploading dozens of iPhone photos to WordPress — one by one.

37design.co.jp