Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsIf an image exists in wp-content/uploads but does not appear on your site, diagnose the original file’s direct URL before regenerating thumbnails. Open that URL privately, record whether the server returns 404, 403, or 500, then compare the URL with the exact file path, permissions, ownership, migration settings, and server rules. A 404 usually means the requested path or file is wrong or missing; a 403 means access is being denied; a 500 points to a server or application configuration error.
Antihost offers managed WordPress hosting with free migration, one-click staging and a 14-day free trial.
Start with a three-minute diagnosis
Do not begin by rebuilding the Media Library or creating new thumbnails. Those tools can process an image only after the web server can reach the original file. Use one failing image and follow this sequence:
As an Amazon Associate I earn from qualifying purchases.
- Copy the complete image URL. Copy the value from the page source, block editor, Media Library, or browser inspector. Include the protocol, domain, subdirectory, year and month folders, filename, capitalization, and extension.
- Open the URL in a private browser window. A private window reduces the chance that a logged-in session or cached response is hiding the problem. Record the HTTP status and any response text.
- Compare the URL with the filesystem path character by character. Confirm that the file is inside the active site’s document root, not just in a backup, staging copy, or similarly named directory. Check case, encoded spaces, punctuation, extension, and the year/month directory.
- Inspect the browser and server logs. Developer tools can reveal mixed-content blocks, redirects, CORS failures, hotlink protection, or security responses. The web-server access and error logs should contain the same request and its timestamp.
Use the status code to choose the branch below. Do not treat a thumbnail-regeneration failure as the original problem until the full-size URL works.
What WordPress expects in wp-content/uploads
WordPress uses wp-content/uploads as its default upload directory. When year/month organization is enabled, new media is normally placed in folders such as wp-content/uploads/2018/06. The folders must be created under the active installation and must be writable when WordPress needs to upload or modify files.
The URL is derived from the site’s configured location and the upload path. A file can therefore exist on disk while the browser requests a different location. Common differences include an old domain, an omitted subdirectory, http versus https, a changed filename case, or a year/month folder that was not copied during migration.
File permissions govern who can read, write, modify, and access directories. WordPress may need write access to parts of wp-content, but public image delivery still requires the web server to traverse every directory in the path and read the file. WordPress Developer Resources cautions: “Permissions will be different from host to host, so this guide only details general principles.” Treat any numeric mode as a starting point, not a universal rule.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Use the HTTP status to select the fix
| Status | What it means | First checks | Most useful remedy |
|---|---|---|---|
| 404 Not Found | The requested path or file is not available at that URL. | Active document root, filename case, extension, year/month folder, domain and subdirectory. | Correct the URL or restore the matching uploads directory, then update stale database references after a move. |
| 403 Forbidden | The server found the request but refused access. | Ownership, directory and file permissions, .htaccess, security rules, firewall, hotlink protection. |
Apply the host’s documented access scheme and remove the rule that blocks public reads; test the origin before touching the CDN. |
| 500 Internal Server Error | The server or an application rule failed while handling the request. | Error log, recent .htaccess edits, image/cache/security changes, unsupported directives. |
Revert or correct the failing rule or plugin change, using the error-log entry to identify it. |
Fix a 404 image
Confirm that the file is in the active document root
FTP or a file manager may show a file in a backup tree, staging installation, or a second account directory. Compare the web server’s document root with the directory you inspected. The requested path must lead to the same WordPress installation that serves the page. If the original file is absent, copy the matching uploads folder from a known-good backup before attempting any thumbnail operation.
Check every part of the filename and path
- Linux hosting is commonly case-sensitive:
Screenshot.PNGandscreenshot.pngare different files. - Check spaces, apostrophes, non-ASCII characters, URL encoding, and punctuation.
- Confirm the extension requested by the page matches the file on disk. A reference to
.jpgwill not find a file saved as.jpeg. - Verify the year/month directory when that option is enabled. A file copied into a flat uploads folder will not satisfy a URL containing
/2024/07/. - Make sure the URL does not contain an extra subdirectory, an omitted subdirectory, or a different hostname.
Correct stale URLs after a move
Changing a domain or moving WordPress into or out of a subdirectory leaves old references in the database. In the dashboard, open Settings > General and compare WordPress Address (URL) and Site Address (URL) with the address in the failing image URL. Both values should use the intended https:// address and should not end with a trailing slash.
For a database-wide migration, use a serialization-safe tool or WP-CLI rather than a blanket SQL replacement. A typical WP-CLI pattern is:
Rank #2
wp search-replace 'https://old.example' 'https://new.example' --all-tables-with-prefix --skip-columns=guid
Replace the example domains with the actual old and new addresses. Run a dry run when available, review the tables selected, and keep a database backup. Serialized options and metadata can be corrupted by a naïve text replacement. Existing media links must be updated when files or their site location moved.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Do not change the guid column during a normal URL migration. WordPress migration guidance specifically warns that GUID values are not ordinary display URLs and should remain unchanged.
Restore before regenerating
Thumbnail tools can create derivative sizes from an accessible original; they cannot reconstruct a deleted original. Restore the matching file and its directory first, verify the original URL returns the image, and only then regenerate the required sizes. If the restored file has a different name or extension, update the attachment references instead of repeatedly regenerating the wrong path.
Fix a 403 Forbidden response
Inspect ownership and permissions along the whole path
Check the site directory, wp-content, uploads, each year/month directory, and the image itself. The web-server account needs permission to traverse directories and read the file. On suexec-style hosting, WordPress Developer Resources gives general examples of directories at 755 or 750 and files at 644 or 640, while warning that hosts differ. Follow your host’s documented owner, group, and mode scheme; do not “fix” access by setting uploads to 777.
Ownership can be as important as the numeric mode. A directory owned by a different account may remain unreadable even when its mode appears permissive. Ask the host to confirm the correct web-user ownership if you cannot inspect it safely.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Rank #3
Read every applicable .htaccess file
Back up the current files before editing. Inspect the site-root .htaccess, then any file inside wp-content or uploads. Look for directives such as Deny, Require all denied, hotlink-protection rules, IP restrictions, or plugin-generated blocks. A rule intended to protect administrative files can accidentally deny image requests when copied into the uploads directory.
If removing a suspicious uploads rule restores direct access, keep a copy of the original and replace it with a rule that protects only the intended resource. Do not paste Apache directives into a server that uses a different configuration format without checking compatibility.
Temporarily isolate security layers
Hosting firewalls, ModSecurity, security plugins, image hotlink protection, and CDN controls can all return 403 before WordPress handles the request. Disable one layer at a time, test the direct origin URL, and record which change alters the response. If a security feature is responsible, use its allowlist or corrected rule rather than leaving protection disabled.
A support case has documented direct image requests returning 403 because uploads were not publicly accessible; the recommended checks were permissions and .htaccess. The same diagnostic order applies when a firewall or security plugin is involved.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Test the origin before purging caches
A CDN or page cache can preserve a 403, but purging it cannot repair an origin that still denies access. Temporarily bypass image proxying or CDN rewriting, request the origin URL, and confirm a successful response. Purge cached errors only after the origin serves the image correctly.
Fix a 500 Internal Server Error
Use the error log, not the browser message
A 500 response is a server-side failure. Capture the exact timestamp and read the web-server error log for the image request. The log may identify a malformed directive, a permission problem, a rewrite loop, a PHP failure, or a module that cannot process the request. The browser’s generic 500 page rarely contains enough detail to choose a safe fix.
Check recent .htaccess changes
An unsupported or invalid Apache directive inside the uploads directory can break direct image requests even though WordPress pages still load. One documented support case restored image access after an invalid uploads .htaccess file was deleted. Preserve a backup, remove only the offending file or directive, and retest before making unrelated changes.
Roll back image and cache changes
Revert the most recent WebP conversion, cache, security, optimization, or image-serving change. A documented outage followed removal of an image-conversion component that left a stale .htaccess file and incorrect file modes. The practical lesson is to remove generated rules and restore host-compatible permissions when uninstalling image-serving software.
Do not regenerate thousands of thumbnails while the original request returns 500. First restore a clean server response for one original image, then test a thumbnail and only afterward process the rest of the library.
Migration checklist for broken image URLs
Use this checklist when the site was recently moved, renamed, or installed in a different directory:
Best Value
- Back up the database and all WordPress files, including the complete uploads directory.
- Confirm that both home and siteurl point to the intended HTTPS address with no trailing slash.
- Compare one failing image URL with the new document root, subdirectory, year/month path, filename case, and extension.
- Search the database for the old domain or old subdirectory using a serialization-safe migration tool or WP-CLI.
- Run the replacement across the relevant tables while skipping
guid; review the result before writing changes. - Open Settings > Permalinks and save the existing structure to regenerate
.htaccessin the correct directory when the move changed rewrite context. - Test one original-size image and one thumbnail directly, then test the Media Library and a front-end page.
Saving permalinks does not copy missing media or repair wrong attachment metadata. It only refreshes rewrite rules; the files and database references still need to match the new location.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Why the Media Library shows a blank thumbnail
A blank thumbnail is a symptom, not a diagnosis. Open the thumbnail’s source URL directly and classify its response. If it is 404, repair the attachment path or restore the original. If it is 403, fix access rules and permissions. If it is 500, follow the server-log branch. A browser may also show a blank result when mixed content, a redirect, CORS policy, or a hotlink rule blocks the request.
After the original image works, check whether only derivative sizes are missing. Generate the required sizes again, then clear the relevant page, object, browser, and CDN caches. Regeneration is appropriate for missing derivatives; it is not a remedy for a missing original, a stale domain, or a denied origin request.
Safe repair order
Changing several layers at once makes it difficult to identify the cause and can destroy evidence. Use this order:
- Back up files and the database. Keep the current
.htaccessfiles and a copy of the uploads directory. - Capture one failure. Save the complete URL, status, response headers, timestamp, browser-console message, and matching server-log line.
- Verify existence and exact spelling. Confirm that the original file is in the active document root and that every directory and filename matches.
- Verify site settings and migration references. Check home, siteurl, upload structure, domain, protocol, and subdirectory references.
- Correct ownership and permissions. Use the host’s documented values; never use
777as a blanket fix. - Isolate blocking layers. Temporarily bypass CDN, hotlink, firewall, security, WebP, cache, and plugin rules one at a time.
- Repair rewrite rules. Save the old
.htaccess, remove only invalid or inappropriate directives, and refresh permalinks when the installation path changed. - Clear caches and retest. Test the direct original URL, a derivative thumbnail, the Media Library, and the front-end page.
- Escalate with evidence. Give the host the exact URL, status, UTC or local timestamp, document-root details, and the relevant error-log line.
Choose the remedy that matches the evidence
| Observed condition | Appropriate action | Action that will not solve it |
|---|---|---|
| The original file is missing. | Restore the matching uploads directory from backup, then verify the original URL. | Regenerating thumbnails. |
| The domain, protocol, or subdirectory changed. | Correct home and siteurl, perform a serialization-safe URL replacement, and leave guid unchanged. |
Changing file modes alone. |
| The file exists but returns 403. | Fix host-compatible ownership and permissions and remove the blocking access rule. | Purveying a CDN cache before the origin works. |
| The file returns 500 after a server or plugin change. | Use the error log to revert or correct the invalid rule or configuration. | Running a thumbnail tool against a failing origin. |
| The origin works but a cached or proxied URL fails. | Correct the CDN, hotlink, or security configuration and purge the affected cache. | Changing database URLs without evidence of a migration problem. |
| The host controls the firewall, ownership, or logs. | Escalate with the URL, status, timestamp, and log evidence. | Repeatedly changing permissions without knowing the host’s policy. |
Prevent the same failure after future changes
- Back up the database and uploads directory before moving a site, changing domains, or uninstalling image-processing software.
- Record the document root, WordPress Address, Site Address, and whether year/month uploads are enabled.
- After a migration, test an original image and a thumbnail before switching DNS or enabling a CDN.
- Keep a known-good copy of
.htaccessand note which layer owns each image-rewrite rule. - Apply the host’s documented ownership and permission scheme consistently; avoid global write permissions.
- When a plugin creates server rules, remove those rules during an uninstall review rather than assuming deactivation removes them.
- Keep a short incident record containing the URL, HTTP status, timestamp, and the change that preceded the failure.
When to contact hosting support
Escalate when you cannot inspect the active document root, ownership, firewall, ModSecurity configuration, or server logs, or when the origin continues to return 403 or 500 after the path and files are verified. Supply one reproducible URL, the exact status, the request time, the site’s domain and subdirectory, and the relevant log entry. This lets support distinguish a missing file from a policy block or a server directive error without asking you to repeat unrelated fixes.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Recommended Free Tools




