CatalogScan

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.

TL;DR Start with Google Rich Results Test for rich-result eligibility. Use Schema Markup Validator for full Schema.org compliance. Check Google Search Console Shopping Enhancements for store-wide error counts. Use CatalogScan for catalog-wide coverage in one pass. Most common Shopify errors: shorthand availability strings, missing priceValidUntil, GTIN absent from variant schema, relative image URLs.

The five structured data testing tools for Shopify

ToolCoverageCostBest 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 messageCauseShopify 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:

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:

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:

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 →