You can shoot perfect product photos, name the files properly, write good alt text and still have Google index almost none of them. Discovery is a separate problem from quality. Google has to find the image URL, be allowed to fetch it, be able to associate it with a product, and be permitted to show it at a useful size. Break any one of those links and your photos simply do not appear in Google Images, Google Lens, Shopping surfaces or AI-generated shopping answers.
This guide covers the plumbing: image sitemaps, structured data image fields, the robots directive most stores are missing, and licensing metadata. It assumes you have already sorted the basics of alt text, file names and compression.
How Google actually finds your product images
Google discovers images through a small number of paths, and several common storefront patterns block all of them.
- Standard HTML image elements. Google finds images through the src attribute of an img tag. This is the primary path and the only one you should rely on.
- Responsive markup. Both srcset and picture elements are supported, but always keep a plain src fallback. Crawlers that do not parse srcset still get something.
- CSS background images are not indexed. If your theme paints hero shots, swatch tiles or gallery thumbnails as CSS backgrounds, those images do not exist as far as Google Images is concerned. This is the single most common cause of a store with hundreds of photos and a near-empty image index.
- Image sitemaps. The backstop for anything Google might not reach by crawling, including images served from a CDN on a different hostname.
Lazy loading is fine and expected in 2026, but it must be implemented so the image URL is present in the markup rather than injected only after a scroll event. If the URL only appears in JavaScript that runs on user interaction, treat it as invisible.
The image sitemap: exact format and limits
An image sitemap is a normal XML sitemap with an extra namespace. It does not replace your page sitemap; it extends it.
- Namespace: http://www.google.com/schemas/sitemap-image/1.1
- Supported tags: only image:image wrapping an image:loc. The old image:caption, image:title, image:geo_location and image:license tags are deprecated and are ignored.
- Limit: up to 1,000 image:image entries per url entry. No realistic product page comes close.
- Cross-domain: you can list images hosted on a different domain, which is exactly what a CDN setup needs. Verify the image host in Search Console so Google trusts the association.
- robots.txt: the image host must allow crawling. A blanket disallow on a CDN path or an /assets/ directory silently kills indexing regardless of what your sitemap says.
What your platform gives you already
Shopify auto-generates a sitemap that includes the primary product image for each product. That is a meaningful gap: your secondary gallery shots, lifestyle images and infographic panels are not listed, and those are often the images that win in visual search. WooCommerce with Yoast or Rank Math includes page images in the relevant sitemap entries, which covers more of the gallery but depends on the images being rendered in the page markup rather than in a JavaScript slider.
If you sell across several storefronts, the practical fix is to generate one supplementary image sitemap containing every gallery image URL and submit it in Search Console alongside the platform sitemap. There is no penalty for an image appearing in two sitemaps.
Structured data: the image fields that matter
Product structured data is what tells Google that a given image is a product photo rather than a banner, a logo or a blog illustration. That association is what makes the image eligible for shopping and Lens surfaces rather than just generic image results.
Practical rules for the image property:
- Pass an array, not a single URL. Google's own examples show the same product supplied at 1:1, 4:3 and 16:9. Different surfaces crop differently, and giving Google a choice beats letting it crop your product's head off.
- Use absolute, crawlable URLs that resolve without a redirect and are not blocked in robots.txt.
- Merchant listing markup requires an image, and the resolution floor is expressed as total pixels: at least 50,000 pixels when you multiply width by height. A 224 x 224 thumbnail scrapes past that; it is not a target, it is a failure line.
- Match your feed. Google Merchant Center's product data specification raised the minimum image size to 500 x 500 pixels, with warnings from 14 April 2026 and enforcement from 31 January 2027. Non-apparel items previously scraped by at 100 x 100. If your structured data points at one asset and your feed's image_link points at a smaller thumbnail, you will pass one check and fail the other.
- Name a preferred page image using og:image or schema.org's primaryImageOfPage. Google uses both when choosing a thumbnail for search and Discover.
Getting one master shot exported cleanly at several ratios and sizes is exactly the kind of repetitive job worth automating. A batch resizer such as PixelPrep will turn a single high-resolution original into the square, 4:3 and 16:9 versions your markup references without you opening an editor twenty times.
The one-line tag most stores are missing
Without an explicit directive, Google limits image previews to small thumbnails. The fix is a single site-wide meta tag in the head:
<meta name="robots" content="max-image-preview:large">
This governs large previews across web search, Google Images and Discover. Discover eligibility in particular expects images at least 1,200 pixels wide alongside this directive. Many themes ship without the tag, and many SEO plugins add it by default, so check your rendered source rather than assuming.
Licensing metadata and the Licensable badge
If you have paid for photography, you can claim it. Google supports two routes, and you can use both:
- Structured data: add the license property (and a licence acquisition page) to your ImageObject markup. The license property is what makes an image eligible for the Licensable badge.
- Embedded IPTC metadata: populate the Web Statement of Rights field inside the image file itself. This travels with the file wherever it is copied.
For most sellers the value is not licensing revenue, it is provenance. When a dropshipper lifts your photos, embedded rights metadata and a licence page make the takedown conversation much shorter.
Signal-by-signal summary
| Signal | Where it lives | What it does | What breaks without it |
|---|---|---|---|
| img src / srcset | Page HTML | Primary discovery path | CSS-background images are never indexed |
| Image sitemap | XML file, submitted in Search Console | Surfaces gallery and CDN-hosted images | Only the primary image gets found on most platforms |
| Product structured data image array | JSON-LD in page head | Marks the image as a product photo; feeds Shopping and Lens | Images treated as generic page decoration |
| max-image-preview:large | Robots meta tag | Allows full-size previews | Thumbnail-only display; no Discover eligibility |
| og:image / primaryImageOfPage | Page head | Chooses the thumbnail Google shows | Google picks for you, often badly |
| license / IPTC rights | Markup and file metadata | Licensable badge and provenance | No ownership signal when images are copied |
File-level details that quietly block indexing
Google Search supports BMP, GIF, JPEG, PNG, WebP, SVG and AVIF. Two practical traps: the file extension must match the actual file type, which catches sellers who rename a HEIC or PNG to .jpg without converting it; and image URLs should stay stable. Every time a re-upload changes the filename hash, you reset that image's indexing history. Retouch and replace at the same URL where your platform allows it, and keep one canonical URL for an image used on multiple pages so crawl budget and caching both work in your favour.
Implementation checklist
- View source on a product page and confirm every gallery image appears as an img src, not a CSS background.
- Confirm max-image-preview:large is present in the head site-wide.
- Generate a supplementary image sitemap covering all gallery images, not just the primary shot, and submit it in Search Console.
- Verify your CDN or image host in Search Console and check its robots.txt allows crawling.
- Make the structured data image property an array with at least 1:1 and 16:9 versions, all above 500 x 500.
- Align the feed image_link with the same master asset, ahead of the January 2027 enforcement date.
- Set og:image deliberately on product pages; do not let the theme default decide.
- Add licence metadata to commissioned photography, in markup and in the file.
- Re-run the Rich Results Test after any theme update, because theme updates are where image markup usually gets lost.
None of this improves a bad photo. What it does is make sure the good ones are actually findable, at full size, correctly attributed to your product, on every surface Google now uses to answer a shopping question.