Image SEO for Blogs: Finding Missing, Broken and Unindexable Images
Most blog posts lean on images: screenshots, diagrams, charts, product photos, hero images for social shares. And most blogs carry some broken ones that nobody has noticed. The author's browser cached the image years ago, the post looks fine to them, and a reader sees an empty box with a tiny broken-image icon. Broken images are a quality problem first: a tutorial with missing screenshots stops…
Most blog posts rely heavily on images, including screenshots, diagrams, charts, product photos and hero images for social sharing. However, many blogs have broken images that go unnoticed. The issue begins when a blog's cached image is years old, and the post appears fine to the author. When a reader sees an empty box with a broken image icon, it signals a quality problem.
Moreover, broken images negatively impact image SEO, as they prevent the image from appearing in Google Images, Discover or the thumbnails next to text search results.
This guide aims to explain why blog images break, how to locate every broken or missing image on a site, and the essential image SEO principles provided by Google, along with sources for each.
Common causes for broken blog images include:
1. Deleted media - Someone removes files from the media library, but the embeds in old posts still reference them. In WordPress, deleting a file from the library doesn't update the embedded posts.
2. Domain or HTTPS moves - Images with hard-coded URLs break after a website move, or they get blocked as mixed content.
3. Hotlinked images - Images embedded straight from another site disappear when that site reorganizes, deletes them, or blocks hotlinking.
4. CDN or storage changes - Moving uploads to a new service, such as S3, a CDN or a new image service, changes the URLs. Old posts retain the old URLs.
5. Expired third-party embeds - Services like screenshot generators, badge creators and chart widgets may shut down or change their URL schemes.
6. Case and filename mismatches - Screenshots might work on one server but fail on a case-sensitive server after a migration.
7. Broken srcset entries - The main image URL works, but one of the resized versions listed in srcset is missing, causing only some devices to display a broken image.
To locate every broken image on a blog, follow these steps:
Step 1: Find every broken image on the blog
Crawl the site and examine image URLs. Using a crawler, such as Screaming Frog SEO Spider (free up to 500 URLs), collect every img URL across the site and request each one. Look for response codes in the Client Error (4xx) range. The Images tab in Screaming Frog lists images, and the response codes indicate which resources are broken.
Filter the results to see which posts embed each broken image. Note that Google Search Console won't directly list broken images, but its Page Indexing and Core Web Vitals reports can help with related problems.
For a quick check on a single post, use a script to pull the src and every srcset candidate from a page and check each one. The script uses Python and regular expressions to find the URLs and check their status. Run the script with the command: python3 imgcheck.py https://yourblog.example/some-post/. If the server rejects HEAD requests, retry the URL with GET.
Step 2: Fix the broken images
After identifying the broken images, take the appropriate action for each cause:
1. File deleted, original available - Re-upload the file to the same path or update the post's embed with the new URL.
2. Domain or HTTPS move - Update the image URLs to the new location.
3. Hotlinked images - Replace the hotlinked image with a version hosted on your own server or CDN.
4. CDN or storage changes - Update the image URLs to reflect the new location.
5. Expired third-party embeds - Find an alternative embed service or update the embed with a new URL.
6. Case and filename mismatches - Rename files to match the correct case or update the post's embed with the correct filename.
7. Broken srcset entries - Ensure all resized image versions in srcset are available.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.