Images are the most-overlooked performance issue on WordPress, and the highest-leverage fix. A site that loads in 5 seconds today usually loads in 1.5 seconds after the image pipeline gets cleaned up — without changing anything else.
The complete pipeline, in order
Step 1: enforce a maximum upload dimension
If your design displays the largest image at 1600px wide, no image needs to be uploaded at 4000px. Most WordPress page builders and themes have a setting for this; if yours does not, plugins like Imsanity will resize on upload automatically. This single step prevents the most common source of bloat: a 6MB iPhone photo getting uploaded as-is and served at 1200px.
Step 2: convert to WebP (or AVIF)
JPEG and PNG are 30-year-old formats. WebP gives you the same visual quality at 30-50% smaller file size, and every modern browser supports it. AVIF is even better but support is still patchy. Plugins like ShortPixel, Imagify, or EWWW handle the conversion automatically and serve the right format per browser.
Step 3: aggressive but smart compression
For photographs, lossy compression at 80% quality is virtually indistinguishable from the original. For graphics with sharp edges (logos, screenshots), lossless compression is safer. Image optimization plugins do this distinction automatically if you let them.
Step 4: serve the right size for the device
WordPress generates several sizes of every uploaded image — thumbnail, medium, large, and theme-specific sizes. Modern WordPress emits a srcset attribute on every image so the browser picks the right size for the viewport. If your theme is overriding this, you are sending desktop images to phones. Audit and fix.
Step 5: native lazy loading
Since WordPress 5.5, images get loading="lazy" automatically — the browser does not download images that are below the fold until the user scrolls. Verify your theme is not stripping this attribute. If it is, fix the theme or use a plugin to re-add it.
Step 6: explicit dimensions
Every image needs width and height attributes so the browser can reserve space before the image loads. Missing dimensions cause layout shift, which hurts both user experience and Cumulative Layout Shift scores. WordPress emits these by default; double-check your theme has not stripped them.
Step 7: CDN delivery
A CDN serves images from a server geographically close to the visitor. For a global audience, this single change can cut image load time by 200-500ms. Cloudflare's free tier handles this, and they will also do automatic image optimization on Pro and above.
The result
A correctly-configured pipeline turns "the slowest images on the site weigh 800KB each" into "every image is under 100KB and loads only when needed." On a typical WordPress site, this drops total page weight from 3MB to under 1MB without removing a single image.
What we do on managed sites
Every site we maintain runs ShortPixel for compression and WebP conversion, Cloudflare for CDN, and a configuration audit during onboarding to verify the seven steps above. The Thrive plan includes a monthly speed-optimization pass where we re-audit the pipeline as new images get uploaded.