Broken Images and SEO: Find and Fix Them at Scale
Broken images do more than make your pages look unfinished. They create poor user-experience signals, can spike Cumulative Layout Shift, waste crawl budget on dead asset URLs, strip rich-result eligibility from product and recipe pages, and quietly disqualify content from Google Images traffic. The good news: broken images are one of the most fixable categories of technical SEO debt — once you can see them, a single bulk update usually closes most of the gap. This guide covers how broken images hurt SEO, how to find them across an entire site, and how to fix and prevent them at scale.
What Are Broken Images?
A broken image is any image, source, or CSS background-image reference whose URL no longer returns a valid image. The most common cause is a 404 — the file used to exist at that URL and now does not. Other failure modes: 403 Forbidden (the file exists but permissions block public access), DNS errors (the entire host disappeared, common when CDN domains change), MIME-type mismatches (the URL returns HTML instead of an image), and infinite redirect chains that browsers eventually give up on.
From the user's side, the symptom is the same: a placeholder icon, a broken-image glyph, or empty space where a hero shot used to be. From Googlebot's side, every broken image is a wasted fetch and a missed opportunity to index a useful asset.
How Broken Images Hurt SEO
The damage shows up in four places. User-experience signals degrade — bounce rate climbs, time on page drops, and pages full of broken visuals lose authority cues that affect rankings indirectly. Cumulative Layout Shift (CLS) can spike when broken images sit inside layouts that have not declared explicit width and height; the fallback glyph occupies different space than the original asset would have, and surrounding content jumps. Rich-result eligibility evaporates for Product, Recipe, Article, and Video schema if the referenced image returns a 404 — Google's structured data tester flags missing images as ERROR, not warning.
Finally, Google Images traffic dries up. If your asset URLs broke during a migration, every previously-ranked image gets dropped from the Image Index over the following weeks, and you lose a traffic source most teams forget to monitor.
Image SEO Beyond Just Working: Alt Text and File Names
An image that loads but has no alt text and a meaningless file name (IMG_4521.jpg) is barely better than one that 404s. Both fail to feed Google the context it needs to rank the asset in Image Search. When auditing broken images, audit alt text in the same pass — it is essentially free and amplifies the impact of every fix. See image alt text best practices and how to find missing alt text for the full process. Use descriptive, keyword-relevant file names (red-running-shoes-side-view.jpg) and concise alt text that describes what the image actually shows, not what page it sits on.
Common Causes of Broken Images
Most broken-image incidents trace back to a small set of root causes:
- CMS migrations. Moving from WordPress to Shopify, or HubSpot to Webflow, almost always leaves orphaned image URLs in legacy post bodies if the asset paths were not rewritten.
- CDN URL changes. Switching CDNs (e.g. Cloudflare to Bunny) or changing the canonical asset domain (
cdn.example.comtoassets.example.com) breaks every hardcoded reference until you rewrite them. - Deleted media library entries. Editors clean up "old" images without realizing they were embedded in still-live posts.
- Hotlinked third-party assets. External images you embed from someone else's domain disappear when they reorganize, rename, or block hotlinking.
- Filename case sensitivity. A move from a case-insensitive filesystem (Windows, macOS default) to a case-sensitive one (Linux/S3) silently breaks anything where the case was wrong.
- Image optimization plugins gone wrong. Tools that generate WebP/AVIF variants sometimes delete or rename originals that other parts of the site still reference.
How to Find Broken Images Across Your Site
You need a full-site crawl — spot-checking pages will not surface the long tail. The standard tools:
- Screaming Frog SEO Spider. Run a full crawl, then check Configuration, Spider, Crawl, Images is enabled. The Images tab will show every image referenced and its status code; sort by status to see all 4xx/5xx responses, and use "Inlinks" to see which pages embed each broken asset.
- Google Search Console. Index, Pages and Index, Crawl Stats both surface failed image fetches. The URL Inspection tool also reports image load errors when you inspect specific pages.
- Browser DevTools. Open Network, Img filter on any page; failed images turn red. Useful for spot-checking, not for site-wide audits.
- SitemapFixer and similar SaaS crawlers. Continuous monitoring with email alerts when new broken images appear, which is what you actually want long-term.
Fixing Broken Images at Scale
Once you have the list, you have three patterns for fixing them. Pattern A — Re-upload the missing files if the original URLs are still embedded everywhere; restore from backup, S3 versioning, or the CDN's purge log. Pattern B — Bulk URL rewrite when the assets exist at a new location; do a search-and-replace across the CMS database. Pattern C — Replace with new images when the originals are truly gone; use the crawler's CSV export of "Inlinks" to find every page that needs an editorial fix.
For Pattern B on WordPress, a SQL update is the fastest path. Always back up the database first.
Plugins like Better Search Replace handle serialized data correctly (important for ACF fields and page-builder content), so prefer them over raw SQL when the data structure is complex.
Preventing Image 404s During Site Migrations
The cheapest broken image is the one you never create. For any migration, the rule is simple: preserve image URLs or 301-redirect old to new. If you can keep the same paths (e.g. /wp-content/uploads/2024/03/hero.jpg) on the new system, do it — most CDNs and platforms support custom path mapping.
If paths must change, set up server-level redirects from old to new. An Apache example:
Run a full crawl on the staging environment before launch and compare the image inventory against production. Any URL that was valid in production and 404s on staging is a launch-blocker.
Hotlinking Risk: When External Images You Embed Break
Embedding images from someone else's server (hotlinking) is fragile and a quiet long-term liability. The remote owner can rename, delete, or block your referrer at any time, and you will not know until traffic notices. They can also swap the image content underneath you — a tactic occasionally used for embarrassing pranks.
The fix: download external images you depend on (with permission, where licensing requires it) and host your own copies. For licensed stock photography, this is usually allowed. For news clippings or third-party charts, link to the source and re-host a screenshot or cite the original with proper credit instead of embedding.
Schema Markup and Broken Images
Structured data has hard requirements around images. Product schema requires at least one valid image. Recipe schema requires images for the recipe and (recommended) for the result. Article schema requires a publisher logo and an article image to be eligible for Top Stories carousels. Video schema requires a thumbnailUrl that resolves.
If any of those image URLs 404, Google's Rich Results Test will flag the page as ineligible, and you will see the rich-result loss show up in GSC's Enhancements reports within days. After every broken-image fix-up pass, re-run rich-result tests on your top pages to confirm eligibility was restored.
Ongoing Image Health Monitoring
Broken images are not a one-time fix — they accumulate naturally as content ages, plugins update, and CDNs change. Build a monitoring loop:
- Schedule a monthly site crawl (Screaming Frog, Sitebulb, SitemapFixer) and review broken-image reports.
- Watch the Google Search Console Image Index coverage report for sudden drops.
- Set up alerting on 404 spikes in your CDN logs — a sudden 404 cluster usually means an asset path silently broke.
- Add image-URL checks to your CI pipeline: a script that hits every image URL in your content and fails the build if any return non-200.
- Whenever a media library entry is deleted, search the CMS for any post or page that references it before confirming.
Treat broken images the same way you treat broken links — a small, ongoing tax that compounds if ignored, and disappears entirely with a regular maintenance pass.