404 Error May 27, 2026 9 min read

How to Find Broken Images on a WordPress Site (5 Methods)

Broken images on a WordPress site quietly eat into the trust readers place in your content. A missing thumbnail above the fold, a 404’d hero on a blog post, a busted product photo at checkout: each one signals that nobody is watching the site closely. Worse, Google notices too. Image search ranking, page experience scores, and crawl budget all degrade when a site ships thousands of <img> tags that return 404.

This guide covers how to find broken images on website wordpress, five practical ways to do it (from manual to fully automated), and the WordPress-specific causes that trip people up the most. The aim is honesty about tradeoffs, not a sales pitch for one tool.

Why broken images matter more on WordPress than on a static site

On a static site, an image is one file in a folder. If you move the file, you update the markup. On WordPress, the same image is an attachment row in wp_posts, a path in wp_postmeta, a thumbnail set on a post, an entry in the media sitemap, a likely candidate for srcset variants, possibly a CDN-rewritten URL, and a target for lazy-load scripts. Any one of those layers can drift and produce a 404 even when the file is still on disk.

That layered model is why a broken image checker designed for plain HTML often misses the WordPress-specific failure modes. Three things make WordPress different:

  • Yoast image sitemap lists every image URL by post, so a single migrating image can cascade into dozens of sitemap 404s.
  • Lazy-load attributes swap src for data-src, which confuses simple crawlers that only check the rendered src.
  • CDN URL rewriting can produce URLs that work for the front end but 404 when checked directly, because the CDN origin pull config doesn’t match.

Five ways to find broken images on a WordPress site, ranked

The five methods below are ranked by how much coverage they give for the time they take. Whole-site scanning beats page-by-page every time, but page-by-page is still useful when you’re investigating a specific post.

Five methods to find broken images on a WordPress site ranked by coverage and effort
Five practical ways to find broken images on a WordPress site, ranked by coverage.

1. Pixellize broken image checker (whole site, in browser)

The fastest way to find broken images on a website is a hosted broken image checker. The Pixellize broken image checker takes any URL, crawls up to a configurable page limit, fetches each <img> tag, and runs a HEAD request against every unique image URL. The output is a CSV of every 404 image with the source post URL, alt text, and HTTP status. No install, no signup, runs entirely in your browser.

Best for: a quick first sweep before you decide to dig deeper. Limitation: it crawls public URLs, not the WordPress admin, so it won’t find broken images that only appear in scheduled or password-protected posts.

2. Screaming Frog SEO Spider (desktop, 500 URL free limit)

Screaming Frog is the SEO standard for crawling a site at scale. The free tier covers 500 URLs, which is enough for most small sites. Set the spider to follow internal links, then under the Images tab, sort by Status Code and filter for 4xx and 5xx. You’ll get a deduplicated list of every broken image URL with the source page.

Best for: medium sites where you want to control crawl settings (subfolders, user agents, robots compliance). Limitation: it’s a desktop install, and the 500 URL free cap is restrictive once you have a few hundred posts.

3. Broken Link Checker WP plugin (inside admin)

The classic WordPress option. The plugin runs as a background task via WP-Cron, scans post content for broken links and images, and surfaces results in the admin dashboard. It catches images embedded in posts but generally misses theme-template images (logo, header) and some plugin-generated markup.

Best for: small sites where you want a permanent monitoring system inside WordPress. Limitation: it adds load to your site on every cron tick, and on busy sites with WP-Cron disabled, it never runs.

4. Chrome DevTools console (one page at a time)

Open the page in Chrome, hit F12, switch to the Network tab, filter for Img, and reload. Every 404 image shows up in red. Or use the Console with this one-liner:

document.querySelectorAll('img').forEach(i => {
  if (!i.complete || i.naturalWidth === 0) console.log('Broken:', i.src);
});

Best for: a single page you’re debugging right now. Limitation: it only checks the current page, and it doesn’t catch images that lazy-load below the fold unless you scroll first.

5. Manual browser scroll (the eyeball test)

Open each post and scroll. Easy to dismiss, but on a 20-post site it takes 15 minutes and catches things scripts miss, like an image that loads but is the wrong file (a cat photo where a chart should be). Worth doing once after a migration, even if you also run a crawler.

The six WordPress-specific causes of broken images

Finding the broken image is half the job. Knowing why it broke decides the fix. Six causes show up over and over on real WordPress sites.

Six common causes of broken images on WordPress sites with matching fix suggestions
Diagnose the cause before applying a fix, the same 404 has different roots.

Site migration left old URLs in post content

You moved from oldsite.com to newsite.com and ran a search-and-replace, but you forgot one of the variants. Post content still has hardcoded https://oldsite.com/wp-content/uploads/... URLs. The Better Search Replace plugin or a WP-CLI command like wp search-replace handles this in one pass. After running it, also check wp_options.siteurl and wp_options.home.

Deleted media file, attachment still referenced

Someone cleaned up the Media Library and removed a file that was still embedded in three published posts. The <img> src points to a path that no longer exists on disk. Fix: re-upload the original (if you have it), or replace the <img> in each post with a different image.

CDN URL mismatch after configuration change

If you use Cloudflare, BunnyCDN, or a similar service, image URLs get rewritten from /wp-content/uploads/... to cdn.yoursite.com/uploads/.... When the CDN origin-pull config drifts, the rewritten URL works but the underlying file 404s on origin. Test by curling the original WP URL directly. If it 200s, the CDN is the problem, not the file.

Lazy-load attributes confusing the crawler

Lazy-load plugins replace the src attribute with data-src and put a 1px transparent placeholder in the real src. A naive broken image checker sees the placeholder and reports the image as broken. The fix isn’t to change anything, the image is fine. Use a checker that understands data-src (the Pixellize tool does), or temporarily disable the lazy-load plugin while you audit.

