Upload one photo to WordPress and it quietly creates several resized copies. This is a feature — it lets the site serve a small file to a phone — but left unmanaged it wastes storage and, more importantly, hides the real cause of slow pages.

The Sizes WordPress Creates

Out of the box there are three registered sizes plus the original:

  • Thumbnail — 150 × 150, hard-cropped square by default. Used in admin lists and some widgets.
  • Medium — max 300 × 300, proportional.
  • Large — max 1024 × 1024, proportional.
  • Full — your original file, untouched.

Modern WordPress adds more: scaled versions for big uploads (originals over 2560 px are down-scaled by default), plus responsive sizes used in srcset. Then your theme registers its own — hero, card, gallery, archive thumbnail — and so does each plugin, such as WooCommerce with its catalog, single and gallery sizes. Fifteen files per upload is common on a commerce site.

What to Actually Upload

Upload once, at a sensible ceiling, and let WordPress derive the rest:

  • Content/blog images: 1600 px on the long edge is plenty. It covers full-width display on most themes and retina at typical column widths.
  • Featured images: match your theme's largest registered size — commonly 1200 × 630 or 1920 × 1080. Check the theme docs rather than guessing.
  • Hero/banner: 1920 px wide is the practical maximum; beyond that you're paying for pixels nobody sees.
  • Logos: SVG if the theme allows, otherwise a PNG at 2× the display size.

Compress before uploading. WordPress does not compress your original meaningfully, and the original is what gets served when a theme calls the full size.

Why the Media Library Balloons

Three usual causes:

  1. Uploading camera originals — a 8 MB photo multiplied by fifteen generated sizes.
  2. Old registered sizes left behind after theme changes; the files remain on disk forever.
  3. Duplicate uploads of the same image under different names.

Housekeeping matters, but the fix that actually speeds up the site is uploading right-sized, pre-compressed files in the first place.

Getting Speed Right

  • Serve WebP. Most optimization plugins can convert on the fly; alternatively upload WebP directly, which modern WordPress accepts.
  • Check what's actually being served. Open a page, inspect a large image and look at its rendered vs intrinsic size. Serving a 2048 px file into a 600 px slot is the single most common WordPress performance bug.
  • Set explicit width and height so the browser reserves space and the layout doesn't shift.
  • Lazy-load below-the-fold images (WordPress does this natively) but make sure your hero image is *not* lazy-loaded, since that delays the largest paint.

The summary rule: one right-sized, compressed upload beats any amount of plugin configuration afterwards.