Product images with no alternative text
Image search cannot see what the photo shows, a screen reader reads out the filename, and when the image fails to load there is nothing in its place.
The symptom
Nothing on the page looks wrong, because alternative text is invisible when everything works. You find out about it in one of three ways: an accessibility audit, a customer who uses a screen reader, or a look at how little traffic your product photos bring in from image search.
In the Media Library the Alternative Text field is simply empty. On a catalogue built by import, it is empty for every image at once.
What it costs
Alternative text does three separate jobs, and an empty field fails all three.
- Image search cannot read a photograph. It reads the alt text, the filename and the
surrounding page. For visual categories — furniture, clothing, tools, parts — image search is a
real share of discovery traffic, and
IMG_4471.jpgwith no alt tells it nothing. - A screen reader announces the filename instead. Someone shopping without sight hears “I-M-G underscore 4-4-7-1 dot jay-peg” where the product photo should be. In the EU, the European Accessibility Act has applied to e-commerce services since 28 June 2025 — that is a fact about the regulation, not a verdict about your store, and what your obligations are is a question for your lawyer, not for an audit tool.
- When the image does not load, the space is blank. Slow connection, blocked CDN, moved file: alt text is what the browser puts there instead. Without it, the page silently loses the product.
How to check it yourself
Alt text lives in postmeta on the attachment, not on the product:
wp db query "SELECT a.ID, a.post_title, a.guid
FROM wp_posts a
LEFT JOIN wp_postmeta alt
ON alt.post_id = a.ID AND alt.meta_key = '_wp_attachment_image_alt'
WHERE a.post_type = 'attachment'
AND a.post_mime_type LIKE 'image/%'
AND (alt.meta_value IS NULL OR TRIM(alt.meta_value) = '')"
That lists every image in the library. To narrow it to images actually used by products, join
against _thumbnail_id and _product_image_gallery — or just start with the media that products
use most, since fixing an image fixes it everywhere it appears.
How to fix it
- Describe the product as you would to somebody who cannot see it. “Grey wool throw with fringed edge, folded on a bench” beats “wool throw grey buy cheap”.
- Do not repeat the product name on every image of the same product. Five identical alt texts help nobody; say what each photo actually shows — front, detail, in use, scale.
- Genuinely decorative images get
alt="", deliberately empty. That tells a screen reader to skip it, which is the correct behaviour and is different from the attribute being missing. - Do not keyword-stuff. Alt text is read out loud to people. A list of search phrases is a bad experience and has not helped rankings for many years.
- Fix the import, if the images arrived without alt in bulk. Most product feeds carry a description field that can map straight to it.
When it is a false positive
- Images no longer used by anything. The library keeps old uploads; an unused image with no alt costs nothing. Worth cleaning up for a different reason.
- Purely decorative graphics — separators, background textures, a badge repeated on every card. Empty alt is correct for these, and Merchlint reports a missing attribute, not an empty one.
- Themes that generate alt from the product title at render time. The stored field is empty and the rendered page is fine. If yours does this, check one product’s source before working through the list.
How Merchlint finds it
Merchlint reads _wp_attachment_image_alt for every attachment used as a product’s main image or
gallery image, and reports the attachment, not the product. That is deliberate: one photograph
often belongs to several products and is fixed once, so reporting it per product would multiply a
single repair into a long list and make the report look worse than the work actually is.
The finding shows the attachment ID, the filename and how many products use it.
Confidence: F — fact from the database. The meta row exists and holds text, or it does not.
This check runs in the free version, on every product image, with no cap.
Disagrees with what you see in your store? Write to us — we read every message. contact@merchlint.com