Skip to main content
Field NotesShopify Signals10 min read

The 18-field Product/Offer JSON-LD checklist

We audited 1,200 Shopify PDPs this quarter. Stores that shipped all 18 fields were cited by AI engines at 2.4× the rate of stores with fewer than eight. This is the checklist — and the eight mistakes we saw the most.

Harry Parker
Co-founder, Onviqa Inc. · Surfient
product-offer-checklist
TL;DR
  • There are 18 Product/Offer JSON-LD fields that matter on a Shopify PDP in 2026 — 11 required by Google and 7 recommended. Stores shipping all 18 are cited by AI engines at 2.4× the rate of stores shipping fewer than 8 (n=850 PDPs).
  • The eight most common mistakes Shopify merchants make are schema-typing errors that pass type-check but silently disqualify the page: bare 'InStock' strings, flat brand strings, stale priceValidUntil, AggregateOffer mis-use, currency in the price, fake aggregateRating, relative URLs, and duplicate Product blocks from theme + app collision.
  • Validation has to happen twice: Schema.org's validator catches spec violations, Google's Rich Results Test catches the Google-specific filters. If either fails, AI retrievers re-run validation on ingest and silently drop the citation signal — you will not see the failure in Search Console.

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.

Field matrix for the 18 Product/Offer JSON-LD fields that move AI citation rate and Google rich results on Shopify PDPs in 2026: 11 required, 7 recommended.
Figure 1 — the 11 required + 7 recommended fields that showed up on high-citation Shopify PDPs. Cross-reference this against your own PDP schema today.

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.

Eight-card grid of the most common Product/Offer JSON-LD mistakes on Shopify PDPs: bare availability strings, flat brand strings, stale priceValidUntil, AggregateOffer mis-use, currency-in-price, fake aggregateRating, relative URLs, and duplicate Product blocks.
Figure 2 — the eight mistakes we see the most. Each card shows the bad version (red) and the correct version (green).
  • 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, and PerplexityBot with curl -A and 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.

Tags:schema.orgProductOfferJSON-LDShopifyGEO

Frequently asked questions

Try Surfient free

See how your Shopify store scores with AI engines

Surfient audits every signal ChatGPT, Perplexity, Claude, and Google AI Overviews read on your store — in under 60 seconds, with no install, no card, no catch.

  • ChatGPT, Perplexity, Claude, and AI Overviews
  • Store-by-store score with fix priorities
  • 60-second audit, no install or card

Sources & further reading

  1. Surfient Q1 2026 Shopify Product schema audit (n=1,200 stores)
    Surfient Research2026-03-27
Harry Parker
Co-founder, Onviqa Inc. · Surfient

Harry has led SEO and e-commerce engineering for over 12 years and has been shipping Shopify software since Onviqa was founded in 2014. He writes about where commerce is headed when shoppers stop typing queries and start asking assistants.

Related reading

All posts