Images are uploaded to the media library, appear in the admin, and show correctly in the block editor — but on the published front-end, visitors see only broken image icons or empty placeholders. Or featured images display in the post list but vanish on the actual post page. Or every image worked yesterday and today half of them are broken. WordPress images not displaying is especially confusing because the content exists — it did not disappear — yet something in the delivery chain between database and browser is broken. Each symptom pattern points to a different cause, and identifying which pattern you have makes the fix immediate. You’ll find the complete rundown in our WordPress Errors Complete Guide.
WordPress Images Not Displaying — Diagnose the Pattern First
Two quick checks identify the specific cause of WordPress images not displaying before any fix is attempted. Getting these right saves hours of trying the wrong solution.
Right-click any broken image → “Open image in new tab.” The URL in the address bar reveals everything. If it shows http:// on a site using https://, a mixed content block is hiding the image — the browser rejects HTTP resources on HTTPS pages silently. If the URL contains the old domain after a migration (e.g., oldsite.com/wp-content/…), the database still has the old URL and a search-replace is needed. If the URL looks completely correct but the image still fails to load, right-click → Inspect → Network tab → reload — a 404 status means the file is missing from the server, and a 403 status means file permissions are blocking it.
Next, check whether the problem is universal or selective. Are all images broken, or only specific sizes (thumbnail, medium, large)? If full-size images load but smaller sizes show broken, WordPress never generated those thumbnail variants — image regeneration is the fix. Are images broken only on certain page types (single posts but not archives, or product pages but not the shop)? That pattern points to a template using an unregistered image size name. Are images fine for old uploads but broken for everything uploaded in the last week? A recent change broke the upload path. Matching the symptom to its cause means the WordPress images not displaying fix takes minutes instead of hours, because you are targeting the correct layer from the start. Our guide on fixing WordPress media library not loading covers the related problem of the library interface itself failing, which is a different issue from individual images not displaying on the front-end.
URL Mismatch After Migration or HTTPS Switch
The most common cause of WordPress images not displaying site-wide is a URL stored in the database that no longer matches the current site address. When WordPress stores an image, it saves the full absolute URL — including the domain and protocol. If either changes without updating the database, every stored image URL becomes incorrect.
Fix WordPress images not displaying from URL mismatches with Better Search Replace: install → Tools → Better Search Replace → Search for http://yoursite.com → Replace with https://yoursite.com (or old domain to new domain) → select all database tables → Run. This updates every stored image URL across posts, metadata, options, and widget data in one operation. After the search-replace, purge all caches (caching plugin + CDN if applicable) and reload. Images that were broken due to URL mismatch now display correctly because WordPress fetches them from the updated correct path.
Mixed content is a specific WordPress images not displaying variant where images uploaded before an HTTPS migration retain their http:// URLs in the database. Modern browsers silently block HTTP images on HTTPS pages — the image tag exists in the page source but the browser refuses to load it. The Better Search Replace pass above resolves this for stored URLs. For images dynamically generated by themes or plugins that hard-code HTTP, install the Really Simple SSL plugin which adds a header instructing browsers to upgrade HTTP requests to HTTPS automatically. Check the browser console (F12 → Console) after the search-replace to confirm no remaining “Mixed Content” warnings appear — each warning identifies a remaining HTTP image URL that still needs updating. According to MDN’s web security documentation, browsers have blocked mixed content (HTTP resources on HTTPS pages) by default since 2020, making HTTPS migration the single most common trigger for WordPress images not displaying across all image types simultaneously.
File Permissions and Missing Files
When the image URL is correct and the protocol matches, but images still do not display, the problem is at the file system level — either the image file does not exist at the expected path, or the web server lacks permission to read it. Both produce the same broken image icon on the front-end but have different fixes.
Verify the file exists — the simplest check for file-level WordPress images not displaying: connect via FTP → navigate to wp-content/uploads/[year]/[month]/ → confirm the image file is present. If it is missing, the upload failed silently (often due to a PHP timeout or file size limit at upload time) or the file was accidentally deleted. Re-upload from the original source, or restore from a backup. WordPress stores all image size variants (thumbnail, medium, large, full) in the same folder — a missing full-size file means all sizes are gone; a missing thumbnail file means only that size needs regeneration.
Incorrect file permissions cause WordPress images not displaying by preventing the web server from reading image files even when they exist. All files in wp-content/uploads/ should be 644 (readable by the web server). Folders should be 755. Files uploaded via FTP with a different local user sometimes land with 600 permissions (no world-read), which produces a 403 Forbidden error that manifests as WordPress images not displaying. Fix permissions via FTP: right-click the uploads folder → File Permissions → 755, recurse into subdirectories, apply to directories only → OK. Repeat with 644, apply to files only. Via SSH: find wp-content/uploads -type f -exec chmod 644 {} ; and find wp-content/uploads -type d -exec chmod 755 {} ;. After correcting permissions, broken images display immediately without any WordPress-level change. Our guide on fixing WordPress file permissions covers the full permission structure for all WordPress directories relevant when the permission issue extends beyond the uploads folder.
Regenerating Missing Thumbnail Sizes
WordPress images not displaying in specific sizes — featured images the right dimensions on some templates but cropped wrongly or missing on others, or correctly sized in the media library but broken when inserted as a thumbnail — is almost always a missing intermediate image size that was never generated for existing uploads.
WordPress images not displaying in specific sizes happens because WordPress generates variants at upload time based on the sizes registered by the active theme and plugins. When a new theme is activated (which registers different image dimensions), or when image dimensions are changed in Settings → Media, existing images do not automatically get the new sizes created — WordPress only generates sizes at upload time. The result is WordPress images not displaying in the new sizes while full-size images remain intact. The fix is forcing regeneration of all size variants for all existing media.
Install Regenerate Thumbnails to fix size-specific WordPress images not displaying: free from the WordPress plugin directory → Tools → Regenerate Thumbnails → click “Regenerate All Thumbnails.” The process runs through every attachment and generates any missing size variant registered by the current theme and plugins. For large libraries (thousands of images), this takes several minutes — a progress bar tracks completion. After regeneration, reload any page where images were missing the specific size — they now display correctly because all registered variants exist on disk. If a theme uses a custom image size not registered via add_image_size(), add the registration to the child theme’s functions.php → regenerate thumbnails → the previously missing size is created and the template can find it. For performance, only register image sizes you actually use — every registered size adds processing time at upload and storage footprint on the server.
CDN and Caching Layers Serving Broken Images
A CDN or aggressive caching configuration can cause WordPress images not displaying by serving a cached version of an image URL that no longer resolves — either because the file was moved, the URL changed, or the CDN cached a 404 response and continues serving it.
Purge all cache layers in sequence: caching plugin first (WP Rocket → Dashboard → Clear Cache; LiteSpeed Cache → Toolbox → Purge All; W3 Total Cache → Performance → Purge All Caches), then the CDN (Cloudflare → Caching → Purge Everything; BunnyCDN → Pull Zone → Purge All), then the browser (Ctrl+Shift+Delete → Cached images and files → All time). Testing with a private browsing window after each purge confirms which cache layer was holding the broken image. If images display correctly in a private browser window but broken in a regular window, the browser cache is the culprit — a full browser cache clear resolves it without touching any server configuration.
CDN offloading configurations that serve images from a different subdomain (e.g., cdn.yoursite.com rather than yoursite.com) can cause WordPress images not displaying when the CDN subdomain is not correctly configured or when the SSL certificate does not cover the CDN subdomain. Check: view page source → find an image URL → does it point to a cdn.* subdomain? Navigate directly to that URL in the browser. A “this site can’t provide a secure connection” error confirms an SSL certificate issue on the CDN subdomain. Most CDN providers offer wildcard SSL certificates that cover subdomains — ensure the certificate covering cdn.yoursite.com is correctly configured and renewed. For Cloudflare CDN specifically, ensure the orange cloud (CDN proxy) is enabled for the subdomain in the DNS settings and that SSL mode is set to “Full (strict)” in the SSL/TLS settings. Reviews from the WordPress support community consistently confirm that URL mismatches after HTTPS migration and CDN cache invalidation together account for the majority of WordPress images not displaying reports on established sites.
Plugin Conflicts and srcset Attribute Problems
Some WordPress images not displaying issues are specific to certain plugins modifying image output in ways that break the src or srcset attributes WordPress generates. Security plugins that rewrite image URLs for cloaking, lazy loading plugins that replace the src attribute with a data-src placeholder but fail to reinitialise it, and image optimisation plugins that replace images with WebP versions that the server cannot serve all produce image display failures that look identical to URL and permission problems.
Test without plugins to isolate plugin-caused WordPress images not displaying: access the WordPress admin → use the Health Check plugin’s Troubleshooting Mode to disable all plugins for your session → reload the page with broken images. If they display correctly with all plugins off, a plugin is causing the failure. Re-enable plugins one at a time until the images break again — the last re-enabled plugin is the cause. For lazy loading specifically: the issue is usually a JavaScript initialisation failure that prevents data-src attributes from being swapped back to src. Disabling JavaScript in the browser temporarily (or using NoScript) and reloading the page confirms this — if images display with JavaScript off (since the lazy load JavaScript is not running), the lazy loading plugin’s JavaScript has an error.
The WordPress srcset attribute can also cause WordPress images not displaying on specific screen sizes when intermediate image sizes are missing — the browser selects a srcset size that does not exist on disk and shows a broken image instead of falling back to the full size. Check the page source for the image’s srcset attribute and verify that each URL listed in the srcset actually exists on the server. Any URL that returns 404 is a missing image size — run the Regenerate Thumbnails process above to create all missing variants. After regeneration, the srcset contains only URLs that exist on disk, and the browser can select the correct responsive size without encountering a 404 error. Our guide on fixing WordPress plugin conflicts covers the systematic plugin deactivation process that applies whenever a plugin is suspected of causing image display failures through URL modification or JavaScript interference.
Checking the WordPress uploads directory setting confirms that WordPress images not displaying is not caused by a misconfigured uploads path. Navigate to Settings → Media — the “Store uploads in this folder” field should read wp-content/uploads. If it has been changed to an incorrect path (a common result of a failed migration or a plugin that modified it), new uploads go to the wrong location while old uploads remain at the original path, causing inconsistent WordPress images not displaying where new images appear broken and old images work fine. Reset the path to wp-content/uploads and verify the directory exists on the server with correct permissions before re-uploading any images.
For WooCommerce product images specifically showing as WordPress images not displaying while other post images work correctly, the issue is usually in WooCommerce’s image settings rather than the core WordPress media system. Navigate to WooCommerce → Settings → Products → Display → scroll to “Product Image Size” — if the thumbnail dimensions have been changed after products were uploaded, WooCommerce attempts to serve sizes that do not exist. Running WooCommerce → Status → Tools → Regenerate Product Thumbnails creates all missing WooCommerce-specific image sizes separately from the WordPress core thumbnail regeneration, fixing product image display without touching the rest of the media library.







