To optimize images for WordPress without a plugin, shrink them before they reach the Media Library: resize each photo to the widest width it will actually display, compress it as WebP or JPEG, and upload the result. That handles slow pages and upload errors together. The table maps each problem to the Smol setting.
| What you are seeing | The limit you hit | The Smol setting |
|---|---|---|
| Pages load slowly and the images are the heaviest part | Files far larger than their on-screen size; WordPress itself only rescales above 2560 px | Compress, maximum dimension at your content width (2000 as a start), quality 75 |
| “Exceeds the maximum upload size for this site” | The host’s limit, shown on the Media screen; PHP’s own default is 2M | Same pass: resize first, then check the largest output against the limit |
| You want WebP but your camera or phone gives JPEG or HEIC | WordPress accepts WebP from 5.8 if the server supports it | Compress with output format WebP (not Convert) |
| Hundreds of old uploads are heavy | Replacing them one at a time is slow | Drop the downloaded folder in as one batch |
What is the best WordPress image size?
The best WordPress image size is the widest width the image displays at, not the width your camera produced. A 4000 px photo in an 800 px column carries 25 times the pixels of the space it fills, because the ratio is 5 on each side. Match the file to the layout.
WordPress rescales less than you might expect. Since version 5.3 it scales an upload down when either side passes 2560 pixels, keeps the original in the uploads folder, and exposes a big_image_size_threshold filter to change the number, according to the core team’s announcement. A 2400 px photo passes through untouched. WordPress then makes smaller copies for the thumbnail, medium and large sizes you can set under Settings, Media (the Media settings screen explains the fields), but those copies come from whatever you uploaded.
As a target, WordPress’s own image size and quality guide says large, high-quality images should be kept between 100K and 60K, and smaller ones nearer 30K and lower. That is an old rule of thumb, and a full-width hero will not fit it at 2000 px, but it shows the order of magnitude a page can afford.
Pixel width for common layouts
Start from the container. For a 1200 px content column, 2000 px covers a 1.5 times density screen with room to spare; for a 700 px blog column, 1400 px covers 2 times density. These are starting points of ours, not a WordPress rule. Check the result in your theme.
Why are my WordPress images slow?
WordPress images are slow when the files are oversized, in a heavy format, or loaded at the wrong time. The first two you fix before upload. The third is a template question: Google’s web.dev study of lazy loading reports that 84% of sites using browser-level image lazy loading run WordPress. In its lab test of a demo WordPress site, disabling lazy loading on archive pages cut desktop LCP from 2,029 ms to 1,759 ms.
- Oversized pixels. Camera and phone files often carry far more pixels than a blog column can show.
- Heavy format. PNG for photographs, or JPEG at very high quality, when WebP would do.
- Wrong loading. The top image should load at once; lazy loading belongs below the fold. Your theme or an editor setting decides that, not the file.
If you manage sites for clients, the web agency workflow covers the same steps at volume, and blog image optimization covers post images. For measurements across a page, see our write-up on image optimization for Core Web Vitals and the web developer guide. For the file side, the numbers on the benchmark page show what a local pass saves.
What is the WordPress max upload size, and how do I stay under it?
The limit on your site comes from your host. It appears on the Media upload screen, which the Media Add New documentation describes as the maximum upload size “as set by your hosting provider”.
PHP’s built-in defaults are small: per the PHP manual, upload_max_filesize is 2M and post_max_size is 8M, and post_max_size must be larger than upload_max_filesize for big uploads to work. Your host may have changed both, so read your own number rather than assuming.
| Limit | Figure | Where it comes from | Source |
|---|---|---|---|
| WordPress scales images down above | 2560 px on either side | Core, adjustable by filter | Core blog |
| PHP upload_max_filesize default | 2M | PHP, then your host | PHP manual |
| PHP post_max_size default | 8M | PHP, then your host | PHP manual |
| WebP uploads accepted from | WordPress 5.8 | Needs server support | Core blog |
| AVIF uploads accepted from | WordPress 6.5 | Needs server support | Core blog |
| Your site’s upload cap | Shown on the Media screen | Your hosting provider | Media screen docs |
Resize before you compress, since pixels cost the most bytes. Smol sets quality and pixel size, not a file size, so it cannot promise a file lands under your cap. Run the batch, sort the output by size, and compare the largest file to the number on your Media screen.
Can I use WebP in WordPress, and what changes?
Yes. WordPress has accepted WebP uploads since version 5.8, provided your server supports it; the announcement warns that an unsupported server shows an error when you try to upload one.
The detail that matters: by default WordPress makes its smaller copies in the same type as the file you uploaded. Upload a JPEG and the thumbnails are JPEG. Upload a WebP and they are WebP. So the format you choose before upload is the format your visitors get, and doing the conversion on your Mac is how you get WebP on a stock install. AVIF follows the same logic from 6.5, again only where the host supports it (6.5 notes).
If your audience is wide and your theme is old, JPEG at 75 is the conservative choice. On 24 small test photos, compressing JPEG to JPEG at quality 75 made them 69.3% smaller, and compressing PNG to AVIF at quality 65 saved 92.1% (benchmark data). Those images are 768 × 512 film photographs, so treat the figures as a direction, not a promise for your camera files.
Which Smol settings should I use for WordPress?
Use Compress with output WebP or JPG, quality 75, and a maximum dimension equal to your content width. Smol resizes images to fit inside 2000 × 2000 pixels unless you change it, which already sits under WordPress’s 2560 px threshold.
| Image | Output format | Quality | Maximum dimension |
|---|---|---|---|
| Blog post photo | WebP (JPG if your theme is old) | 75 (the default) | 1400 to 2000 |
| Full-width hero | WebP | 75, raise to 80 for smooth gradients | 2000, or up to 2560 if you need it |
| Product photo with fine detail | WebP | 80 | 2000 |
| Screenshot or graphic with text | PNG or WebP; compare both | 75, check that text stays sharp | Actual display width |
| iPhone HEIC shots | JPG or WebP, using Compress | 75 | 2000 |
| Photos with GPS you do not want public | Any | Metadata stripping is on by default | Verify one output |
Leave the resize mode on fit. The other modes can crop. One run makes one size, so if your theme needs a 400 px version and a 2000 px version of the same photo, those are two runs with renaming in between. WordPress builds its own thumbnails, so for most sites one run per batch is enough.
How do I optimize images for WordPress without a plugin, step by step?
Collect the originals in one folder
Smol writes copies with a
_compressedsuffix and does not overwrite originals by default.Drag the folder into Smol
Folders are accepted, and a batch can mix file types.
Choose Compress and set WebP or JPG at quality 75
Then set the maximum dimension from the settings table, resize mode fit.
Run it and read the per-file sizes
Smol shows each file’s savings. Check the largest output against the upload limit on your Media screen.
Upload through the Media Library
Upload the compressed copies. WordPress then makes its thumbnail, medium and large versions from them.
Add alt text and check the page
Open the page in a private window and look at the network panel to confirm the image bytes dropped.

