SEO Guide · 2026
Shopify Structured Data Testing Tools: How to Validate Your JSON-LD
Shopify themes emit Product JSON-LD automatically, but the default implementation has well-documented gaps that block rich results and reduce AI agent visibility. This guide covers the five validation tools, what each one catches, and how to read their output for Shopify-specific errors.
availability strings, missing priceValidUntil, GTIN absent from variant schema, relative image URLs.
The five structured data testing tools for Shopify
| Tool | Coverage | Cost | Best for |
|---|---|---|---|
| Google Rich Results Test | Single URL | Free | First check — confirms which rich result types are detected and which required fields are missing |
| Schema Markup Validator (validator.schema.org) | Single URL or pasted markup | Free | Full Schema.org compliance including types Google doesn't validate (ProductGroup, hasVariant, Brand) |
| Google Search Console → Enhancements → Shopping | Whole site (sampled) | Free (GSC) | Store-wide error counts; surfaces "affected pages" lists; signals when Googlebot disagrees with your test results |
| CatalogScan | Full product catalog | Free scan | Catalog-wide GTIN, AggregateRating, and JSON-LD coverage in one pass — finds the 40% of products a single-URL tool misses |
| Merkle Schema Markup Generator / Validator | Paste markup | Free | Generates correct JSON-LD templates; useful for building fix snippets before pushing to theme |
Google Rich Results Test: reading the Shopify output
Paste a product page URL into the Google Rich Results Test. You should see a "Product" rich result detected. If you don't, the page's JSON-LD has a blocking error or the theme is deferring script execution until after the renderer's JavaScript timeout.
The three most common Shopify-specific errors flagged by this tool:
| Error message | Cause | Shopify fix |
|---|---|---|
| "Missing field 'availability'" | Theme uses shorthand "InStock" instead of the full schema.org URI |
Change to "https://schema.org/InStock" in the theme's JSON-LD Liquid snippet |
| "Missing field 'priceCurrency'" | Price rendered without currency code, or currency code from a non-ISO variable | Use {{ shop.currency }} and ensure the JSON-LD price block has a separate "priceCurrency" key |
| "Price is 0 or empty" | Variant with no price set, or the Liquid price filter rendering 0.00 for free products |
Exclude free or draft variants from JSON-LD generation; set a real price of 0 only if the product is intentionally free |
Schema Markup Validator: what it catches that Google doesn't
The Schema Markup Validator checks full Schema.org compliance. It validates types that Google ignores, which is why it matters for AI agent compatibility beyond Google. Key Shopify-specific findings from this tool:
- ProductGroup missing: If your theme emits one Product per page (rather than a ProductGroup with hasVariant children), AI agents that use ProductGroup for variant aggregation (Perplexity, some Google AI Mode paths) see only the first variant's price and availability.
- Brand type missing: The vendor field is often emitted as a plain string (
"brand": "Acme") rather than aBrandobject with a URL and sameAs. AI agents use the Brand object for entity disambiguation. - Offer eligibleQuantity absent: Schema.org allows specifying minimum order quantities and maximum per-customer limits — AI agents that handle B2B queries read this field.
Google Search Console Shopping Enhancements report
The GSC Shopping Enhancements report aggregates structured data errors across all crawled product pages. It is slower than single-URL tools (GSC crawls on Google's schedule) but more authoritative — it reflects what Googlebot actually renders, not what a browser renders. Key differences from the Rich Results Test:
- GSC reports what Googlebot's rendering service (WRS) sees after JavaScript execution — so a deferred JSON-LD injection that passes the Rich Results Test may still fail in GSC if it takes too long to render.
- GSC shows the count of affected URLs, not just one URL — useful for understanding whether errors are template-wide or only on specific products.
- GSC errors appear with a 2–7 day lag after you deploy a fix — it re-crawls on its own schedule.
CatalogScan: catalog-wide coverage check
Single-URL tools are necessary but not sufficient. A Shopify store with 800 products has 800 product pages. The 5% of products with missing GTINs, blank descriptions, or broken image URLs will not appear in a single-URL test. CatalogScan reads the full /products.json catalog and checks 18 signals including:
- GTIN coverage across all variants (not just page-level JSON-LD)
- AggregateRating presence across all product pages
- Description length distribution (under 150 chars = poor AI agent signal extraction)
- Image alt text coverage (blank alt text = moderate quality penalty)
- ProductGroup vs. flat Product JSON-LD detection
Testing structured data from the command line
For bulk spot-checks without manual tools, curl can verify JSON-LD presence and catch obvious syntax errors:
# Extract JSON-LD from a product page
curl -s "https://yourstore.com/products/your-product" \
| python3 -c "
import sys, re, json
html = sys.stdin.read()
blocks = re.findall(r'', html, re.DOTALL)
for b in blocks:
try:
obj = json.loads(b)
if obj.get('@type') in ('Product','ProductGroup'):
print(json.dumps(obj, indent=2))
except json.JSONDecodeError as e:
print(f'JSON parse error: {e}')
"
FAQ
What is the best free tool to test Shopify structured data?
Google's Rich Results Test is the best starting point — it shows which rich result types are detected, which required fields are missing, and which warnings degrade quality. For comprehensive Schema.org compliance beyond Google's subset, use the Schema Markup Validator at validator.schema.org. For store-wide coverage (not just one URL), CatalogScan's free scan checks Product and AggregateRating JSON-LD across your full catalog in one pass.
Does Shopify automatically add structured data to product pages?
Yes, most Shopify themes emit a Product JSON-LD block in the page <head>. However, the default implementation has known gaps: it uses shorthand availability strings instead of schema.org URIs, it omits GTIN unless the theme explicitly includes variant.barcode, and it does not include AggregateRating (review schema) — that requires a separate review app. The Dawn theme (Shopify's default) includes Product JSON-LD but not ProductGroup for multi-variant products.
What is the difference between Google Rich Results Test and Schema Markup Validator?
Google Rich Results Test checks against Google's specific subset of Schema.org — it validates only types and properties Google uses for rich results (Product, FAQPage, Review) and ignores types Google doesn't process. Schema Markup Validator at validator.schema.org checks full Schema.org compliance, including types that AI shopping agents use (ProductGroup, hasVariant, Brand entity, eligibleRegion). Use both — they catch different classes of errors.
How do I fix 'missing field' errors in Google Search Console's Shopping Enhancements?
GSC Shopping Enhancement errors split into required-field errors (block rich results) and recommended-field warnings (degrade quality). For Product type, required fields are name, offers.price, offers.priceCurrency, offers.availability. Common Shopify fixes: (1) Replace shorthand availability with schema.org URIs. (2) Add offers.priceValidUntil with a future date. (3) Add offers.itemCondition. (4) Ensure image is an absolute URL, not a relative path. CatalogScan surfaces all of these errors across your full catalog automatically.
Find structured data errors across your entire catalog
CatalogScan checks Product JSON-LD, GTIN coverage, AggregateRating, and 15 more signals — all in one free scan, not one URL at a time.
Run the free scan →