BlogAlt Text Is Doing Double Duty: Accessibility and AI DiscoveryScan · Site Quality

Alt Text Is Doing Double Duty: Accessibility and AI Discovery

DO
Dana Okafor · January 2026 · 9 min read

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.

A linked image with no alt is the worst case. It fails twice in one element: the image is undescribed AND the link is unlabeled. For a screen-reader user navigating by links, your nav logo, product thumbnails, and "read more" image-buttons become a list of meaningless "link, link, link." For an AI crawler, a linked image with no alt is an edge it cannot interpret in your site graph.

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.

Alt text is structured data for images. Just as schema.org markup hands a machine an unambiguous summary of your page, alt text hands it an unambiguous summary of each image. A product catalog with rich, accurate alt text is a catalog an answer engine can actually recommend from, turning a compliance checkbox into a discovery channel.

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-image has 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>: use aria-label on the button, or an SVG <title>, and mark purely decorative SVGs aria-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 product catalog is the highest-value target. For e-commerce, alt text on product images is where accessibility and AEO overlap most directly with revenue. A screen-reader shopper who cannot tell your products apart abandons the cart, and an answer engine that cannot read your catalog cannot recommend your products. Templating alt from structured product data, name, color, key attribute, turns thousands of images description-complete in one change and feeds the same machine-readable signal to both audiences.

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 →
Dana Okafor Dana Okafor writes about AI quality engineering at alt.qa, built by TheWorkCompany.