Product structured data for AI search
Short answer
Product structured data is code on a product page that states the product's name, image, price, currency and availability in the schema.org vocabulary, usually as JSON-LD. Google requires name, image and an offer with price and currency for merchant listings. Google says it is not required for AI search, but it keeps your product facts exact for every reader.
By Ronen Amit, Founder, SourceVision. Published .
On this page
- What is a product schema?
- Does AI use schema markup?
- Which product structured data properties does Google require?
- How do I check if my website has schema markup?
- How do you add product structured data on your platform?
- What are the best practices for schema markup?
- Frequently asked questions
- Related guides
- Sources
Step 3 of 8 in How to optimize your online store for AI search
Product structured data is the part of a product page written for machines. It states, in a fixed vocabulary, what the product is, what it costs and whether it is in stock. This guide shows what to include, how to check what your store outputs today and how to fix it, on Shopify, WooCommerce, BigCommerce, Wix, Squarespace, Magento or a custom build.
What is a product schema?
A product schema is structured data that describes a product using the schema.org Product type: name, images, brand, identifiers and an Offer with price, currency and availability. It usually sits in the page as a JSON-LD script, so search engines read the facts without parsing your layout.
Schema.org defines Product as any offered product or service. On a store, the markup lives in the HTML of each product page, out of sight. A shopper sees your price on the page. A machine reads the same price from the markup.
There are three related types to know:
- Product. One item, with its name, image, description, brand and identifiers such as GTIN, MPN and SKU.
- Offer. The terms of sale for that item: price, currency, availability, condition, shipping and returns.
- ProductGroup. A parent for products that come in variants, such as sizes or colors.
Does AI use schema markup?
Google says structured data is not required for its generative AI search and no special markup is needed, but recommends keeping it. Microsoft’s Bing team advises using schema for AI search answers such as Copilot. OpenAI’s merchant and feed documents do not mention schema.org markup, and Perplexity has not said.
Here is what the makers say, and where they say nothing:
- Google. Its AI optimization guide says structured data isn’t required for generative AI search, and calls it a good idea to keep using it for rich result eligibility.
- OpenAI. Its merchant page says ChatGPT crawls merchant sites and that a product feed gives you more control. Neither that page nor the feed specification says ChatGPT reads JSON-LD. Our guide to ChatGPT shopping covers the feed route.
- Microsoft. A Bing product manager’s post on AI search answers says schema helps search engines and AI systems understand your content, and lists using schema among its steps for Copilot and other answers built on Bing.
- Perplexity, Gemini app. We found no first-party statement either way.
So why bother? Because the same facts feed every channel that does document what it reads. Google’s merchant listings read the markup. OpenAI’s feed asks for the same facts in its own fields: brand, GTIN, MPN, price, availability, shipping and returns. Markup that is complete and correct is the cleanest single statement of those facts on your own site.
The same facts, by name, in schema.org markup and in OpenAI’s product feed:
| Fact | schema.org property | OpenAI feed field |
|---|---|---|
| Brand | brand | brand |
| Barcode | gtin | gtin |
| Part number | mpn | mpn |
| Price | offers.price | price, sale_price |
| Stock | offers.availability | availability |
| Shipping | offers.shippingDetails | shipping, shipping_price |
| Returns | hasMerchantReturnPolicy | accepts_returns, return_deadline_in_days, return_policy |
| Variants | ProductGroup | group_id |
| Ratings | aggregateRating | star_rating, review_count |
If you fill one, fill the other from the same source of truth, so every reader sees one price and one return window.
Which product structured data properties does Google require?
For merchant listings, Google requires a Product with name, image and offers, and an Offer with price and priceCurrency, with a price above zero. For product snippets, Google requires name plus one of review, aggregateRating or offers. Everything else, including brand, GTIN, shipping and returns, is recommended.
Google documents two product features with different rules. Merchant listings are for pages where a shopper can buy. Product snippets also cover review pages. Write for merchant listings and you meet both.
Step through what each type needs:
Product structured data: required and recommended properties
-
1 Product: required
name, image and offers. For merchant listings, offers must be an Offer, not an AggregateOffer.
-
2 Offer: required
price and priceCurrency. The price must be greater than zero for merchant listings. Use a three-letter currency code such as USD.
-
3 Product: recommended
brand, gtin (or gtin8, gtin12, gtin13, gtin14), mpn, sku, description, color, size, material, pattern, category, audience, aggregateRating, review, isVariantOf, inProductGroupWithID and more.
-
4 Offer: recommended
availability, itemCondition, shippingDetails, hasMerchantReturnPolicy, priceValidUntil, url, validFrom and validThrough.
-
5 ProductGroup: for variants
name is required. Recommended: hasVariant, variesBy, productGroupID, brand, description, url, aggregateRating and review.
Step 1 of 5
The recommended lists are far longer than the required ones:
Required and recommended properties in Google's product documentation
- Required
- Recommended
Source: Google Search Central, merchant listing and product variant structured data
Show data
| Type | Required (undefined) | Recommended (undefined) |
|---|---|---|
| Product | 3 | 18 |
| Offer | 2 | 8 |
| ProductGroup | 1 | 10 |
Two recommended areas deserve your attention first:
- Variants. Google’s variant guide groups variants with ProductGroup, using variesBy, hasVariant and productGroupID.
- Shipping and returns. Google recommends a store-wide policy declared once under Organization, using hasShippingService for shipping and hasMerchantReturnPolicy for returns. Use the Offer-level properties only where a product differs.
How do I check if my website has schema markup?
Open a product page in Google’s Rich Results Test. It reads JSON-LD, RDFa and Microdata, lists the items it found and flags errors and warnings. Compare the price, currency and availability it reports with what the page shows. You can also use our free structured data checker, on any platform.
Test your main product template, not your home page. Then test one product with variants and one that is out of stock, because those are where markup most often goes wrong.
Check one of your product pages here:
For a second view, run the same URL through the Schema Markup Validator. Google’s Rich Results Test is the one that tells you whether Google can use the markup for its product features.
What to look for in the results:
- One Product, not two. Two Product items usually mean your theme and an app both output markup.
- No invalid items. Errors make an item invalid. Items with warnings are still valid, and warnings often point to recommended properties you left out.
- The same facts as the page. Price, currency, availability and images should match what a shopper sees.
How do you add product structured data on your platform?
Most hosted platforms output product markup for you, so the job is to check it and fill gaps. Shopify themes can print it with the structured_data filter, Wix and Squarespace add it to product pages automatically, and on a custom site you add a JSON-LD script to the product template.
What each platform’s own documentation confirms:
- Shopify. The Liquid structured_data filter converts a product into schema.org data: a Product if it has no variants, a ProductGroup if it has variants. Shopify’s Dawn theme prints it in its main product section. If your theme is older or custom, look for the filter in the product template, and test before and after any theme change.
- WooCommerce. WooCommerce’s code reference documents a structured data class that generates Product, Review and BreadcrumbList data. SEO plugins can add their own, so test for duplicates.
- BigCommerce. We could not find BigCommerce documentation that states what its themes output. Test a product page and fill gaps in your theme’s product template.
- Wix. Wix says Wix Stores product pages come with preset markup, which you can customize in SEO Settings. Wix accepts JSON-LD only, under 7,000 characters per markup, and its Customer Care cannot help with markup changes.
- Squarespace. Squarespace automatically generates Product structured data, among schemas you cannot edit or remove. Fix the facts on the product page itself, and the markup follows.
- Magento, Adobe Commerce or a custom site. We found no official Magento page on product markup. Add a JSON-LD script to your product template, filled from your product data.
Here is a complete example for a made-up product, with an Offer, shipping and returns. Replace every value with your own:
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Example Stoneware Mug, 12 oz",
"image": ["https://www.example.com/images/mug-1x1.jpg", "https://www.example.com/images/mug-4x3.jpg", "https://www.example.com/images/mug-16x9.jpg"],
"description": "A 12 oz stoneware mug, dishwasher safe, made in small batches.",
"sku": "MUG-12-BLUE",
"gtin13": "0000000000000",
"brand": { "@type": "Brand", "name": "Example Brand" },
"color": "Blue",
"material": "Stoneware",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/products/stoneware-mug",
"price": 24.00,
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition",
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": 5.00, "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": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
}
}
}
The GTIN here is a placeholder. Use your real GTIN, or leave the field out if the product has none. If your shipping and return terms are the same for every product, declare them once under Organization instead, as Google recommends, and drop them from the Offer.
Done when: your product template outputs one valid Product with no errors in the Rich Results Test, the price, currency and availability match the page, products with variants use ProductGroup, and your shipping and return policies are declared once for the store or per product.
We built SourceVision to measure how ChatGPT, Gemini and Perplexity describe your products, and to draft what each product page is missing from facts you confirm. Where we add a FAQ to a product page, we add FAQPage markup where the FAQ renders, never a second Product entry, and nothing is written without your approval. SourceVision is in an invite-only beta.
What are the best practices for schema markup?
Mark up only what the page shows, keep the markup identical to the page and your feeds, always state the currency, group variants with ProductGroup, and mark up reviews only when shoppers can see them. Google’s documentation names each of these, and breaking them can cost you eligibility.
The mistakes Google’s documentation warns about:
- Price or availability that differs from the page. Google’s general guidelines say not to mark up content that is not visible to readers. Merchant Center’s help says prices in the HTML need to match exactly the prices uploaded to Merchant Center.
- Missing currency. priceCurrency is required for merchant listings, and Google says it is best to always provide it, even for product snippets.
- Variants without ProductGroup. Google asks for ProductGroup to help it understand which products are variations of the same parent.
- Review markup the page does not show. Google’s review guidelines say it must be immediately obvious that the page has review content.
- Stale offers. A product snippet may not display if priceValidUntil is in the past.
A structured data issue can lead to a manual action. Google says that means the page loses eligibility for rich results, but it does not affect how the page ranks in Google web search.
Recheck your markup after every theme, app or platform change, and once a month as part of step 8 of the AI search guide.
Frequently asked questions
Is FAQ schema still relevant?
Not for Google rich results. Google says the FAQ rich result no longer appears in Google Search from May 7, 2026, and it removed the documentation in June 2026. FAQPage is still a valid schema.org type, so you can keep markup that matches a visible FAQ, but do not add it expecting a Google search feature.
What is the difference between JSON and JSON-LD?
JSON is a general data format. JSON-LD is JSON written to describe linked data, with fields such as @context and @type that point to a vocabulary like schema.org. Product structured data is usually JSON-LD placed in a script tag on the page, and Google's Rich Results Test reads it alongside RDFa and Microdata.
What is a structured data testing tool?
It is a tool that reads the structured data on a page and reports what it found and what is wrong. Google's Rich Results Test checks whether a page's markup qualifies for Google rich results and shows errors and warnings. Google now redirects its old Structured Data Testing Tool to a page that helps you pick between the Rich Results Test and the Schema Markup Validator.
What is product structured data?
It is machine-readable markup on a product page that describes the product in the schema.org vocabulary: its name, images, brand, identifiers such as GTIN, and an offer with price, currency and availability. Search engines and other systems can read these facts without parsing the page's layout.
What is a structured data validator?
A validator checks that your markup is well formed and uses the vocabulary correctly. Google's Rich Results Test validates against Google's own feature requirements, and the Schema Markup Validator at validator.schema.org is a second, general check. Run both on one product page after any theme or app change.
Related guides
A monthly AI search checklist for stores
An AI search optimization checklist to repeat monthly: recheck crawlers, llms.txt, markup, policies, product answers, feeds and how often you are named.
Answer shoppers' questions on product pages
How to find the questions shoppers ask about each product, answer them in plain sentences on the page, and keep answers matched to your feed and markup.
AI crawlers: which to allow on your store
Which AI crawlers exist, which ones decide whether your products can appear in AI answers, which train models, and how robots.txt applies to each.
Sources
- Merchant listing structured data, Google Search Central, accessed .
- Product snippet structured data, Google Search Central, accessed .
- Product variant structured data, Google Search Central, accessed .
- Shipping policy structured data, Google Search Central, accessed .
- Merchant return policy structured data, Google Search Central, accessed .
- General structured data guidelines, Google Search Central, accessed .
- Review snippet structured data, Google Search Central, accessed .
- How to fix: Mismatched product price, Google Merchant Center Help, accessed .
- Guide to optimizing for generative AI features on Google Search, Google Search Central, accessed .
- Latest Google Search documentation updates, Google Search Central, accessed .
- Rich Results Test, Google Search Console Help, accessed .
- Schema Markup Validator, schema.org, accessed .
- Product, schema.org, accessed .
- Products (product feed specification), OpenAI, accessed .
- Power product discovery in ChatGPT, OpenAI, accessed .
- Optimizing your content for inclusion in AI search answers, Microsoft Advertising Blog, accessed .
- structured_data (Liquid filter), Shopify.dev, accessed .
- Dawn theme: main-product.liquid, Shopify (GitHub), accessed .
- WC_Structured_Data class reference, WooCommerce, accessed .
- Adding structured data markup to your site's pages, Wix Help Center, accessed .
- How does Squarespace optimize my site for search results?, Squarespace Help Center, accessed .