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.