Image requirements from Shopify
How Shopify product and variant images map to Google's image_link and additional_image_link, resolution rules, variant image handling, and the overlays and crawl blocks that get images disapproved.
Google's image_link is the single most visible attribute in a Shopping ad, it's the picture shoppers click. This reference covers how Shopify's product and variant image URLs map to Google's image attributes, what resolution and format Google expects, why variant images matter, and the common Shopify image problems (text overlays, blocked crawls, wrong variant image) that get products disapproved.
What Google expects, and where Shopify supplies it
Google Shopping uses two image attributes, and Shopify has a natural source for both:
| Google attribute | Shopify source | Role |
|---|---|---|
image_link |
Variant image, else product featured image | The main image shoppers see in the ad: exactly one per offer |
additional_image_link |
Other product images | Extra angles/detail shots: up to 10 |
Shopify serves every image from its CDN (cdn.shopify.com) as a stable, public URL, which is what Google needs to crawl. The mapping itself is clean; the problems are almost always about which image maps and what's in it.
Resolution and format
Google's requirements are stricter than Shopify's uploader enforces, so a store can hold images Shopify accepts but Google won't:
- Minimum size: 100 × 100 px for non-apparel, 250 × 250 px for apparel. Below that, the image is rejected.
- Recommended size: at least 800 × 800 px. Shopping placements can render large, and small source images look soft.
- Maximum: 64 megapixels and 16 MB per file.
- Format: common web formats (JPEG, PNG, WebP, GIF). Shopify's CDN serves these fine.
- No placeholder or "image coming soon" graphics: Google treats a placeholder as a missing image.
Shopify's CDN can resize on request via URL parameters, but the source image still has to clear Google's minimum. A 400 × 400 upload can't be made compliant for apparel by asking the CDN for a larger version: it just upscales and looks worse.
Variant images are the ones that get missed
This is the single most common Shopify image mistake, and it's the same failure described in the variants guide: every variant offer should carry its own colour's image, but many feeds send the product's featured (hero) image for every variant.
The shopper searches "green armchair", the ad shows your grey hero shot, and they either don't click or click and bounce. Google is also increasingly strict that a variant's image should represent that variant: a mismatched colour image is a quality problem, not just a conversion one.
The fix is two-sided:
- In Shopify: assign at least one image per colour variant. Shopify lets you attach an image to a variant directly.
- In the feed:
image_linkmust map the variant image first and fall back to the product featured image only when the variant has none: never the other way round.
What must stay out of the main image
Google's image policy for image_link is unforgiving, and Shopify does nothing to stop you uploading a non-compliant image. The main image must be the product on a plain background with no:
- promotional text or pricing ("Sale", "50% off", "£19.99")
- watermarks, logos or brand badges laid over the product
- borders, colour blocks or decorative frames
- placeholder graphics
- multiple products where the offer is a single item (except genuine bundles)
Lifestyle and text-laden versions are fine as additional_image_link: the rule is strictest on the main image. If your Shopify product's featured image is a merchandising graphic with a sale flash on it, that's a disapproval waiting to happen; see fixing disapprovals.
Deep dive Why Google "can't fetch" a Shopify image that clearly loads
"Image cannot be fetched" disapprovals are maddening because the URL opens fine in your browser. The reason is that Google's crawler is not your browser, and Shopify serves images through a few moving parts that can each trip it up:
- Robots or crawl blocks. If anything in front of the Shopify CDN (a firewall app, an aggressive bot-protection rule, a
robots.txtmistake) blocks Google's image crawler by user agent, Merchant Center can't fetch the file even though a human can. Google retries on a schedule but marks the product disapproved in the meantime. - URL churn. Shopify image URLs contain a version token. Re-uploading or editing an image mints a new URL; if a feed cached the old one, Google fetches a URL that now 404s. Feeds that re-read image URLs on each sync avoid this; feeds that cache aggressively don't.
- CDN timeouts under load. An occasional slow response during a crawl can register as a fetch failure. One-off failures usually clear on the next crawl; persistent ones point at a block, not a blip.
- Redirect chains. An image URL that redirects (e.g. through a resizing proxy) can exceed Google's redirect tolerance and read as unfetchable.
Three habits keep this rare: serve image URLs Google can crawl directly rather than through a proxy; re-read the current variant/product image URL on every feed refresh so version tokens stay live; and don't block Google's crawler user agents at the store or CDN layer. /tools reads the live Shopify image URLs on each sync and includes image reachability in the Feed Health Score checks, so a broken or blocked image surfaces before Google disapproves the product for it: and, being non-destructive, none of this touches the images in your Shopify admin.
Quick checklist
- Every colour variant has its own image assigned in Shopify.
- The feed maps variant image first, product featured image as fallback.
- Source images are at least 800 × 800 px (250 × 250 px hard minimum for apparel).
- The main image is the clean product shot: no text, badges, watermarks or borders.
- Lifestyle and detail shots go to
additional_image_link, notimage_link. - Google's crawler isn't blocked at the store, app or CDN layer.
- Image URLs are re-read on each sync so edited images don't leave dead links.
Frequently asked questions
Which Shopify image becomes the main Google image?
For a variant with its own assigned image, that variant image becomes image_link. When a variant has no image of its own, the feed falls back to the product's featured image. Additional product images become additional_image_link.
Can I put a sale badge or logo on my product image?
Not on the main image. Google disapproves image_link images that contain promotional text, watermarks, badges or borders. Keep those out of the image you feed and use Merchant Center promotions for sale messaging instead.
Why does Google say it can't fetch my image?
Merchant Center is being blocked or timed out when it tries to crawl the Shopify image URL, often a robots rule, an occasional CDN hiccup, or a URL that has since changed. The product shows as disapproved for a missing or uncrawlable image until Google can fetch it.