What Shopify gets wrong most often
The default product JSON-LD is valid but incomplete. Shopify emits Product or ProductGroup with an offer, yet it does not add hasMerchantReturnPolicy or shippingDetails, so Search Console reports those as missing on stores that never touched their theme. The fix is usually in Merchant Center settings, not the template.
The generated sitemap is an index, and recent Shopify stores list a one-URL discovery sitemap as its first child. Tools that read only the first child see a single URL and report an empty catalogue.
When a product or collection is republished, Shopify can change the handle. Links and feeds that still point at the old URL redirect or 404, and the feed entry stops matching the landing page.
An app that injects its own canonical, og tags or schema into the head can sit alongside the theme output. Two canonicals is worse than none, because search engines may ignore both.
A password page, a maintenance app or a bot-protection rule can answer Google with a 403 or a 503 while the store loads fine for the owner. This is the classic works-for-me failure.
The checks that matter most on Shopify
- Structured dataThe theme ProductGroup markup and the missing return and shipping fields behind most Search Console warnings.
- XML sitemapThe generated index and its discovery child, plus whether the child URLs are alive.
- Canonical tagsTheme plus app canonicals, and filters that create variants of one product.
- Page indexabilityA stray noindex from an app or a CDN setting, checked against robots.txt.
- Merchant readinessThe product fields that decide rich results and Shopping listings: name, image, price, availability, brand, returns and shipping.
- Availability checkProducts sold out but still advertised, the fastest way to lose Shopping placement.
- Price checkVariant prices and currency in both the catalogue and the page markup.
What to do about it
- Set returns and shipping in Merchant Center so the listing fields are covered without editing the theme, then add only what Merchant Center cannot supply to the JSON-LD.
- When a handle changes, fix the source that generated the old URL rather than adding a redirect, or the same item fails again on the next sync.
- Audit installed apps after any head-related finding: disable each app that writes a canonical or a schema block and re-run the check.
- Fetch product URLs from outside your network, in a private window, to see what a crawler gets rather than what your browser gets.
- Run availability and price checks on a schedule, not once. They change hourly.
A typical Shopify failure, worked through
The setupA merchant installs an SEO app that adds its own canonical, while the theme still emits one. The product page now has two canonical tags pointing at slightly different URLs.
What the check reportsThe canonical check reports 2 canonical links and warns that search engines may ignore both. In Search Console the product can flip between URL variants over time.
The pointOn Shopify the fix is usually an app setting, not a code change. Find which of the two sources you do not need and turn it off.