What about images already in my library?
Download the uploads folder by SFTP, run it through Smol as one batch, and keep a backup of the originals. By default the output gets a new name, so change the output naming in settings if your posts link to the old filenames. Upload through the Media screen so WordPress makes its own smaller copies. Test on a handful first. Smol’s watched folders suit a folder of fresh screenshots, not a library that is already optimized.
What do site owners use to shrink WordPress images today?
Free and built-in options come first, and several are good enough for a small site.
| Option | Cost | Where it runs | Good for | Limitation |
|---|---|---|---|---|
| Preview export on Mac | Free, built in | Your Mac | A few photos | One at a time; manual quality slider |
| sips in Terminal | Free, built in | Your Mac | Fast resizing in a script | Command line only; no batch progress or per-file savings view |
| Squoosh and similar web tools | Free | Your browser | Comparing formats by eye | Manual, image by image; see the comparison for maintenance status |
| TinyPNG-style online compressors | Check their pricing | Their servers | Quick one-offs | Your files are uploaded to a third party |
| A WordPress optimization plugin | Varies | Your server | Automatic on upload | Adds the plugin you set out to avoid |
| Smol | Solo $29 once | Your Mac | Batches, folders, WebP, strip metadata | Mac only; manual step before upload |
If you want lossless-only shrinking with no quality change, see our ImageOptim comparison. For the broader web workflow, the compress images for web page covers the settings in more depth.
When is Smol the wrong tool for WordPress images?
Smol is a Mac app that works before upload. It is the wrong choice in these cases:
- Many authors upload from many devices. A pre-upload step depends on each person doing it. A server-side tool or the Smol API fits better. If you build sites for clients, see the agency page.
- You are not on a Mac. Smol runs on macOS 13 or later (Apple Silicon) or macOS 14 or later (Intel).
- You need SVG. Smol does not handle SVG, which is common for logos.
- You need pixel-identical, lossless optimization. Smol always re-encodes images; ImageOptim is the lossless route.
- You need several responsive widths per image in one run. Smol makes one size per run. WordPress already builds its own set from your upload.
Frequently asked questions
How do I optimize images for WordPress without a plugin?
Resize and compress the images on your computer before you upload them. Set the width to the widest the image displays, save as WebP or JPEG at a moderate quality, and check the file is under your upload limit. In Smol, drag a folder in, choose Compress, set the format and maximum dimension, then upload the copies through the Media Library.
What is the best WordPress image size?
Match the width of the space the image fills, with some allowance for high-density screens. WordPress only scales an upload down automatically when a side passes 2560 pixels, so a 4000 pixel photo in an 800 pixel column goes through untouched. Smol’s default maximum of 2000 pixels is a workable ceiling for a typical content column.
What is the WordPress max upload size?
It is set by your hosting provider, and the Media upload screen shows it. PHP’s defaults are 2M for upload_max_filesize and 8M for post_max_size, and hosts often change them. Resize first, then compress, then compare your largest file with the number on your screen. Smol sets quality and pixels, not a byte target, so check the result.
Does WordPress support WebP?
Yes, since version 5.8, if your server supports it. An unsupported server shows an error on upload. WordPress makes its smaller copies in the same type as the upload, so a WebP stays WebP. In Smol, use Compress with output format WebP so your quality setting applies; Convert does not use it.
Why are my WordPress images slow even though I compressed them?
Compression is only part of it. Check pixel width, since a compressed 4000 pixel image is still large, and check whether your top image is lazy-loaded. In a web.dev lab test of a demo WordPress site, lazy loading on archive pages raised desktop LCP from 1,759 ms to 2,029 ms. Load the first image at once and lazy-load the rest.
Will compressing remove GPS data from my photos?
Smol strips image metadata by default, including EXIF, GPS, IPTC and XMP, and that includes copyright and contact fields. You can switch it off if you want to keep them. Check one output in Preview’s Inspector before you publish. Photos taken on a phone can carry location unless it is removed.
Keep reading
Smol for other teams
