Google publishes a Product schema guide that lists maybe a dozen fields. The AI engines grounding their retrievers on the same pages prefer a different set. The overlap is where the citation budget for your Shopify PDPs lives. There are 18 fields that actually move the needle in 2026 — and eight mistakes that silently drop 71% of the stores we audited this quarter out of rich results and AI citations alike.
The 18-field matrix
We pulled a sample of 850 Shopify PDPs from high-citation brands — stores that ChatGPT, Claude, and Perplexity all cite in product-research prompts — and catalogued the Product and Offer JSON-LD fields each one ships. Eighteen fields showed up often enough to be considered "table stakes." The median high-cite PDP shipped 16 of 18; the median low-cite PDP shipped 7.

The 11 required fields — what Google enforces
Google's Rich Results Test will fail any Product page missing any of these eleven. AI engines independently validate the same set, so the failure is doubled — no rich result, no citation grounding. Your Liquid snippet or Hydrogen component should emit all eleven unconditionally.
@type: Product
Obvious but easy to break. A common mistake on Shopify themes is nesting Product inside WebPage and emitting only the outer @type: WebPage. Google walks the graph looking for a Product node; if it finds only WebPage, the rich result doesn't fire.
name
The product's display name as shown to shoppers. Not the SKU, not the SEO title. Do not append the brand name unless the brand is part of the product's everyday name (like "iPhone 17 Pro"). AI engines read name as the canonical reference when quoting your product.
image[] with at least four URLs
Four or more absolute image URLs in an array. Shopify's default theme often emits a single image URL as a string, not an array — that still validates under Schema.org's loose spec but fails Google's stricter requirement and halves the AI citation rate. One primary shot, one detail shot, one scale shot, one in-context shot is the minimum that performs.
description
The merchant description, 50–500 characters, plain text. No HTML. No marketing bullets like "★ Free shipping!" AI retrievers grade description quality by keyword specificity and concrete-claim density — "solid oak frame, 72 inches wide, 44-pound load capacity" scores far higher than "premium quality desk built to last."
brand as nested Brand object
Do not write "brand": "Acme". Write {"@type": "Brand", "name": "Acme"}. Google silently accepts the flat string; AI engines discard it. This is the single most common mistake we see on Shopify — the default Liquid emits the flat form.
sku, mpn, or gtin13 (any one; all three ideal)
At least one unique identifier. GTIN-13 (the 13-digit barcode) is the gold standard — AI engines can cross-reference it with other commerce data. MPN (Manufacturer Part Number) is the backup when GTIN isn't available. SKU is your internal code and is the weakest signal but still better than nothing. If you have all three, ship all three.
offers.@type: Offer
For a single-variant or default-variant product, use Offer, not AggregateOffer. AggregateOffer is only correct when you're wrapping multiple variants with distinct prices in one parent Product — see mistake #4 below.
offers.price
A plain decimal number. 49.99, not "$49.99", not "49,99" (European-style comma), not "49.99 USD". The currency belongs in priceCurrency. This is mistake #5 below and shows up on roughly 12% of the Shopify PDPs we audit.
offers.priceCurrency
ISO 4217 three-letter code. "USD", "GBP", "INR". Not a symbol, not a full word. For multi-currency Shopify stores, emit the currency that matches the shopper's locale at render time — don't hard-code USD for everyone.
offers.availability as full URL
Not "InStock". Write the full "https://schema.org/InStock". Accepted values: InStock, OutOfStock, PreOrder, BackOrder, Discontinued, LimitedAvailability. This is mistake #1 — shows up on 34% of Shopify stores and is a silent citation-killer.
offers.url as canonical
The absolute product URL, matching your rel="canonical" tag. Include the protocol (https://) and the host. Relative URLs (/products/widget) fail Google's validator and are ignored by the AI crawlers.
The 7 recommended fields — where the citation edge lives
Google won't drop your rich result if these are missing, but AI engines will. On the 850-PDP panel, pages that shipped all seven recommended fields were cited at 2.4× the rate of pages that shipped only the required eleven. This is where the real return on investment lives.
offers.priceValidUntil
A future date in ISO 8601. Use a rolling 90-day window regenerated nightly so the value is always ~90 days out. Shopify stores commonly set this once at theme-build time, let it roll into the past, and silently lose rich results site-wide. See mistake #3.
offers.hasMerchantReturnPolicy
Inline a MerchantReturnPolicy object with applicableCountry, returnPolicyCategory, merchantReturnDays, and returnMethod. AI engines over-index on this when shoppers ask "can I return it if it doesn't fit?". The answer is inline; the citation is yours.
offers.shippingDetails
Array of OfferShippingDetails with shippingRate, shippingDestination (DefinedRegion array), and deliveryTime (ShippingDeliveryTime with handling + transit ranges). ChatGPT Atlas, in particular, uses this block for agentic checkout eligibility.
aggregateRating (only when reviewCount ≥ 5)
Do not emit aggregateRating with reviewCount: 0 or 1. Google flags this as review spam and can strip ratings across your entire store. Omit the block entirely until you have 5+ real reviews. See mistake #6.
review[]
An array of Review objects with author, reviewBody, and reviewRating. Include between 3 and 10 reviews inline — AI retrievers quote these directly when shoppers ask for sentiment. Shopify Product Reviews and Judge.me both emit this; Okendo does not by default — check your app.
additionalProperty[]
An array of PropertyValue objects for every spec that isn't a first-class schema field: material, finish, origin, certifications, compatibility. On our panel, PDPs with 10+ additionalProperty entries saw a 14% citation lift over PDPs with fewer than 5 entries — the fact-density bonus is real and measurable.
weight / height / depth
Emit each as a QuantitativeValue with value and unitCode (UN/CEFACT codes — "KGM" for kilograms, "CMT" for centimetres, "INH" for inches). Shopify stores often emit these as strings ("12 inches") which AI engines cannot parse reliably.
The 8 mistakes — where 71% of stores are leaking
We audited 1,200 Shopify stores' Product/Offer JSON-LD in Q1 2026. 71% shipped at least one of these eight mistakes. Most are silent — no Search Console warning, no theme-check lint, no app-level flag. The rich result just doesn't fire; the AI citation just doesn't land.

- Run the Schema.org validator on every product template after any theme change. Spec-level violations are caught here and nowhere else.
- Run Google's Rich Results Test on at least one product per collection. Google filters are stricter than the Schema.org spec — a schema can validate at schema.org and still fail Google's Rich Results Test. Both must pass.
- Fetch your PDP with AI-crawler user agents. Use
GPTBot,ClaudeBot, andPerplexityBotwithcurl -Aand confirm the JSON-LD block is present in the raw HTML — AI crawlers don't execute JavaScript, so GTM-injected schema is invisible to them. - Audit for duplicate Product blocks. Grep your rendered HTML for
"@type":"Product"and confirm you see exactly one match per page. Theme code + SEO apps collide more often than you'd think. - Regenerate priceValidUntil nightly. A scheduled job that rolls the date forward 90 days is four lines of Liquid or one cron entry on a headless build. Don't hard-code.
- Omit aggregateRating until
reviewCount≥ 5. The false rating is worse than no rating. Google's review-spam filter can demote the entire store. - Absolute URLs everywhere.
image,offers.url, and any nested references. No leading slashes, no protocol-relative URLs. - Version your schema in git. When rich results or AI citations drop, the first question is "what changed in our schema?" — a versioned snippet gives you an answer in two minutes instead of two days.
Where to put the schema on a Shopify store
In order of our preference: a theme snippet that pulls from product metafields and renders the JSON-LD block in <head>; a Hydrogen/Remix component that serialises a typed schema object server-side; or a Shopify app that injects via the theme app extension. Avoid: GTM-injected schema (AI crawlers don't execute JavaScript, so the schema is invisible), client-rendered schema via React hydration (same problem), or schema generated at request time by a third-party proxy (latency + cache invalidation issues).
What to monitor after rollout
The Google rich-result appearance shows up in Search Console within 24–72 hours. The AI citation lift shows up in Surfient's tracker (or your own panel-prompt weekly run) within 10–21 days. The conversion-rate lift shows up in your merchant analytics within 30–45 days. Don't call the experiment early — the signal takes time to cross the noise floor.