Structured Data for Ecommerce: Product Schema, Offers, Reviews and FAQ Schema
How we approach product schema in 2026: what Google and AI engines actually read from your markup, copy-ready JSON-LD for single and variant products, and how to keep it in step with your feed.
The short answer
Product schema is structured data, usually JSON-LD written with the schema.org vocabulary, that states a product page's facts in a form machines read without guessing: name, brand, GTIN, attributes, price, stock, shipping, returns, ratings. Google uses it for merchant listings and product snippets. Merchant Center checks feed data against it, and AI systems use it to confirm what you actually sell.
Product schema in 30 seconds
Product schema tells search engines and AI systems what you sell, what it costs and what it's made of. It earns its keep only when it agrees with the page and the feed.
- 01
Product schema is JSON-LD that states a product's facts outright (brand, GTIN, price, stock, shipping, returns, ratings, variants) so crawlers don't infer them from your layout.
- 02
Google uses it for two rich result types: merchant listings on pages where people buy, and product snippets on pages that review or compare products.
- 03
Treat schema as a promise about your product. It pays off only when it matches the visible page and your Merchant Center feed, field for field.
- 04
FAQ rich results disappeared from Google Search on May 7, 2026. Keep the FAQ content anyway, because shoppers now put those exact questions to AI assistants.
- 05
No special markup gets you into AI Overviews or ChatGPT. Complete product data that says the same thing everywhere does.
Why schema markup for ecommerce matters for rich results and AI search
Schema makes product pages eligible for merchant listings and product snippets. It also feeds Merchant Center's automatic price and stock updates, and it hands AI systems facts they can check instead of guess.
of web pages use JSON-LD structured data, up from 34% in 2022
JSON-LD is the format Google recommendsSource: HTTP Archive Web Almanac 2024of pages carry Product markup in JSON-LD
Complete product markup is still a differentiatorSource: HTTP Archive Web Almanac 2024more clicks on average for retailers who added correct GTINs to their product data
One identifier, measurable liftSource: Google Merchant Center Helphigher conversion for AI-referred visitors to US retail sites than non-AI traffic in July 2026
AI shoppers arrive ready to buySource: Adobe Digital Insightsyear-over-year growth in the share of AI-driven visits to US retail sites, July 2026
More shoppers meet your data through a machineSource: Adobe Digital Insightsthe date FAQ rich results stopped appearing in Google Search for all sites
Rich results change, data quality staysSource: Search Engine JournalWhat schema markup for ecommerce actually does
A crawler on a product page sees a price, a crossed-out price and a size selector. It has to work out which number is the price, whether M is in stock and which GTIN belongs to the navy variant.
Structured data removes the guesswork. In schema.org vocabulary it states that the page offers one Product with a gtin13, brand, color and material, plus an Offer at 89.00 USD, in stock, returnable within 30 days.
Markup makes a feature possible, nothing more. As Google's structured data guidelines put it, "Google does not guarantee that your structured data will show up in search results", and "your structured data must be a true representation of the page content."
Teams debate extra schema types while their Product block sits half empty. A theme-generated Product with no material and an internal SKU in the gtin field does less for you than a short, accurate one.
Does schema help AI search?
Indirectly, and less than many vendors imply. Google's guidance on AI features in Search says there are "no additional requirements to appear in AI Overviews or AI Mode" and "no special schema.org structured data that you need to add." It does list "making sure your structured data matches the visible text on the page" as a best practice. On the Bing side, Search Engine Land reported in March 2025 that Fabrice Canel confirmed at SMX Munich that schema markup helps Microsoft's LLMs understand content.
Schema won't get a product recommended on its own. It makes the facts an agent checks (price, stock, identifiers, attributes, ratings) unambiguous, and identical on every surface the agent looks at. That's the thinking behind Agentic Commerce Optimization. Search engines read the same product data AI agents do. The content side lives in GEO for ecommerce.
What schema should a product page have?
One Product per page (or a ProductGroup when you sell variants) with a nested Offer. Add AggregateRating and Review only when real reviews are visible. Shipping and return policies go on Organization, and a BreadcrumbList covers the category path.
The schema types a product page needs
| Schema type | Where it goes | Status for a buyable product | What it powers |
|---|---|---|---|
Product | Product detail page | Required: name, image, offers | Merchant listings, product snippets, Shopping understanding |
Offer | Nested in Product.offers | Required: price above zero, priceCurrency | Price, availability, sale price and strikethrough display |
AggregateRating and Review | Nested in Product | Recommended, only if visible on the page | Star ratings and review counts |
ProductGroup | Parent of variant products | Recommended for sizes, colors, materials | Variant grouping in merchant listings |
OfferShippingDetails | Organization or Offer | Recommended | Shipping cost and delivery time in results |
MerchantReturnPolicy | Organization or Offer | Recommended | Return window and fees in results |
BreadcrumbList | Every product and category page | Recommended | Category path shown instead of the raw URL |
Product and Offer: the required core
The required list is short. Google's merchant listing documentation asks for name, image and offers on the Product, plus price (above zero) and priceCurrency (ISO 4217) on a single Offer.
Most themes stop there. The recommended list is where catalogs differ: brand.name, description, color, material, pattern, size, sku, mpn, a GTIN (gtin8 to gtin14), and on the offer availability, itemCondition and url. Shoppers filter on them; agents match against them. An empty material field costs more than a missing star rating.
Two details catch European stores. price takes a dot as decimal separator and no currency symbol, so "89.00" is valid and "89,00 €" isn't. And GTINs that pass through Excel lose their leading zero, turning a 12 digit UPC into an 11 digit string that fails the check digit. If a product has no GTIN at all, leave the field out and send mpn with brand, as our guide to GTINs and what to do without them explains.
AggregateRating and Review: the aggregate rating schema rules
Google's review snippet rules require ratingValue and at least one of ratingCount or reviewCount on AggregateRating, and an author plus reviewRating.ratingValue on each Review. Stores that lose their stars usually broke one of these:
- The rating and count must be visible on the page.
- Never aggregate ratings from other websites.
- Rate one specific item, never a category or list, so category pages carry no aggregate rating.
- Keep the markup count in step with the widget shoppers see.
Shipping and returns follow a different logic. Google recommends defining hasMerchantReturnPolicy and shippingDetails under your Organization, with offer-level versions only as overrides. Check the precedence order before debugging: return settings in Merchant Center or Search Console override your markup.
Product page schema checklist
- One primary Product per page
The main entity is the product you sell, and
namematches the H1 - No duplicate Product blocks
Theme and review app both output it, so keep one
- Real GTIN or MPN with brand
Most specific GTIN type, valid check digit, omitted if none is assigned
- Price matches the page
Same value and currency, dot decimal, no symbol inside
price - Attributes are filled
color,material,size,patternandaudiencewherever they apply - Ratings only when visible
AggregateRatingshows the same score and count as the page - JSON-LD in the initial HTML
Server-rendered, so Shopping crawls read it reliably
For the copy and UX on that same page, read Product Page Optimization. Once the markup is clean, run the full product page checklist for AI readiness.
Merchant listings vs product snippets
Merchant listings are the rich results for pages where people can buy, and they can show price and stock along with shipping and return terms. Product snippets cover pages that review or compare products, so they lean on ratings. Target merchant listings and you're eligible for snippets too.
Which rich results your products qualify for
| Merchant listings | Product snippets | |
|---|---|---|
| Page type | Pages where customers can buy from you | Pages that review, compare or list products without direct purchase |
| Required markup | Product with name, image and an Offer with price and priceCurrency | Product with name plus one of review, aggregateRating or offers |
| Offer type | Single Offer, price above zero | Offer or AggregateOffer (lowPrice, highPrice, offerCount) |
| Extra details | Shipping, returns, apparel sizing, variants, member prices, strikethrough prices | Pros and cons via positiveNotes and negativeNotes, on editorial reviews only |
| Search Console report | Merchant listings | Product snippets |
Google's product structured data overview spells out the overlap. Add the required properties for merchant listings and your product pages are also eligible for product snippets. We rarely see a reason for a store to target snippets alone.
Feeds, markup or both
Google takes product data from markup, a Merchant Center feed, or both, and says sending both maximizes eligibility and helps it verify your data.
If you already run a feed, markup is cheap insurance. With markup alone, you can't run Shopping ads. The feed side is covered in Google Merchant Center.
Product schema example: complete JSON-LD for a product page
Two copy-ready JSON-LD templates: a single buyable product, and a variant product built on ProductGroup. Put them in a <script type="application/ld+json"> tag in the server-rendered HTML, with values that match the page.
Product schema example: single product JSON-LD
An illustrative example for a fictional merino sweater sold in the US.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Northvale Merino Crew Neck Sweater, Navy",
"description": "Midweight crew neck sweater knitted from 100% extra-fine merino wool. Regular fit, ribbed cuffs and hem, machine washable on wool cycle.",
"image": [
"https://www.example.com/img/merino-crew-navy-1x1.jpg",
"https://www.example.com/img/merino-crew-navy-4x3.jpg"
],
"sku": "NV-MCS-NAV-M",
"gtin13": "5901234123457",
"brand": {
"@type": "Brand",
"name": "Northvale"
},
"color": "Navy",
"material": "Merino wool",
"size": "M",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.7,
"reviewCount": 212
},
"offers": {
"@type": "Offer",
"url": "https://www.example.com/products/merino-crew-navy?size=m",
"price": 89,
"priceCurrency": "USD",
"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": 3,
"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 offer url preselects size M, so the markup describes exactly what a shopper lands on. Shipping and returns sit inside the offer only to keep the example self-contained; on a real store we'd define them once on Organization.
Product structured data for variants: ProductGroup JSON-LD
Google has supported product variant markup since 2024. The ProductGroup holds the shared facts plus a productGroupID (the parent SKU). variesBy lists the attributes that change, and each variant is a full Product under hasVariant. Google accepts six variesBy values: color, size, material, pattern, suggestedAge, suggestedGender.
{
"@context": "https://schema.org",
"@type": "ProductGroup",
"name": "Northvale Merino Crew Neck Sweater",
"url": "https://www.example.com/products/merino-crew",
"brand": {
"@type": "Brand",
"name": "Northvale"
},
"productGroupID": "NV-MCS",
"variesBy": [
"https://schema.org/size",
"https://schema.org/color"
],
"hasVariant": [
{
"@type": "Product",
"sku": "NV-MCS-NAV-M",
"gtin13": "5901234123457",
"name": "Northvale Merino Crew Neck Sweater, Navy, M",
"image": "https://www.example.com/img/merino-crew-navy.jpg",
"color": "Navy",
"size": "M",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/products/merino-crew?color=navy&size=m",
"price": 89,
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
},
{
"@type": "Product",
"sku": "NV-MCS-OAT-L",
"name": "Northvale Merino Crew Neck Sweater, Oatmeal, L",
"image": "https://www.example.com/img/merino-crew-oatmeal.jpg",
"color": "Oatmeal",
"size": "L",
"offers": {
"@type": "Offer",
"url": "https://www.example.com/products/merino-crew?color=oatmeal&size=l",
"price": 89,
"priceCurrency": "USD",
"availability": "https://schema.org/OutOfStock"
}
}
]
}This is the template we find broken most often. The theme outputs one Product with a single Offer for the whole family, so every size shares one price, and the GTIN belongs to whichever variant loaded first.
Single-page or multi-page variants
Single-page variants
Variants share one URL, selected with query parameters. The ProductGroup gets one canonical url, each variant a preselectable URL like ?color=navy&size=m.
Multi-page variants
Each variant has its own page, carrying a complete ProductGroup that lists siblings by url only and omits the group-level url.
Variants can also point back to the group with isVariantOf or inProductGroupWithID. Either way, mirror the grouping in your feed with item_group_id. We use the same value as productGroupID.
FAQ schema on product pages: still worth it in 2026?
For Google rich results, no. FAQ rich results stopped appearing in Google Search on May 7, 2026, after being limited to government and health sites since 2023. The content still matters, because product FAQs answer the narrow questions shoppers put to AI assistants.
What changed for FAQ schema
| Date | Change |
|---|---|
| August 2023 | Google limited FAQ rich results to well-known, authoritative government and health websites |
| May 7, 2026 | FAQ rich results stopped appearing in Google Search for all sites |
| June 2026 | FAQ search appearance, rich result report and Rich Results Test support removed |
| August 2026 | FAQ data removed from the Search Console API |
Search Engine Journal, quoting Google's notice, reports that existing FAQ markup can stay without causing problems. It just won't show anything in Google Search.
Many teams took this as a cue to delete product FAQs. We think that's a mistake, and our article on FAQ schema for product pages explains why.
Why FAQ content still helps AI answers
Assistants get narrow questions. "Can this sweater go in the washing machine?" "Does it run small?" A page that answers them in visible text gives the assistant a sentence to quote.
Google's AI features guidance favors text content and crawlable pages over special markup. OpenAI's product feed reference says question-and-answer lists "are not part of this discovery contract", so your FAQs have to live on the page, where crawlers and agents can read them.
What good product FAQs cover
- Fit and sizing: how it fits, model measurements, size advice
- Care and materials: washing instructions, composition, durability
- Compatibility: which devices, refills or accessories it works with
- Use cases: who it is for and when to use it
The best questions usually sit in customer service tickets. In FAQPage markup, each Question sits in mainEntity with an acceptedAnswer of type Answer.
Validation, common errors and schema vs feed consistency
Validate each template in the Rich Results Test, then check live pages with URL Inspection. Then watch the Search Console and Merchant Center reports. Most errors go away once page and schema come from the same record as the feed.
How to validate product structured data
- 1
Test the template
Run a URL or code snippet through the Rich Results Test. Fix errors first, then look at warnings for GTIN, brand or shipping.
- 2
Inspect the rendered page
Use URL Inspection and read the tested HTML. Google advises Product markup in the initial HTML, since JavaScript-generated markup can make Shopping crawls less frequent and reliable.
- 3
Monitor the reports
Watch the Merchant listings and Product snippets reports for items falling out of the valid count.
- 4
Cross-check Merchant Center
Issues such as "Mismatched value (page crawl) [price]" show exactly where feed and page disagree.
- 5
Re-test after every release
Theme updates and new apps often duplicate or break JSON-LD.
Don't treat every warning as urgent. An optional priceValidUntil can wait. A missing GTIN on an advertised product can't.
Common product schema errors and how to fix them
| Error | Typical cause | Fix |
|---|---|---|
| Missing field "offers" | Out-of-stock template drops the Offer | Keep it and set availability to OutOfStock |
| Price mismatch with the page | Sale price shown, regular price in markup | Generate markup from the same price source as the template |
| Invalid GTIN | Internal SKU entered as gtin | Use the real GTIN, or omit it and send mpn with brand |
| Rating not visible | Reviews load only on click | Show score and count on load, or drop aggregateRating |
| Wrong variant data | One Offer for all sizes | One Product and Offer per variant in a ProductGroup |
| Duplicate Product items | Theme and review app both output JSON-LD | Keep one source and merge the rating into it |
Schema vs feed consistency: one product, one truth
Google reads your product facts on the page, in the JSON-LD and in the Merchant Center feed. With automatic item updates switched on (it's the default), Google uses landing page data, structured data included, to correct price and availability in Shopping ads and free listings. If the feed says $4 and the page says $3, Google uses $3. Too many mismatches can mean disapprovals or switch the automation off.
AI agents add more readers. ChatGPT reads merchant feeds built on OpenAI's product feed spec (title, description, gtin, brand, price, availability) and sends shoppers to the product url. Every disagreement erodes trust.
Single source
Where does each fact live?
One record in your PIM, ERP or platform
Generate
How are schema and feed produced?
From the same fields, never by hand
Sync
When do they update?
Price and stock changes push everywhere at once
Monitor
How do you catch drift?
Search Console and Merchant Center diagnostics, weekly
Run it on every change and the three sources never drift apart.
For crawling and indexing, see Ecommerce SEO. Feed hygiene has its own guide in Product Feed Optimization.
Product structured data with AndromedAI
AndromedAI fixes the product data underneath your schema and feed, the same data AI agents read, and publishes one record to your store and Merchant Center.
Where structured data quality really comes from
Themes write JSON-LD automatically. They can't write data that doesn't exist. If material is blank in your catalog, it's blank in your schema, in your feed and in every AI answer that mentions you.
That's the layer we work on, SKU by SKU.
title
BeforeMerino Crew Navy
AfterNorthvale Merino Crew Neck Sweater, Navy, 100% Extra-Fine Merino
description
BeforeA cozy knit for cold days.
AfterMidweight crew neck in 100% extra-fine merino wool. Regular fit, ribbed cuffs, machine washable on the wool cycle.
color
Beforenot set
AfterNavy
material
Beforenot set
After100% extra-fine merino wool
size
BeforeM
AfterM (regular fit, runs true to size)
faq
Beforenot set
AfterCan it go in the washing machine? Yes, on the wool cycle.
Fix the record and your theme outputs the right-hand version into JSON-LD, template untouched.
How the platform maps to the work
| Step | AndromedAI | What it does for structured data |
|---|---|---|
| Audit | AI Readiness Audit | Scores pages on Product Data Completeness, Keyword Coverage, Customer Intent Match and Shopping Metadata |
| Complete and enrich | Optimizer | Extracts attributes such as color, material, size; rewrites titles, descriptions, bullets, FAQ; adds use cases and intents |
| Create missing pages | Creator | Builds complete product pages from brand or supplier data in 12 languages |
| Cover category demand | Category page optimizer | Builds category pages around real demand |
| Publish everywhere | Integrations | Shopify (native app), Google Merchant Center, Salesforce Commerce Cloud, Adobe Commerce, Shopware, Akeneo, Plytix, WooCommerce: the same record behind the page and its schema, plus the feed |
The Brand Kit (tone of voice, rules, examples, glossary, banned words) keeps content on brand. Approval workflows decide what goes live, with auto-approval above an AI Checker score of 4.0. AndromedAI also generates Merchant Center conversational attributes. More than 500 catalogs have been optimized on the platform.
clicks from AI chats
Bomboogieto first sales from ChatGPT, with catalog generation costs down 95%
Matassaorganic traffic and +46.9% sales, 483 hours saved
Semprefarmaciaadd-to-cart in two months
Altaforma MilanoROAS, with CPC down 6% and Quality Score 10/10
InstalFAQ
One Product with name, image, brand, a GTIN or MPN and the attributes that apply, plus a nested Offer with price, currency and availability. Add AggregateRating and Review only when visible on the page, define shipping and returns, include a BreadcrumbList, and use ProductGroup for variants.
The smallest valid version is an application/ld+json script tag holding a Product with a name, an image and an Offer with price and priceCurrency. A complete one adds identifiers, attributes, availability, shippingDetails, hasMerchantReturnPolicy and aggregateRating, as in the templates on this page.
Indirectly. Google says AI Overviews and AI Mode need no special schema, though structured data should match the visible page. Microsoft has said schema helps its LLMs understand content. Schema makes price, stock and identifiers unambiguous, which helps AI systems verify a product when page, markup and feed agree.
Merchant listings are for pages where shoppers can buy, and they can show price and availability along with shipping and returns. Product snippets are for pages that review or compare products, and they focus on ratings. Marking up a store page for merchant listings also makes it eligible for product snippets.
FAQ rich results stopped appearing in Google Search on May 7, 2026, so the markup no longer produces a visible Google feature. Existing markup can stay. Visible FAQ content is still worth writing, because it answers what shoppers ask AI assistants about fit, care and use.
Google reads both. Automatic item updates use landing page data, structured data included, to correct feed prices and availability, and frequent mismatches can lead to disapprovals. AI agents such as ChatGPT also read merchant feeds and send shoppers to the product page, so a price or stock value that differs between the two undermines trust in your listing.
Glossary
- JSON-LD
- The structured data format Google recommends, placed in a script tag separate from the visible HTML and written with the schema.org vocabulary.
- Product schema
- The schema.org Product type and its properties, used to describe a product's identity, offers and ratings.
- AggregateRating
- The schema.org type that summarizes all ratings for an item with an average value and a rating or review count.
- ProductGroup
- The schema.org type that groups the variants of one parent product, using productGroupID, variesBy and hasVariant.
- Merchant listings
- Google rich results for pages where shoppers buy a product, showing price, stock, shipping and returns.
- Product snippets
- Google rich results for product review or comparison pages, highlighting ratings and reviews.
- GTIN
- Global Trade Item Number, the 8, 12, 13 or 14 digit GS1 identifier that lets systems match the same product across sites.
- Automatic item updates
- A Merchant Center feature that uses landing page data and structured data to correct price, availability and condition.
Keep reading
What changed in rich results and why product FAQs still feed AI answers
GuideGTINs Explained: When You Need Them and What to Do WithoutThe identifier behind every gtin field in your markup and feed
GuideProduct Page Checklist for AI ReadinessCheck every PDP field your schema should describe
GuideProduct Page Optimization: The Complete Guide to PDPs That Rank, Convert and Get Recommended by AIThe page your schema describes, from copy to UX
Sources (17)
- Google Search Central: Introduction to Product structured data
- Google Search Central: Merchant listing (Product, Offer) structured data
- Google Search Central: Product snippet structured data
- Google Search Central: Product variant structured data (ProductGroup, Product)
- Google Search Central: Review snippet structured data
- Google Search Central: General structured data guidelines
- Google Search Central: Merchant return policy structured data
- Google Search Central: AI features and your website
- Google Search Central Blog: Changes to HowTo and FAQ rich results (August 2023)
- Google Merchant Center Help: Allow Merchant Center to update product information automatically
- Google Merchant Center Help: Provide your most accurate product data (GTIN)
- OpenAI Commerce: Product feed reference
- Schema.org: Product
- HTTP Archive Web Almanac 2024: Structured Data
- Adobe Digital Insights: AI Traffic Trends Report, August 2026
- Search Engine Journal: Google drops FAQ rich results
- Search Engine Land: Microsoft Bing and Copilot use schema for its LLMs
Parlano di noi








