WooCommerce product images without alt text

An image without alt text is a blank line for screen readers, image search, and every shopper whose connection dropped before the photo loaded. CatalogLift finds every product image missing one and — because this is one of the checks with an AI proposal — drafts the alt text from your own product data for you to approve.

Images & media Medium severity AI proposal

Why missing alt text holds products back

Alt text is the only description of an image that machines and assistive technology can read. When it is empty, the product photo stops working for everyone who is not looking at it with their own eyes — and that group is larger than most stores assume.

  • Screen readers announce nothing useful. A shopper using assistive technology hears the file name, or silence, where the product picture should be — and accessibility law in a growing number of markets treats that as a defect, not a nicety.
  • Image search cannot index the picture. Google Images and Lens rely on alt text to understand what a photo shows; an empty attribute forfeits a source of product traffic that costs nothing to earn.
  • Broken and slow images lose their fallback. When a CDN hiccups or a mobile connection stalls, the alt text is what the browser prints in the frame. Without it, the shopper sees an empty box.

How to find missing image alt text manually

Alt text is stored on the attachment, so the check joins product meta to the Media Library. This WP-CLI query lists published products whose featured image has no alt text:

wp db query "SELECT p.ID, p.post_title, t.meta_value AS attachment_id
FROM wp_posts p
JOIN wp_postmeta t
  ON t.post_id = p.ID AND t.meta_key = '_thumbnail_id'
LEFT JOIN wp_postmeta a
  ON a.post_id = t.meta_value AND a.meta_key = '_wp_attachment_image_alt'
WHERE p.post_type = 'product' AND p.post_status = 'publish'
  AND (a.meta_value IS NULL OR TRIM(a.meta_value) = '')
LIMIT 50;"

Gallery images live in _product_image_gallery as a comma-separated list of attachment IDs, and variation images in the variation's own _thumbnail_id, so each needs its own join. Adjust the wp_ prefix if needed.

The query covers featured images only; extending it to galleries and variations means splitting comma-separated meta in SQL, which gets ugly fast. It also answers per product, so an image shared by a dozen products appears a dozen times. And the real cost is not the list — it is writing a distinct, accurate description for every image on it, then keeping up as new photos are uploaded.

How CatalogLift finds and drafts it

Every scan looks at each image currently used by a product in the synced catalog — as the featured image, in the gallery, or as a variation image — and reads the attachment's own alt text. An empty value or one made only of whitespace is flagged at medium severity. Images not attached to any current product are ignored, so a stale Media Library does not flood the findings. Because the same attachment can hang on many products, CatalogLift raises one finding per image and lists every product and variation that uses it as evidence, along with the image URL and its current, empty alt text.

Writing the description is the expensive part, so this check carries an AI proposal: CatalogLift drafts alt text from the product's own data — name, brand, attributes, category — plus the image URL and the products it appears on, never from thin air. Each draft arrives as a before/after diff with evidence and a confidence score. You approve, edit, or skip; only decided alt text is written to the attachment in WooCommerce, and the next scan verifies it landed. Because CatalogLift keeps watching, a new upload without alt text becomes a fresh finding rather than a silent regression.

Fair questions, straight answers.

Where does WooCommerce store image alt text?

On the attachment, not on the product. Each image in the Media Library is a post of type attachment, and its alt text lives in postmeta under _wp_attachment_image_alt. That is the value the storefront prints in the img tag, and the value CatalogLift checks.

What makes good product image alt text?

A short, literal description of what the image shows, using the words a buyer would search — product type, brand, colour, material — without stuffing keywords or repeating the product title verbatim on every image. It should describe the picture, not the marketing.

Does the AI write alt text automatically?

It drafts a proposal from the product's own catalog data — title, attributes, brand, category — plus the image URL and where it is used, never from thin air. You see the before/after diff with evidence and confidence, and nothing is written to WooCommerce except on your authority.

What if one image is used on several products?

CatalogLift raises one finding per image, not one per product, and lists every product and variation that uses it as evidence. Fixing the attachment once fixes it everywhere it appears.

See it on your own catalog.

Create a free account, connect your WooCommerce store and this check runs on your real products, along with the rest.

No card required. The free plan never writes to WooCommerce.