What Schema Does an Ecommerce Website Need? (Product, Offer, Review, Explained)
The exact schema an ecommerce site needs in 2026: required Product and Offer fields, Review/AggregateRating rules, and the mistakes that suppress rich results.
Long Nguyen
Founder & Research Lead
The schema stack an ecommerce site actually needs
Most stores stop at Product and maybe AggregateRating, then wonder why rich results never show up. In 2026 that's not enough for two separate audiences: Google's Merchant listing pipeline, which wants a fuller product record than it did a few years ago, and AI shopping agents, which read your JSON-LD to decide whether they trust your catalog enough to recommend or check out from it. Five schema types cover almost every ecommerce page:
| Schema type | Where it lives | What it unlocks |
|---|---|---|
| Product | Product detail page | Product snippet / Merchant listing eligibility |
| Offer | Nested inside Product | Price, stock, and shipping shown in search |
| Review / AggregateRating | Nested inside Product | Star ratings under the listing |
| BreadcrumbList | Category and product pages | Breadcrumb trail in search results, clearer site hierarchy for crawlers |
| Organization | Homepage / about page | Brand identity, sameAs links, knowledge panel eligibility |
The sections below go field by field, in the order Google and AI agents actually check them.
Product schema: the fields that are actually required in 2026
The old advice — name, image, offers, done — still validates in the Rich Results Test, but a thin Product object is easy for a crawler or an agent to skip past when it's comparing your listing to five competitors that filled in every field. Treat the following as the real minimum, not the legal minimum:
| Property | Requirement |
|---|---|
| name | Exact product title, matches the visible H1 |
| description | Genuinely descriptive — thin one-liners under roughly 150 characters don't give Google or an agent enough to match intent |
| image | At least one absolute URL; multiple angles help agent-side comparison |
| brand | Nested Brand object with a name property, not a bare string |
| sku | Your internal identifier |
| gtin / mpn | Whichever applies — required for Merchant Center matching if you sell branded goods |
| category | Product taxonomy path (e.g. "Electronics > Audio > Headphones") |
| additional attributes | color, material, size, weight where relevant to the vertical — apparel and hardgoods stores lose eligibility for size-specific rich results without these |
Here's a trimmed example showing the required nesting:
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "Trail Runner Backpack 28L",
"description": "A 28-liter hiking backpack with a ventilated back panel, hydration sleeve, and rain cover, built for multi-day trail use.",
"image": [
"https://example.com/images/backpack-front.jpg",
"https://example.com/images/backpack-back.jpg"
],
"sku": "TRB-28-BLK",
"gtin13": "0123456789012",
"brand": {
"@type": "Brand",
"name": "TrailWorks"
},
"category": "Outdoor > Backpacks > Hiking Backpacks",
"color": "Black",
"material": "Ripstop nylon",
"offers": { "@type": "Offer" },
"aggregateRating": { "@type": "AggregateRating" }
}
A Product object missing offers won't qualify for a rich result at all, so that's next.
Offer schema: price, stock, and the return-policy field most stores skip
Offer is where most manual actions and suppressions actually happen, because it's the part most likely to drift out of sync with the live page. Google's Merchant listing requirements for the Offer object are stricter than a basic Product snippet:
| Property | Notes |
|---|---|
| price | Must match the visible price on the page exactly — this is the single most common cause of suppression |
| priceCurrency | ISO 4217 code (USD, VND, EUR) |
| availability | InStock, OutOfStock, PreOrder, BackOrder, Discontinued — must match real inventory, not a hardcoded default |
| priceValidUntil | Required for Merchant listings; keeps time-limited pricing honest |
| itemCondition | NewCondition, UsedCondition, RefurbishedCondition |
| url | Canonical URL of the product page |
| hasMerchantReturnPolicy | Nested MerchantReturnPolicy object — return window, fees, region. Frequently skipped, frequently the reason a listing doesn't qualify for full Merchant listing enhancements |
| shippingDetails | Nested OfferShippingDetails — delivery time and cost estimate |
If your platform auto-generates schema (Shopify, WooCommerce, a headless storefront), check that price and availability are pulled live from the same source the storefront renders from — a cached or scheduled schema export is the most common way stores end up with a price mismatch they don't know about until rich results silently disappear.
Review and AggregateRating: what still earns star ratings
Google tightened review snippet guidance again in July 2026, and the rules are worth reading closely because Product is one of the few entity types still eligible — LocalBusiness and Organization lost self-review eligibility back in 2019, and that restriction hasn't loosened.
- Nest, don't scrape. AggregateRating and Review should be nested inside the Product object, and the content must come from reviews actually visible on that page — pulling an average rating from a third-party platform and stuffing it into markup violates the guidelines.
- The name property is required on Review items — specify what's being reviewed via itemReviewed, not just the rating.
- Disclose incentives. Google's July 2026 documentation update explicitly bars fake or undisclosed incentivized reviews — a review written for a discount or free product is fine to publish, but only if that's clearly disclosed on the page and in the markup context.
- One rating, one item. AggregateRating on a category or collection page representing many different products is a common violation — it belongs on the individual product page.
- Keep it visible. If users can't see the rating and review count on the page itself, the structured data version won't be trusted either.
Get this section right and you're one of the few remaining rich result types where the payoff is direct: star ratings under an organic listing measurably move click-through rate.
Merchant listings vs. product snippets: which one your store needs
Google actually runs two overlapping product features, and conflating them is why some stores implement "full" schema and still don't see the enhancement they expected.
| Product snippet | Merchant listing | |
|---|---|---|
| Who it's for | Pages where the visitor can't buy directly (editorial reviews, comparison pages) | Pages where the visitor can purchase from you directly |
| Extra fields it rewards | Pros/cons, detailed review content | Sizing, shipping, return policy, condition |
| Google Merchant Center | Not required | Recommended — Merchant Center runs its own validation on top of the Rich Results Test, and catches feed-vs-markup mismatches the generic checker misses |
In practice, an actual storefront product page should implement the fuller Merchant listing property set — doing so also makes the page eligible for the product snippet enhancements, since the requirements overlap. If you run both a live storefront and a separate editorial review section, treat them as two different schema jobs rather than reusing one Product object across both.
Don't spend time on FAQPage schema anymore
If your ecommerce build plan still includes FAQPage markup for product FAQs, drop it. Google retired the FAQ rich result and its Search Console report in May 2026, and structured data that no longer feeds a Search feature has no visible effect — it's not penalized, but it's also not worth engineering time. Keep FAQ content on the page for genuinely answering buyer questions and for AI answer engines that read page content directly, just don't budget schema-implementation hours toward the FAQPage type itself.
Common mistakes that get rich results suppressed
| Mistake | Effect |
|---|---|
| price in markup doesn't match the visible price | Listing suppressed until corrected |
| availability hardcoded to InStock | Feed mismatch flagged in Merchant Center; can trigger a manual review |
| AggregateRating with no visible reviews on the page | Violates review guidelines; rich result withheld |
| Missing hasMerchantReturnPolicy / shippingDetails | Page doesn't qualify for full Merchant listing enhancements |
| One AggregateRating covering a whole category page | Guideline violation — ratings must map to a single item |
| brand as a plain string instead of a nested Brand object | Weaker entity matching for Merchant Center and AI agents |
Validate before you publish
Three checks catch nearly everything above before it costs you a rich result:
- Rich Results Test — run it on the live URL, not a staging copy, and check which enhancements the page actually qualifies for, not just whether the JSON-LD parses.
- Google Merchant Center diagnostics — if you have a product feed, this catches feed-vs-markup mismatches (GTIN, price, stock) the generic validator doesn't see.
- Search Console Enhancements report — the ongoing view once you're live; watch it after any theme, platform, or feed change, since that's when schema quietly breaks.
Ecommerce platforms increasingly need to satisfy a third reader too — the emerging layer of AI shopping agents and checkout protocols that read this same structured data to decide whether they can transact with your store at all, not just whether Google will show a star rating. That's a distinct implementation on top of everything above; if you're mapping out what agent-readiness actually requires, our SEO/AEO/GEO service covers the full stack from this schema baseline through agent-facing endpoints.