CatalogScan

Schema Reference · 2026

E-commerce Product Schema Markup Guide: Complete JSON-LD Reference

Schema.org JSON-LD is the primary language AI shopping agents use to understand your product catalog. This is the 2026 reference — every field that ChatGPT Shopping, Perplexity Shopping, and Google AI Mode read, which are required vs. nice-to-have, and how to validate your implementation with no paid tools.

TL;DR In 2026, effective product schema = ProductGroup (not just Product) + GTIN on every Offer + real-time availability + AggregateRating from a JSON-LD-emitting review source + shippingDetails and hasMerchantReturnPolicy. The old minimum of name + price + availability is no longer sufficient for AI agent visibility.

The Product vs. ProductGroup distinction

Before 2025, most e-commerce schema guides told you to use @type: "Product" as your outer container. In 2026, with AI shopping agents that need to understand multi-variant products, ProductGroup is the correct outer type for any product with variants (color, size, material, etc.).

A Product type represents one specific SKU. A ProductGroup represents the parent concept (e.g., "Nike Air Zoom Pegasus 41") and declares its variants via the hasVariant property. Agents use ProductGroup to handle queries like "blue, size 10" — matching the query against the variant combinations declared in hasVariant, not by crawling each variant URL separately.

ProductGroup fields reference

Field Priority Notes for AI agents
@type Required Must be "ProductGroup" for multi-variant products. Use "Product" only for products with a single variant/SKU.
name Required The product name without variant attributes. "Nike Air Zoom Pegasus 41" not "Nike Air Zoom Pegasus 41 — Blue, M10."
description High Plain text, no HTML. Agents read this to extract key attributes not covered by other fields. Keep under 5000 characters.
brand High Use {"@type": "Brand", "name": "Nike"} (entity form), not just "Nike" (string). Agents use the entity form for cross-store brand matching.
hasVariant Required Array of child Product objects, one per SKU. Each must have its own Offer, GTIN, and availability.
variesBy High Declares which properties vary (e.g., ["color", "size"]). Helps agents understand the variant dimensions without parsing all hasVariant children.
aggregateRating High Must include ratingValue, reviewCount, and bestRating. Requires a review app that injects JSON-LD — HTML stars are not read by agents.
image Medium Array of full-resolution image URLs. Agents use images for visual search matching and to generate product cards.
url Required The canonical URL of the product page. Must match the canonical link tag.
sku Optional Your internal SKU. Used for internal cross-referencing; less important than GTIN for agent matching.

Offer fields reference

Each variant child Product should have one Offer (or offers array). These are the fields agents use for transactional queries (price constraints, availability, shipping):

Field Priority Notes for AI agents
price + priceCurrency Required Numeric price (not "$89.00") + ISO 4217 currency code. Must match the page's displayed price exactly.
availability Required Real-time availability: InStock, OutOfStock, PreOrder, Discontinued. Must be variant-level. A stale InStock on an OOS variant destroys trust score.
gtin Required GTIN-12 (UPC-A) or GTIN-13 (EAN). Primary join key for cross-store price comparison. Set per variant, not per parent product.
shippingDetails High OfferShippingDetails with shippingRate, deliveryTime, and shippingDestination. Agents use this to answer shipping-constrained queries without a separate policy page fetch.
hasMerchantReturnPolicy High MerchantReturnPolicy with returnPolicyCategory, merchantReturnDays, and returnMethod. Perplexity Shopping uses as a tie-breaker signal.
priceValidUntil Optional Date string (ISO 8601). Agents treat price data as stale after this date — useful for sale pricing, harmful if you set it in the past.
seller Optional Organization entity for your store. Useful for marketplace-style stores that sell from multiple merchants.

Validating your schema markup

Recommended free validation steps:

  1. Google Rich Results Test — validates JSON-LD syntax and Schema.org conformance for a single URL. Does not check GTIN coverage or cross-catalog consistency.
  2. Schema Markup Validator (validator.schema.org) — checks against the Schema.org spec directly. Catches type errors and missing required fields.
  3. CatalogScan — scores structured data completeness across your full catalog (not just one URL). The only tool that checks variant-level GTIN, ProductGroup completeness, and AggregateRating source quality at catalog scale.

FAQ

Can I use Microdata or RDFa instead of JSON-LD?

JSON-LD is strongly preferred by all AI shopping agents and by Google. Microdata and RDFa are read but parsed less reliably. If you're starting from scratch, use JSON-LD. If you have existing Microdata, the incremental improvement from converting to JSON-LD is measurable but not urgent — fix your GTIN coverage and ProductGroup first.

Does schema markup affect traditional Google search ranking?

Schema markup is not a direct ranking factor for traditional blue-link results. It does enable Rich Results (star ratings, price range, availability in SERPs) which improve click-through rates — typically 10–25% lift in CTR for product pages with AggregateRating. In 2026, the bigger return is AI shopping agent visibility, not SERP CTR improvement.

How do I add shippingDetails to Shopify's JSON-LD?

Shopify doesn't include shippingDetails in its default JSON-LD output. You must add it manually in your theme's product.liquid (or equivalent). Set shippingRate from your actual shipping zones, deliveryTime from your SLA, and shippingDestination matching your primary markets. If you use a third-party shipping app, check whether it provides a theme integration that injects shipping JSON-LD automatically.

Validate your product schema at catalog scale

CatalogScan checks GTIN coverage, ProductGroup completeness, and AggregateRating source quality across your whole catalog — not just one URL.

Run the free scan →