You've uploaded images to your WordPress site — but instead of seeing your beautiful photos and graphics, you're looking at broken image icons, blank white spaces, or placeholder boxes where the images should be.
WordPress image display problems are incredibly common, and they show up in all sorts of ways:
Each scenario has a different root cause — but all of them have clear, testable fixes. This guide covers the 7 most effective ways to resolve WordPress images not displaying.
.htaccess can block the server from serving media files correctlyAlways start here — it takes 30 seconds and eliminates the most common false alarm. Your browser caches web pages and their resources aggressively. If images were temporarily broken and then fixed, your browser may still be serving the old broken version from cache.
Hard refresh the page:
Ctrl + Shift + RCmd + Shift + RClear your full browser cache:
Test in a private/incognito window — This bypasses cache entirely and gives you a clean view of your site.
Test in a completely different browser — If images show in one browser but not another, it's definitively a browser cache or extension issue.
WordPress image files need specific permissions to be readable by the web server. If permissions are set too restrictively — often after a manual FTP upload, a server migration, or a security hardening operation — the server will refuse to serve the images.
Correct permission values for WordPress media:
| Item | Correct Permission |
|---|---|
/wp-content/uploads/ folder | 755 |
| All subfolders inside uploads | 755 |
| All image files (.jpg, .png, .gif, etc.) | 644 |
How to fix via FTP (FileZilla):
/wp-content/uploads/uploads folder → File Permissions755 and check "Recurse into subdirectories"uploads folder again → File Permissions644 and check "Recurse into subdirectories"How to fix via SSH:
# Fix folder permissions
find /path/to/wordpress/wp-content/uploads/ -type d -exec chmod 755 {} \;
# Fix file permissions
find /path/to/wordpress/wp-content/uploads/ -type f -exec chmod 644 {} \;
This is the most common cause of all images suddenly breaking at once — especially after moving to a new domain, switching from HTTP to HTTPS, moving from a subfolder to the root, or migrating to a new server.
WordPress stores the full absolute URL of every image in the database. If your domain or URL structure changes, every single image URL becomes wrong.
How to identify this problem:
Right-click a broken image on your site and select "Open image in new tab". If the URL shows your old domain, old HTTP address, or wrong path — this is your problem.
How to fix it with Better Search Replace:
http://olddomain.com)https://newdomain.com)Common URL replacements to run:
| Search For | Replace With |
|---|---|
http://yourdomain.com | https://yourdomain.com |
http://www.yourdomain.com | https://yourdomain.com |
https://olddomain.com | https://newdomain.com |
http://localhost/mysite | https://yourdomain.com |
WordPress doesn't just store the original uploaded image — it automatically generates multiple resized versions (thumbnails) at specific dimensions defined by your theme and plugins. These are used for featured image boxes, gallery grids, archive pages, and more.
If these thumbnail files are missing or were never properly generated — which happens after theme switches, plugin changes, migrations, or PHP memory issues during upload — you'll see broken images wherever those specific sizes are expected.
How to regenerate thumbnails:
Alternative: Use WP-CLI (for advanced users)
wp media regenerate --yes
When to use this fix:
A corrupted or misconfigured .htaccess file can block the web server from serving image files — particularly if it contains overly aggressive security rules or broken rewrite conditions.
Check for hotlink protection rules:
Open your .htaccess file via FTP and look for a block like this:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [NC,F,L]
This is a hotlink protection rule that blocks other sites from embedding your images. If it's misconfigured — for example, if your domain in the rule doesn't match your actual domain exactly — it can accidentally block your own site from displaying images.
Check that the domain in the rule matches your current live domain exactly, including www vs. non-www and http vs. https.
Reset the .htaccess file:
.htaccess_old via FTP.htaccess fileIf images are breaking specifically during or after upload — thumbnails aren't generated, or uploaded images appear corrupted or blank — PHP memory and upload configuration are likely to blame.
PHP memory limit:
When you upload an image, WordPress uses PHP's GD or Imagick library to process and resize it into multiple thumbnail sizes. This requires significant memory. If PHP runs out of memory mid-process, thumbnails won't be created.
Fix — add this to wp-config.php:
define( 'WP_MEMORY_LIMIT', '256M' );
Upload file size and post size limits:
If large images fail to upload entirely, add to .htaccess:
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 300
php_value max_input_time 300
Or add to php.ini:
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
Check GD or Imagick is installed:
WordPress requires either the GD library or Imagick to process images. Check via Tools → Site Health → Info → Media Handling. If both show as unavailable, contact your hosting provider to enable one.
If your site uses a CDN (Cloudflare, BunnyCDN, KeyCDN) or a caching plugin (WP Rocket, W3 Total Cache, WP Super Cache) — these can occasionally serve stale or incorrect image URLs.
Test by bypassing your CDN:
Add ?nocache=1 to the end of a page URL and see if images display. If they do, your CDN or cache has stale data.
Clear your CDN cache:
Check CDN URL settings:
If your CDN rewrites image URLs to point to its own domain (e.g., cdn.yourdomain.com/wp-content/uploads/image.jpg), make sure:
A quick diagnostic trick that works for any image display problem:
| What You See | What It Means |
|---|---|
| 404 Not Found | The file doesn't exist at that path — wrong URL or file was deleted |
| 403 Forbidden | File exists but permissions block access — fix file permissions |
| The image loads fine | URL is correct — browser cache or CDN was the problem |
| Redirected to homepage | .htaccess rewrite rule is incorrectly catching image requests |
| Image loads but is wrong size | Thumbnail wasn't regenerated — use Regenerate Thumbnails plugin |
wp-content/uploads/, always set permissions to 755 for folders and 644 for files| Symptom | Most Likely Cause | Fix |
|---|---|---|
| All images suddenly broken | Domain/URL change | Run Better Search Replace to update URLs |
| Images broken after theme switch | Missing thumbnail sizes | Regenerate Thumbnails plugin |
| Only thumbnails broken, full images fine | Thumbnail generation failed | Regenerate Thumbnails plugin |
| 403 Forbidden on image URL | Wrong file permissions | Set files to 644, folders to 755 |
| 404 on image URL | File missing or wrong path | Fix URL mismatch or re-upload image |
| Images broken only in one browser | Browser cache | Clear cache, test in private window |
| Images broke after migration | Old URLs in database | Run Better Search Replace |
| Images broke after enabling CDN | CDN serving wrong URLs | Clear CDN cache, check CDN settings |
| Upload works but thumbnail missing | PHP memory too low | Increase WP_MEMORY_LIMIT to 256M |
WP_HOME and WP_SITEURL values for the new domain.
WordPress image display problems are almost always fixable without losing any content — in most cases, images are still physically on the server, they're just being served incorrectly or pointed to the wrong URL.
Work through the seven fixes in order: clear cache first, check permissions, fix URLs if you've recently migrated, regenerate thumbnails, inspect .htaccess, check PHP memory, and rule out your CDN or caching plugin.
Get in touch with us today and we'll get your images back