Why WordPress images are often slow
WordPress 6.6 (June 2024) did introduce a native WebP generator, and WebP has been created alongside JPG by default since June 2024 — but three problems remain. First: AVIF isn't natively supported; the best modern format is missing. Second: many themes and builders (Elementor, Divi) create images via CSS backgrounds, which get no <picture> element. Third: media-library images from 2019 were never converted to modern formats, and retroactive conversion is laborious.
For a basics overview on theme selection, see our WordPress image basics post; here we cover the 2026 plugin stack.
The native WordPress 6.6+ pipeline
Standard out of the box since June 2024: WordPress automatically generates WebP variants of all uploaded JPG/PNG, in all registered image sizes (thumbnail, medium, large, full). The theme then gets a modern <img> tag with a correct srcset via wp_get_attachment_image().
Strengths: free, no plugin, integrated. Weaknesses: no AVIF, no <picture> tag with a format cascade, double storage consumption (JPG + WebP), and the filter to deactivate it is obscure. To control storage use, you can steer it via the wp_image_editor_output_format filter.
The plugin options 2026
Four plugins dominate the market for pro requirements:
ShortPixel Image Optimizer
Paid after a trial volume. Uploads images to ShortPixel servers, compresses them there (lossy, glossy, lossless), returns AVIF + WebP. Also detects CSS background images via a DOM scan.
Costs 2026: 100 images/month free, 5,000/month for $4.99, 50,000/month for $29.99. For mid-size e-commerce shops with ~10,000 products the mid tier often isn't enough. Lock-in: images are hosted on the ShortPixel CDN; when the subscription ends, they're gone.
EWWW Image Optimizer
Established since 2013. Optimizes locally by default (lossless); the cloud variant with Easy IO (CDN) is premium. Generates WebP + AVIF, delivers via <picture> with a JS helper.
Costs 2026: free for local compression, Easy IO from $7/month unlimited. Strengths: no lock-in on the free tier, a good cloud option. Weaknesses: a somewhat dated UI, many settings.
Imagify
From the WP Rocket team. A clear UI, good default settings, AVIF since 2024. Cloud-based.
Costs 2026: 20 MB/month free, Lite from $2.99/month for 500 MB, Plus $5.99/month for 1 GB, Infinite $9.99/month for unlimited. For mid-size sites Lite is often enough.
Cloudflare Polish + Mirage
If you use Cloudflare as a CDN (increasingly the standard), Polish (Pro plan, $25/month) gives you automatic WebP/AVIF conversion at the edge, without converting the original images. The media library stays in JPG/PNG — Cloudflare optimizes at request time.
Strengths: no plugin, no server load, a perfect cache hit rate. Weaknesses: Cloudflare lock-in, the Polish setting needs some testing effort, and not all themes deliver Polish-friendly HTML.
Lazy loading and Core Web Vitals
WordPress 5.5+ automatically marks images with loading="lazy" — good. But: it applies to all images, including the LCP hero. Result: LCP suffers measurably. The 2026 solution: plugins like WP Rocket or Perfmatters detect the LCP image automatically, set fetchpriority="high", and remove lazy. Manually, it also works via a theme filter.
More on the Core Web Vitals impact in our CWV post.
Media-library migration: old images to AVIF
An often-underestimated item: an existing media library with thousands of original JPGs from past years. Three migration routes:
- Plugin bulk run. ShortPixel, Imagify, and EWWW have "bulk optimize" buttons that process all existing images. ~2–5 seconds per image, so hours to days at 10,000 images.
- A WP-CLI script with Sharp. With WP-CLI access you can write a Node script that walks the uploads directory and generates AVIF + WebP. Saves the plugin subscription.
- Use Cloudflare Polish. With Polish enabled, the migration is "automatic" — on the image's first request, Cloudflare serves AVIF. No bulk run needed.
Recommendation matrix by site size
- Small blog sites (<500 images): WordPress-native WebP + Imagify Lite. A cost-comfortable start.
- Mid-size sites (500–5,000 images): ShortPixel or EWWW Easy IO with cloud conversion. Enable AVIF.
- E-commerce with a large product catalog (5,000+ images): Cloudflare Polish (Pro plan) as edge conversion. Any plugin pipeline would hit its limits.
- Photo magazines, photo blogs: ShortPixel in glossy mode. Keep the JPG original for quality-conscious readers.
- Multisite networks: EWWW or Cloudflare Polish — both multisite-compatible; ShortPixel has historically had problems here.
Don't forget the server configuration
The server side has to play along too. Three common problems:
- memory_limit too low. AVIF encoding needs a lot of RAM. On shared hosts with 256 MB the encoder fails. At least 512 MB for comfort.
- Missing ImageMagick / Sharp. WordPress uses GD or ImageMagick. AVIF encoding needs ImageMagick > 7.0.25 or the
@cf/vipsadd-on. Check with your host. - Missing Cache-Control headers. Optimized images must be delivered with
Cache-Control: public, max-age=31536000, immutable. On many hosts this has to be added in .htaccess or nginx.conf.
WordPress 7.0 — what's coming?
According to the WordPress roadmap, native AVIF encoder integration arrives in 2026 (early beta since WordPress 6.8). That makes a large part of the plugin pipelines redundant — at least for sites without a CDN strategy. Plugins will differentiate via CDN edge optimization, smart crop, and AI background removal.
Sources
WordPress Make — WebP by default · ShortPixel — Pricing · EWWW Image Optimizer Pricing · Imagify Pricing · Cloudflare Polish · WordPress Make Core · ImageMagick — Format Support.