Srcset variant missing after thumbnail regeneration

WordPress generates multiple sizes (thumbnail, medium, large, plus theme custom sizes) and lists them in the srcset attribute. If your image_sizes filter changed but old posts still reference the old sizes, the browser picks a variant that no longer exists. Run the Regenerate Thumbnails plugin once to rebuild every size.

External hotlinking went down

An old post embeds <img src="https://someothersite.com/image.jpg"> and that site went offline or removed the image. Self-host every image you embed. If you have hundreds of legacy hotlinks, a plugin like Auto Upload Images can copy external images into your own media library and update the post markup in one pass.

How to fix broken images on WordPress after the audit

Once you have your list of 404 images on website, work through them in priority order:

  1. Featured images on top-traffic posts first. Pull Search Console data, sort by impressions, fix any broken featured image on a top-50 post within 24 hours.
  2. Hero images and above-the-fold content next. A broken hero on a landing page hurts conversion measurably.
  3. In-content images on indexed posts third. Broken images inside the body don’t kill the page but they leak crawl signals over time.
  4. Decorative theme images last. Headers, footers, icons, fine to fix in a batch after the others.

Stopping new broken images from creeping in

Cleaning up the current backlog is half the job. The other half is preventing the next round. Three habits help:

  • Run a broken image checker monthly. A scheduled crawl catches drift before it accumulates. Save the previous month’s CSV so you can diff the lists.
  • Never delete a media file you haven’t verified is unused. The Media Cleaner plugin scans for unused attachments and marks them safe to delete (it scans post content, postmeta, theme files, and plugin settings).
  • Force HTTPS-only image URLs. Mixed-content blocks on HTTPS pages can break images even when the file exists. Add a search-replace cron job that catches any http://yoursite.com/wp-content reference and rewrites it.

SEO impact: how broken images affect rankings

Broken images don’t directly drop your text rankings, but they hurt three other things:

  • Image search visibility. Google Images shows broken results lower or skips them. If your image SEO traffic mattered, it’s gone for those URLs.
  • Page experience and Core Web Vitals. A 404 image still triggers a network round-trip and a layout shift when the broken icon resizes. CLS goes up, LCP can go up if the broken image was the hero.
  • Trust signals for E-E-A-T. Google’s quality raters explicitly look for sites that appear maintained. Broken images are a maintenance signal Google can detect automatically.

When a free broken image checker is enough

For most WordPress sites under 5,000 posts, a free hosted broken image checker run once a month, plus a manual eyeball pass on top-traffic posts, covers the work. The Pixellize broken image checker is one option, but the methodology matters more than the specific tool. Pick something that handles lazy-load, exports a CSV, and shows you the source post URL for every broken image.

Sites with 5,000+ posts, complex CDN setups, or strict SEO compliance needs are where paid options like Screaming Frog or Sitebulb earn their cost. The breakeven is roughly the point where a free tool’s URL cap or page cap becomes a blocker.

Conclusion: a 30-minute first pass

If you have never run a broken image audit on your WordPress site, the first pass takes about half an hour: ten minutes to crawl the site with a broken image checker, ten minutes to triage the CSV, ten minutes to fix the top five offenders. Knowing how to find broken images on website wordpress is half the work; doing it on a schedule is what keeps the site clean. Start with a free tool, fix the worst ones, set a monthly recurring reminder, and move on. The compounding benefit, in image search visibility, Core Web Vitals, and reader trust, is more than the time investment.

Frequently Asked Questions

How often should I check for broken images on my WordPress site?
Monthly for a site with weekly publishing, quarterly for a site that publishes a few posts a month. Also run a full check after every major change: a theme switch, a CDN configuration change, a domain migration, a bulk media library cleanup, or a hosting move.
Will Google notice if I have broken images on my site?
Yes, in two ways. Image-specific 404s hurt Google Images ranking and crawl efficiency. Page-level, a high broken-image ratio can be a soft quality signal that affects how the page is treated in regular search, particularly for pages that depend on images.
Why does my image checker report broken images that look fine in my browser?
Usually one of three things: the image is hotlinked from a CDN that blocks the checker user agent, the image uses lazy-load with data-src and the checker only reads src, or the image is loaded by JavaScript after page load and the checker is reading the static HTML.
Can I find broken images on a website without admin access?
Yes. Any external crawler-based broken image checker works on public URLs without WordPress login. The Pixellize tool, Screaming Frog, and similar crawlers all run from outside the site and need no admin access. You only need admin access when you want to fix the issues after finding them.
Should I delete posts that have broken images, or fix them?
Fix them. Deleting a post that has organic traffic destroys ranking equity you cannot get back. Replace the broken image with a working one (re-upload, swap to a different image, or remove the image and add a paragraph in its place). The post stays, the broken image goes.
Will fixing broken images on WordPress speed up my site?
Slightly. Every 404 still costs a network round-trip and triggers a layout shift when the broken icon swaps in. On a page with 5 broken images, that is roughly 200 to 500 ms of wasted load time plus a CLS hit. Fixing them tightens both LCP and CLS measurably.
What is the difference between a broken image and a missing alt attribute?
A broken image is one whose source URL returns 404 or fails to load. A missing alt attribute is an img tag without an alt property, which is an accessibility and SEO issue but not a load failure. Both are worth fixing, but they need different tools.
Simranjit Kaur
Written by

Simranjit Kaur

Founder and CEO of Pixellize.io, building AI-powered web tools and digital products with a focus on user experience and automation. M.Sc. Zoology, working at the intersection of technology, data analytics, and life sciences.

Scroll to Top