TL;DR
Alt text is the rare fix that pays twice. Missing it is the second most common accessibility failure on the web, the WebAIM Million 2025 found 18.5% of all home-page images lacked alt text, around 11 missing per page, and 44% of those were linked images (so the link itself announced nothing). The same gap also blinds multimodal AI: ChatGPT, Perplexity, and Claude lean on alt text and surrounding markup to understand your images because most do not run vision over every asset at crawl time. One scan, two wins, WCAG compliance and AI discoverability.
One defect, two channels of loss
Most quality problems force a trade-off: fix it for users, or fix it for machines. Alt text is the rare case where the same edit serves both, because both a screen reader and an AI crawler consume the exact same attribute. When you omit it, you lose twice, once to the blind user who hears silence where an image should be described, and once to the answer engine that cannot tell what your product photo, diagram, or infographic depicts.
The accessibility side of the loss is enormous and measured. Per the WebAIM Million 2025, 18.5% of all home-page images had missing alternative text (not counting intentional alt=""), averaging about 11 missing images per page. Worse, 44% of the images missing alt text were linked images, meaning one in five linked images on the web produces a link a screen reader announces with no destination, just "link" or a raw URL. That is a Level A failure (WCAG 1.1.1) and one of the six issues that account for ~96% of all detected accessibility errors.
Why AI cannot see your images without alt text
It is tempting to assume modern multimodal models just "look" at your images. At training time, some do. But at crawl and retrieval time, when an answer engine is deciding what your live page is about and whether to cite it, most AI crawlers operate on the fetched HTML text, not a rendered, vision-processed view of every image. They read the alt attribute, the title, the surrounding caption, the file name, and nearby text. If the alt is empty, the image is, to the crawler, an opaque box.
This is the same constraint that makes JavaScript-rendered content invisible to AI crawlers, generalized to images: the crawler reads markup, not pixels. So an e-commerce catalog where every product image is <img src="sku-48213.jpg"> with no alt is handing the answer engine a page full of unnamed boxes. When a buyer asks an AI "what's a good waterproof hiking boot under $150, " the model can only recommend products it can read, and your unlabeled images are not in the running.
What good alt text actually looks like
Good alt text is specific, contextual, and concise, and it differs by the image's job on the page. The most common mistakes are not just missing alt, but unhelpful alt: the file name (alt="IMG_4821.jpg"), a keyword dump (alt="boots hiking boots best boots buy boots"), or redundant noise (alt="image of" on every asset).
<!-- WRONG: decorative image announced as noise -->
<img src="divider.png" alt="decorative line graphic">
<!-- RIGHT: decorative images are hidden from AT -->
<img src="divider.png" alt="">
<!-- WRONG: undescribed, unlinked content image -->
<img src="sku-48213.jpg">
<!-- RIGHT: specific, contextual, sized for the page's purpose -->
<img src="sku-48213.jpg"
alt="Trailhead waterproof hiking boot in slate gray, side profile">
<!-- WRONG: linked image, no alt = unlabeled link -->
<a href="/cart"><img src="cart.svg"></a>
<!-- RIGHT: alt describes the link's DESTINATION/action -->
<a href="/cart"><img src="cart.svg" alt="View shopping cart"></a>
<!-- Complex image (chart): short alt + long description -->
<img src="q3-revenue.png"
alt="Q3 revenue by region, described below"
aria-describedby="q3-desc">
<p id="q3-desc">EMEA led at $4.2M, up 18% QoQ; APAC $3.1M...</p>
The rules: decorative images get alt="" so AT skips them. Informative images get a description of what they convey. Functional images (links, buttons) get alt describing the action or destination, not the picture. Complex images (charts, diagrams) get a short alt plus a longer text description that, conveniently, is also exactly what an AI crawler needs to cite your data.
The AEO multiplier
Here is where the double duty becomes a competitive advantage. The same descriptive markup that satisfies WCAG 1.1.1 makes your images eligible for AI image understanding and citation. The surrounding text, captions, and structured data compound the effect, answer engines that build a representation of "what is on this page" treat well-described images as additional, retrievable content rather than dead weight.
Scan for it, then keep it from regressing
Missing alt is trivially detectable, which cuts both ways: your scan finds it in seconds, and so does a plaintiff's. The right program is to scan the whole site, auto-flag every image missing alt (and every linked image missing alt as higher priority), have humans write real descriptions for content images, mark decorative ones alt="", and then gate CI so no new undescribed image ships.
# Scan the live DOM for the two failure modes that matter most
from bs4 import BeautifulSoup
import requests
html = requests.get(url).text
soup = BeautifulSoup(html, 'html.parser')
missing, linked_missing = [], []
for img in soup.find_all('img'):
has_alt = img.get('alt') is not None # alt="" is OK (decorative)
if not has_alt:
missing.append(img.get('src'))
if img.find_parent('a'): # the worst case
linked_missing.append(img.get('src'))
print(f"Images missing alt: {len(missing)}")
print(f" ...of which are LINKED: {len(linked_missing)} (fix first)")
# Gate: fail the build if linked_missing > 0
Note the nuance the scanner must respect: alt="" is correct for decorative images and must NOT be flagged, while a completely absent alt attribute is the failure. A naive "every image needs alt text" check generates noise that teams learn to ignore; a check that distinguishes missing-attribute from intentional-empty and prioritizes linked images is one teams actually act on.
Where alt text quietly disappears
Knowing alt text matters is not the same as knowing where it leaks. The chronic sources of missing or bad alt text are structural, not careless, which is why they recur on every site:
- CMS and user uploads. When marketers, merchandisers, or end users upload images through a CMS, the alt field is optional and usually skipped. A site can be perfectly authored by engineers and still ship thousands of un-described images from the content team. The fix is making alt a required field at upload, with a clear prompt explaining its purpose.
- Background images in CSS. An informative image set via
background-imagehas no alt mechanism at all and is invisible to assistive technology and to crawlers reading markup. Informative imagery belongs in<img>(or an inline<svg>with a<title>), not in CSS, CSS backgrounds are for decoration only. - Icon fonts and SVG. An icon-only button needs an accessible name even though there is no
<img>: usearia-labelon the button, or an SVG<title>, and mark purely decorative SVGsaria-hidden="true". Scanners that only look at<img alt>miss this entire class. - Auto-generated alt. The overlay-style "AI writes your alt text" approach produces generic, often wrong descriptions (
alt="a person"for your founder's headshot) that are worse than a thoughtful empty string because they assert false information to a screen-reader user, and give an answer engine a misleading caption.
The bottom line
Alt text is the cheapest two-for-one in web quality. Missing it is the second most common accessibility failure, nearly a fifth of all images, with 44% of those being linked images that also break navigation, and a Level A WCAG violation that draws litigation. The same gap blinds the AI crawlers that read markup instead of pixels, dropping your images out of the answers buyers increasingly start with. Write specific, contextual descriptions, mark decorative images empty, fix linked images first, and gate the build. One pass closes a compliance liability and opens a discovery channel at the same time.
Find the Gaps Before They Cost You
Scan audits your site for the accessibility, performance, AEO, and security gaps that quietly drain revenue and invite lawsuits, in one pass.
Try Scan Free →