Product Schema for AI Search — Shopify JSON-LD Implementation Guide
Only 12% of Shopify merchants have implemented comprehensive Product schema markup — the single most actionable step for AI discoverability (Metricus, 2026). Schema-compliant pages are cited 3.1x more frequently in Google AI Overviews. This guide covers exactly which fields ChatGPT Shopping, Perplexity, and AI Overviews extract — and how to implement them on Shopify.
Why AI needs Product schema, not just HTML
Schema is one of six signals on the AI-ready product page checklist. AI retrieval systems evaluate structured data before parsing HTML. When ChatGPT Shopping decides which products to recommend, it reads the JSON-LD first: name, price, availability, rating, brand. Without schema, the AI has to guess — parsing price from CSS-styled text, extracting availability from phrases like “in stock” or “sold out.” It’s slower, less reliable, and often skipped entirely.
Stay in the loop
Get news and updates about GEO, AI search and new features. Unsubscribe anytime.
Google explicitly recommends JSON-LD for structured data (Google Search Central). Schema-compliant product pages are the foundation of AI citation.
Required fields (2026 update)
Google raised the bar for e-commerce Product schema in 2026. Minimum required 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 — 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:
- 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 what separates a product that gets cited by ChatGPT Shopping from one that doesn’t. ChatGPT Shopping displays 3–8 products per query — merchants without complete schema are filtered out at the data layer. GPTBot and OAI-SearchBot don't execute JavaScript, so the schema must be server-rendered.
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 includes basic Product schema by default in most themes, but it’s often incomplete. Two approaches to fix this:
Option 1: Edit theme.liquid (recommended)
Add a custom Product schema snippet in sections/product-template.liquid or similar, after the existing structured data. Use Liquid variables to pull real product data:
<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. Choose one that supports the 2026 Google updates (merchant return policy, shipping details, GTIN).
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 live URL: Run tests on your actual product URL, not just the generated JSON, to catch rendering issues
What AI engines actually extract
From our analysis of ChatGPT Shopping, Perplexity, and Google AI Overviews citations:
- ChatGPT Shopping: prioritizes
name,brand,offers.price,aggregateRating,image - Perplexity: reads
descriptionheavily for context + all offer fields - Google AI Overviews: requires
hasMerchantReturnPolicyandshippingDetailsfor merchant rich results
Missing any of these fields means incomplete data in AI shopping results — your product may appear with “Price not available” or be filtered out entirely.
GEOlikeaPro’s AI Readiness audit checks your Product schema against all 2026 requirements 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.