Product Schema: Snippets vs Merchant Listings
Product schema is structured data that describes a product on its own page: name, images, price, availability, identifiers and ratings. Google splits it into two uses with different rules: product snippets, for pages where people can’t buy the product (such as reviews), and merchant listings, for pages where a shopper can buy it from you. Which one applies decides which properties are required.
This guide is for ecommerce owners, marketers and developers who want product markup that matches Google’s current documentation rather than a template from years ago. It covers the snippet versus merchant listing split, required and recommended properties, Offer and pricing rules, ratings, and where shipping and returns now belong.
On this page
- What is product schema?
- Product snippets vs merchant listings: which applies to your page?
- Required and recommended properties
- Offer and AggregateOffer: getting price right
- Ratings and reviews on product pages
- Shipping and returns belong on your Organization
- Does product schema matter for AI shopping answers?
- Getting product schema right across a catalog
What is product schema?
Product schema is markup based on the schema.org Product type, which schema.org defines as “any offered product or service”. Its usage figure, based on Google’s web index, is more than 10 million domains. On a product page, it states the facts a shopper cares about in a form Google can read without guessing.
Google’s introduction to product structured data lists where that data can appear: product snippets in text results, popular products, the shopping knowledge panel and Google Images. Enhancements such as ratings, pros and cons, shipping costs, availability, returns and price drops are shown “at the discretion of each experience”, and Google computes price drops itself from observed price changes.
Two rules apply to every product page, whichever feature you target:
- One product per page. Google says product rich results “only support pages that focus on a single product (or multiple variants of the same product)”. A category page with 40 products isn’t eligible.
- One currency per URL. If you sell in US and Canadian dollars, Google asks for a distinct URL per currency.
Product snippets vs merchant listings: which applies to your page?
The deciding question is simple: can a shopper buy this product from you on this page? If yes, follow the merchant listing rules. If no, as on a review or comparison article, follow the product snippet rules. The diagram below shows the split.
Scroll the diagram sideways to see all of it.
Google’s merchant listing documentation is explicit that “only pages where a shopper can purchase a product are eligible”, not pages linking to other sites that sell it, and that Google “may attempt to verify merchant listing product data before showing the information”. Affiliate and review sites therefore belong on the product snippet side.
Required and recommended properties
The table lists what Google requires and recommends for each feature, from the two documentation pages. “Rec.” means recommended.
| Property | Product snippets | Merchant listings |
|---|---|---|
name | Required | Required |
image | Not listed | Required |
offers | One of offers, review or aggregateRating required | Required (Offer only) |
offers.price | Required in the Offer | Required, must be above 0 |
offers.priceCurrency | Rec. | Required |
offers.availability | Rec. | Rec. |
review / aggregateRating | One of the three required | Rec. |
brand.name | Not listed | Rec. (one brand) |
gtin, mpn, sku | Not listed | Rec. |
description | Not listed | Rec. (“strongly recommended”) |
color, size, material | Not listed | Rec. |
A few details from the merchant listing doc trip people up. GTINs must be in numerical form; Google doesn’t support the URL form. The sku must not contain whitespace. And Google recommends providing priceCurrency even for snippets, because it’s “required for merchant listing experiences. It is therefore best to always provide this property.”
Here’s a minimal merchant listing you can adapt. Replace the values, and only include what the page shows.
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "https://shop.example.com/p/trail-runner-2/#product",
"name": "Trail Runner 2 Running Shoe",
"image": [
"https://shop.example.com/img/trail-runner-2-1x1.jpg",
"https://shop.example.com/img/trail-runner-2-4x3.jpg",
"https://shop.example.com/img/trail-runner-2-16x9.jpg"
],
"description": "Lightweight trail running shoe with a 6 mm drop and a lugged rubber outsole.",
"sku": "TR2-BLK-42",
"gtin13": "0123456789012",
"brand": { "@type": "Brand", "name": "Example Outdoor" },
"offers": {
"@type": "Offer",
"url": "https://shop.example.com/p/trail-runner-2/",
"price": 129.00,
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}
Validate it on the live page with the Rich Results Test, which reports product snippets and merchant listings separately.
Offer and AggregateOffer: getting price right
Use Offer when you are the seller and there’s one price for the product. Use AggregateOffer only on snippet pages that summarize a range of prices from several sellers. Google’s documentation draws three hard lines:
- Merchant listings require
Offer. Snippets acceptOfferorAggregateOffer, but merchant listings need anOffer“as the merchant has to be the seller of the product”. - Price drops need
Offer. The snippet doc says that to be eligible for the price drop enhancement, “use Offer, not AggregateOffer”. - Merchant listings need a price above zero. Snippets can mark a free product with a price of 0; merchant listings can’t.
The matrix below puts those rules side by side.
Scroll the diagram sideways to see all of it.
Two more rules prevent silent failures. If you set both offers.price and offers.priceSpecification, Google uses offers.price and ignores the other. And a priceValidUntil date in the past can stop the snippet from displaying, which is a common problem after a sale ends. To show sale pricing, Google’s merchant listing doc uses a second price marked priceType of https://schema.org/StrikethroughPrice for the original price, and that’s the only value it supports.
Ratings and reviews on product pages
Product pages can carry review stars, and the self-serving review restriction that applies to businesses doesn’t apply here. That rule, explained in our review schema guide, covers LocalBusiness and Organization. A store marking up its customers’ reviews of a product it sells is allowed, as long as it follows Google’s review snippet guidelines.
Those guidelines still bite:
- The reviews and the aggregate rating must be visible on the page.
- Don’t aggregate reviews or ratings from other websites.
- Don’t include fake reviews, or incentivized reviews that don’t clearly disclose the incentive.
- A reviewer’s name must be a real name for a person or team. Google’s example of what not to use is “50% off on Black Friday”.
On editorial review pages you can also add pros and cons with positiveNotes and negativeNotes, and Google requires at least two statements. It’s only for editorial product reviews, “not merchant product pages or customer product reviews”.
Google’s systems care about review pages in other ways too. The 2024 leak of Google’s internal API documentation, analyzed in iPullRank’s write-up, includes the attribute CompressedQualitySignals.productReviewPUhqPage, described as “the possibility of a page being a high quality review page”. Google stores this attribute; the leak does not show how much it is weighted, and it’s a page-quality score rather than anything markup can set. Our Google leak explainer covers how to read attributes like this.
Shipping and returns belong on your Organization
Google now recommends defining shipping and return policies once, at the organization level, and overriding them on individual offers only when a product is different. Both the hasMerchantReturnPolicy and shippingDetails entries in the merchant listing documentation say “We recommend you provide a global … policy for your business under Organization markup instead”. The diagram below shows the structure.
Scroll the diagram sideways to see all of it.
This mirrors how most stores work: one returns page, one shipping table, a handful of exceptions. It also means your policies live next to the rest of your company facts, which is the pattern in Organization schema for AI search. Google notes that offer-level policies support only a subset of the properties available at the organization level, another reason to define the full policy once.
Does product schema matter for AI shopping answers?
Yes, but less than the underlying data and not in isolation. Google’s product documentation says that providing both structured data and a Merchant Center feed “maximizes your eligibility to experiences and helps Google correctly understand and verify your data”, and that some experiences combine the two.
For other AI assistants, no provider has published how much product markup counts. What’s defensible is narrower: markup that states price, availability, brand and GTIN plainly removes ambiguity about which product a page describes. That helps any system that reads the page, and it costs nothing if the data is accurate. Our ChatGPT Shopping guide covers how that surface sources product information.
One technical warning from Google applies doubly here. Its JavaScript structured data guide says dynamically generated Product markup “can make Shopping crawls less frequent and less reliable” for fast-changing prices and stock. Put Product markup in the initial HTML.
Getting product schema right across a catalog
Product schema only works at scale when it’s generated from the same data as the page. A price typed into a snippet will be wrong the first time you run a sale.
A catalog checklist:
- Decide per template whether it’s a merchant listing (buy pages) or snippet (reviews, comparisons), and apply the right required properties.
- Render Product markup server-side, from the same product record that fills the visible price and stock.
- Include identifiers (GTIN in numeric form, SKU without spaces, one brand) wherever you have them.
- Move shipping and returns to Organization markup, and override only for exceptions.
- Test one URL per template in the Rich Results Test after each release, then watch the merchant listing and product snippet reports in Search Console.
- Keep images crawlable and provide several aspect ratios; Google recommends 16x9, 4x3 and 1x1 at a minimum of 50K pixels. Our image SEO guide covers the rest.
If you’re on a platform, check what it already outputs before adding anything: the Shopify SEO guide and ecommerce SEO guide cover the common defaults and gaps. For catalogs where the theme’s markup is incomplete or duplicated, our schema markup service rebuilds Product, Offer and policy markup from your product data and tests every template.
Frequently asked questions
What is product schema?
Product schema is structured data, usually JSON-LD, that describes a product on its page: its name, images, price, availability, identifiers such as GTIN, and ratings. Google uses it to show richer shopping results, such as prices and review stars, in Search, Google Images and Google Lens.
What is the difference between product snippets and merchant listings?
Product snippets are for pages where people cannot buy the product directly, such as editorial reviews. Merchant listings are for pages where a shopper can buy the product from you. Merchant listings require more, including an image and an Offer with a price above zero and a currency.
What properties are required for product schema?
For product snippets, Google requires name plus at least one of review, aggregateRating or offers. For merchant listings, it requires name, image and offers, with an Offer that has a price greater than zero and a priceCurrency. Everything else is recommended.
Should shipping and return policies go in product schema?
Google now recommends defining your standard shipping and return policies once, under Organization markup, and only adding shippingDetails or hasMerchantReturnPolicy to an individual Offer when a product needs to override the standard policy.
Can I use product schema on a category page?
Not for product rich results. Google's documentation says product rich results only support pages that focus on a single product or variants of the same product, and recommends adding markup to product pages rather than pages that list products.
Do I need product schema if I have a Merchant Center feed?
Google recommends both. It says providing structured data on pages and a Merchant Center feed maximizes eligibility for shopping experiences and helps Google verify your data. Some experiences combine the two, for example using feed pricing when it is missing from the page.