Why product image SEO matters more than it used to
Three shifts in the last 18 months have raised the stakes on image metadata:
- AI Overviews cite images. When Google's generative answers surface a product, the cited image is almost always one with clean alt text and Product schema attached.
- Google Lens and visual search rely on the page's textual signals to disambiguate what's in the photo. A black t-shirt with no alt text competes with millions of identical pixels.
- Core Web Vitals penalize unoptimized images. Missing dimensions and oversized files tank LCP, which depresses rankings on the rest of the page too.
None of this requires reshooting anything. It's metadata work on the photos you already have.
File names: descriptive, hyphenated, lowercase
Google reads the file name as a weak ranking signal and as fallback alt text when the alt attribute is missing. Camera defaults like DSC_0421.jpg tell it nothing.
Don't
IMG_4471.jpgfinal_FINAL_v3.pngblack_tshirt_FRONT.JPG(mixed case, underscores)mens-organic-cotton-crew-neck-tshirt-black-front-view-on-white-background-medium-size.jpg(keyword stuffed)
Do
organic-cotton-crew-tee-black-front.jpgorganic-cotton-crew-tee-black-back.jpgorganic-cotton-crew-tee-black-detail.jpg- Lowercase, hyphens, 4–8 words, describes what's actually in the frame
One file naming pattern across the whole catalog matters more than the perfect name on any single image. Pick a template — {product}-{variant}-{angle}.jpg works for most stores — and apply it consistently.
Alt text that ranks (and is actually accessible)
Alt text serves two audiences: screen readers and search engines. The good news is that what works for one usually works for the other. Describe the image factually, in a sentence a human would read aloud, and include the product name naturally.
| Image | Bad alt | Good alt |
|---|---|---|
| Front of a leather wallet | wallet | Brown bifold leather wallet with brass snap closure, front view |
| Sneaker on a model | shoe shoe shoe sneaker running | White running sneaker with mesh upper, worn by model on grey background |
| Lifestyle of a candle | (empty) | Soy candle in amber glass jar lit on a wooden bedside table |
Aim for 80–125 characters. If a screen reader user wouldn't get useful information from your alt text, neither will Google. Decorative images (icons, dividers) should have alt="" — empty, not missing.
One more rule: don't repeat the same alt text on every image of the same product. The front, back, detail, and lifestyle shots should each describe what makes that image different.
Product schema: the highest-leverage 50 lines you can add
Product structured data is what unlocks rich snippets — price, availability, star ratings, and the image itself in Google Shopping and AI Overviews. Here's the minimum viable Product schema for an e-commerce page:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Organic Cotton Crew Tee",
"image": [
"https://example.com/img/organic-cotton-crew-tee-black-front.jpg",
"https://example.com/img/organic-cotton-crew-tee-black-back.jpg",
"https://example.com/img/organic-cotton-crew-tee-black-detail.jpg"
],
"description": "Midweight organic cotton crew neck t-shirt in black.",
"sku": "TEE-CRW-BLK-M",
"brand": { "@type": "Brand", "name": "Your Brand" },
"offers": {
"@type": "Offer",
"url": "https://example.com/products/organic-cotton-crew-tee",
"priceCurrency": "USD",
"price": "38.00",
"availability": "https://schema.org/InStock"
}
}
</script>
Critical: the URLs in the image array must be the actual hosted image URLs, must be crawlable (not behind login), and should ideally be at least 1200px on the long edge for Shopping eligibility.
Pages that only include schema on the listing template but not on variant URLs miss out on indexing. Every indexable product URL needs its own Product schema with that variant's images.
Image sitemaps and crawlability
If your product images live on a CDN with a different hostname than your storefront, Google may not associate them with the page. An image sitemap fixes that.
Three crawlability rules that quietly tank image indexing:
- Lazy loading without a fallback. If the image only loads via JavaScript when scrolled into view, Googlebot may never see it. Use
loading="lazy"on the<img>tag itself, not a JS library that swaps the src. - Missing width and height. Always set explicit dimensions. This fixes CLS and helps Google pick the right image for different SERP layouts.
- Robots.txt blocking the CDN. Check that your image host isn't disallowed. A surprising number of stores block their own image CDN.
Doing this at scale (when you have 5,000 SKUs, not 50)
The checklist above is straightforward for a 50-product store. At 5,000 products with 6 photos each, manual alt text isn't realistic. Three approaches that work:
- Template-driven alt text. Generate alt from product attributes you already have:
{color} {material} {product_type}, {angle} view. Not poetic, but better than empty and consistent across the catalog. - Vision-model captioning. Run product images through a multimodal model to generate factual captions, then human-review the top 20% of traffic-driving SKUs. The long tail gets adequate alt; the head gets great alt.
- Centralize image metadata in the product database. Alt text, file name, and schema image arrays all derive from the same source of truth so they stay in sync when products are renamed or recategorized.
If you generate product imagery with a tool like Retouchable, the metadata can be written at generation time — alt text derived from the prompt, file names from product attributes, schema image arrays populated automatically. That's the easiest way to keep image SEO from rotting as the catalog grows.
If you do nothing else: rename files to a consistent template, add factual alt text on every image, and put valid Product schema on every indexable product URL. Those three changes cover most of the upside.