{"slug": "i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-google-s-2", "title": "I checked the product markup of 14 well-known Shopify brands: all pass Google's minimum, only 2 tell machines what shipping costs", "summary": "A developer audited product-page structured data across 21 well-known Shopify brands on 4 November 2026, finding that all 14 readable pages passed Google's minimum Product JSON-LD requirements but only 2 declared shippingDetails and 3 declared hasMerchantReturnPolicy. The median score was 75 of 100, with losses concentrated in shipping, returns, ratings, GTINs and item condition; one page carried an invalid GTIN and 4 declared OutOfStock despite being in the live feed. The audit was run with a Product Schema Checker the developer built on Apify.", "body_md": "When an AI shopping assistant or Google's merchant crawler looks at a product page, it rarely \"sees\" the page. It reads the structured data: the `Product` JSON-LD block with price, availability, identifiers, shipping and returns. Whatever is not in that block may as well not exist for a machine.\n\nOn 4 November 2026 I checked one product page each from 21 well-known Shopify brands. 14 came back with a readable page; the rest are covered at the end.\n\n*Disclosure: I built the checker used here, the [Product Schema Checker](https://apify.com/fast_data_asap/product-schema-checker) on Apify. How to run it on your own pages is at the end.*\n\n`/products.json` feed, so the sample is not cherry-picked.`Product` was scored against what Google's merchant listings and AI shopping agents use: name, image, price, currency, availability, brand, identifiers (GTIN/SKU/MPN), rating, reviews, item condition, shipping details and return policy.\nAll 14 pages had a `Product` in JSON-LD with:\n\nThat is Shopify's theme layer doing its job. Any store on a modern theme gets these for free.\n\nThe median score was **75 of 100**. The points were lost on the same fields again and again:\n\n| Field | Pages that have it | \n|---|---|\n| `shippingDetails` (shipping cost and time) | **2 of 14** | \n| `hasMerchantReturnPolicy` | **3 of 14** | \n| `aggregateRating` (star rating) | 4 of 14 | \n| `gtin` (barcode) | 4 of 14 | \n| `review` (individual reviews) | 0 of 14 | \n| `itemCondition` | 5 of 14 | \n\nOnly **Outdoor Voices (94)** and **Taylor Stitch (92)** declared both shipping and returns in their markup. Everyone else leaves an assistant to guess the two questions shoppers ask most: \"what does delivery cost?\" and \"can I send it back?\"\n\nThree observations from the details:\n\n**1. Ratings may be on the page, but not in the data.** In the plain HTML, only 4 of 14 expose `aggregateRating`, and none has individual reviews. Most review widgets load with JavaScript after the page renders, so if a store shows stars that way, a crawler that does not run scripts never sees them. Most review apps can write a JSON-LD rating into the theme. It is usually one setting.\n\n**2. GTINs are rare and not always real.** Only 4 pages had a `gtin` field. One of them contained `15U2UGGFXG60`, which is not a valid GTIN at all (GTINs are 8, 12, 13 or 14 digits with a check digit). It looks like an internal SKU in the wrong field. Google matches products across shops by GTIN, so a wrong value can hurt more than a missing one.\n\n**3. \"Out of stock\" is often the theme's default.** 4 of the 14 pages declared `OutOfStock`, although the product was listed in the store's live feed. One possible cause on Shopify: the markup describes only one variant (for example a sold-out size). An agent then reads the whole product as unavailable.\n\nSo a third of the sample turned away a polite, single request from a data center. That is a defensible security choice. But it is worth knowing that some AI assistants fetch pages from similar infrastructure, and a shop that rate-limits them by default may be invisible to them.\n\n`hasMerchantReturnPolicy` and `shippingDetails` to the product JSON-LD. Google also lets you set them once at the organization level. Both are static for most shops: write them once and you are done.`aggregateRating` is in the HTML and not only in the widget.`ProductGroup` or multiple `Offer` s), not just the first.\n\n```\ncurl -X POST \"https://api.apify.com/v2/acts/fast_data_asap~product-schema-checker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"startUrls\": [\"https://your-store.com/products/your-product\"]}'\n```\n\nYou get one flat row per URL: all schema types found, the product fields, `missingRequired`, `missingRecommended`, a score and grade, and concrete fix hints. It costs $0.002 per product page found; pages without product markup, blocked pages and errors are free. The 21 pages here took a few seconds.\n\nFor barcodes, the [EAN/GTIN Lookup](https://apify.com/fast_data_asap/ean-gtin-lookup) validates check digits and looks up open product data for $0.0002 per code.\n\n*Data: one product page each from 21 Shopify stores, plain HTTP, 4 November 2026. A different product or a crawl from another network can give different results.*", "url": "https://wpnews.pro/news/i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-google-s-2", "canonical_source": "https://dev.to/fast_data_asap/i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-googles-minimum-only-2-4d1l", "published_at": "2026-11-04 07:48:16+00:00", "updated_at": "2026-11-04 07:56:46.474280+00:00", "lang": "en", "topics": ["structured-data", "ai-crawlers", "ai-search", "ai-products"], "entities": ["Shopify", "Google", "Apify", "Outdoor Voices", "Taylor Stitch"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-google-s-2", "markdown": "https://wpnews.pro/news/i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-google-s-2.md", "text": "https://wpnews.pro/news/i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-google-s-2.txt", "jsonld": "https://wpnews.pro/news/i-checked-the-product-markup-of-14-well-known-shopify-brands-all-pass-google-s-2.jsonld"}}