Product Schema for AI Search — Shopify JSON-LD Implementation Guide
Only 12% of Shopify merchants have shipped comprehensive Product schema markup - the single most actionable step for AI discoverability (Metricus, 2026). Schema-compliant pages get cited 3.1x more often in Google AI Overviews. So this guide is the specific version: exactly which fields ChatGPT Shopping, Perplexity, and AI Overviews pull - and how to ship them on Shopify without an app if you want.
Why AI needs Product schema, not just HTML
Schema is one of six signals on the AI-ready product page checklist, and it's the one I'd fix first. AI retrieval systems read structured data before they parse HTML. When ChatGPT Shopping decides which products to recommend, it reads the JSON-LD first - name, price, availability, rating, brand. No schema and the AI is left guessing: scraping price out of CSS-styled text, inferring availability from phrases like "in stock" or "sold out." Slower, less reliable, and frequently skipped entirely. You're making it do work it would rather skip - so it skips you.
Stay in the loop
Get news and updates about GEO, AI search and new features. Unsubscribe anytime.
Is your brand a Ghost or a Guide on AI?
See if AI knows your brand. We ask Gemini and Claude live - in ~5 seconds, no signup.
Google explicitly recommends JSON-LD for structured data (Google Search Central). Schema-compliant product pages are the foundation of AI citation - everything else stacks on top of this.
Required fields (2026 update)
Google raised the bar on e-commerce Product schema in 2026. Minimum fields for full eligibility:
- name - product name (plain text)
- image - at least one product image URL
- description - plain text, 50+ characters
- brand - Brand entity with name
- sku or mpn or gtin - a unique product identifier
- offers - Offer entity with price, priceCurrency, availability, url
- aggregateRating - if reviews exist (ratingValue, reviewCount)
Highly recommended fields (2026)
Google now strongly recommends these for merchant-eligible rich results - "recommended" here means "you lose results without them":
- hasMerchantReturnPolicy - explicit return window, fees, country
- shippingDetails - estimated shipping cost, delivery time, destination
- gtin / gtin8 / gtin13 / gtin14 - global identifiers for product verification
- energyEfficiencyCategory - for electronics (EU markets)
These fields are the line between a product ChatGPT Shopping cites and one it never sees. ChatGPT Shopping shows 3-8 products per query - merchants without complete schema get filtered out at the data layer, before relevance even enters the picture. And GPTBot and OAI-SearchBot don't execute JavaScript, so this has to be server-rendered. JS-injected schema is the same as no schema to them.
Complete Product schema example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "CloudRunner Pro Running Shoe",
"image": [
"https://yourstore.com/products/cloudrunner-pro-1.jpg",
"https://yourstore.com/products/cloudrunner-pro-2.jpg"
],
"description": "Neutral daily training shoe for 30-50 mile/week runners. CloudTec foam midsole with 23% more energy return than previous model.",
"brand": {
"@type": "Brand",
"name": "CloudRunner"
},
"sku": "CR-PRO-2026",
"gtin13": "0123456789012",
"offers": {
"@type": "Offer",
"url": "https://yourstore.com/products/cloudrunner-pro",
"priceCurrency": "USD",
"price": "159.99",
"priceValidUntil": "2026-12-31",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"shippingDestination": {
"@type": "DefinedRegion",
"addressCountry": "US"
},
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": {"@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY"},
"transitTime": {"@type": "QuantitativeValue", "minValue": 2, "maxValue": 5, "unitCode": "DAY"}
}
},
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": "US",
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 60,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "342"
}
}
</script>
Shopify implementation
Shopify ships basic Product schema in most themes, but "basic" usually means "incomplete," and incomplete is the problem this whole post is about. Two ways to fix it:
Option 1: edit theme.liquid (what I'd do)
Add a custom Product schema snippet in sections/product-template.liquid or your theme's equivalent, after the existing structured data, and pull real product data with Liquid variables:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"image": {{ product.images | map: 'src' | json }},
"description": {{ product.description | strip_html | json }},
"sku": {{ product.selected_or_first_available_variant.sku | json }},
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
"offers": {
"@type": "Offer",
"url": "https://{{ shop.domain }}{{ product.url }}",
"priceCurrency": {{ shop.currency | json }},
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency | strip }}",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
}
}
</script>
Option 2: use an app
Apps like Schema Plus, JSON-LD for SEO, or Schema App Total Schema Markup handle this automatically. The one thing to actually check before you install: that it supports the 2026 Google updates (merchant return policy, shipping details, GTIN). An app stuck on the old spec just automates the gap.
Validation steps
- Test structure: Schema.org Validator - confirms syntactic validity
- Test eligibility: Google Rich Results Test - eligibility for Google rich results and AI Overviews
- Test the live URL: run the tests on your actual product URL, not just the generated JSON - that's how you catch the rendering issues that look fine on paper
What AI engines actually extract
When I dug into our ChatGPT Shopping, Perplexity, and Google AI Overviews citation data, the thing that jumped out is they don't all read the same fields:
- ChatGPT Shopping: prioritizes
name,brand,offers.price,aggregateRating,image - Perplexity: leans hard on
descriptionfor context, plus all offer fields - Google AI Overviews: requires
hasMerchantReturnPolicyandshippingDetailsfor merchant rich results
Miss any of these and you ship incomplete data into AI shopping results - your product shows up with "Price not available" or gets filtered out entirely. Either way, the customer never sees you, and you never see the miss.
GEOlikeaPro's AI Readiness audit checks your Product schema against every 2026 requirement and tells you exactly which fields are missing. The Crawler View shows what ChatGPT Shopping actually extracts from your store. Sign up free to audit your products.
FAQ
What are the minimum required fields for Product schema in 2026?
Google requires name, image, description, brand, a unique identifier (sku/mpn/gtin), and offers with price, priceCurrency, availability, and url. aggregateRating is required if reviews exist. Missing any of these disqualifies your page from merchant rich results.
Do I need GTIN for Product schema?
GTIN is highly recommended in 2026. It's a global product identifier (UPC, EAN, ISBN). Google uses it to verify products against merchant databases. Products without GTIN get fewer rich result impressions. Use sku or mpn as alternatives, but GTIN is strongest.
Does Shopify add Product schema automatically?
Most Shopify themes include basic Product schema by default, but it's usually missing 2026 requirements like hasMerchantReturnPolicy and shippingDetails. Audit your theme's output with Google Rich Results Test — if it fails, edit theme.liquid or install a schema app.
Which AI engine uses Product schema most?
ChatGPT Shopping relies most heavily on Product schema — it reads the JSON-LD before HTML. Google AI Overviews requires hasMerchantReturnPolicy and shippingDetails for merchant rich results. Perplexity uses the description field for context. All three prefer complete schema over partial.
How much does Product schema improve AI visibility?
Schema-compliant pages are cited 3.1x more frequently in Google AI Overviews (Google I/O 2026). Only 12% of Shopify merchants have comprehensive Product schema — implementing it puts you in the top tier immediately.
Should I use Product or ItemPage schema?
Use Product nested inside ItemPage for product detail pages. Product is the core entity — ItemPage signals that this is the primary item of the page, not a listing. For category/collection pages, use CollectionPage with ItemList.