TechnicalSchema

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 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.

Choosing between product snippet and merchant listing markup by page type A question at the top: can a shopper buy this product from you on this page? The no branch leads to product snippets, for editorial reviews, comparison pages and pages linking to other sellers. Required: name, plus one of review, aggregateRating or offers. Extras: pros and cons via positiveNotes and negativeNotes on editorial reviews only. The yes branch leads to merchant listings, for your own product pages with a buy option. Required: name, image, and an Offer with price above zero and a currency. Extras: shipping, returns, GTIN, variants, sale pricing. A note at the bottom says meeting the merchant listing requirements generally makes a page eligible for product snippets too. Which product markup rules apply? Decided by the page, not by the product Can a shopper buy it from you on this page? no yes Product snippets Reviews, comparisons, pages linking to sellers Required: name + one of review, aggregateRating or offers Extra: pros and cons (editorial reviews only) Merchant listings Your product pages with a way to buy Required: name, image, and an Offer with price above 0 and priceCurrency Extra: shipping, returns, GTIN, variants, sales Meeting the merchant listing requirements generally makes the page eligible for product snippets too.

Scroll the diagram sideways to see all of it.

Source: Ambeltek diagram based on Google Search Central's product structured data introduction, product snippet and merchant listing documentation.

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.

The table lists what Google requires and recommends for each feature, from the two documentation pages. “Rec.” means recommended.

PropertyProduct snippetsMerchant listings
nameRequiredRequired
imageNot listedRequired
offersOne of offers, review or aggregateRating requiredRequired (Offer only)
offers.priceRequired in the OfferRequired, must be above 0
offers.priceCurrencyRec.Required
offers.availabilityRec.Rec.
review / aggregateRatingOne of the three requiredRec.
brand.nameNot listedRec. (one brand)
gtin, mpn, skuNot listedRec.
descriptionNot listedRec. (“strongly recommended”)
color, size, materialNot listedRec.

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 accept Offer or AggregateOffer, but merchant listings need an Offer “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.

Offer versus AggregateOffer against Google's product pricing rules A matrix with two columns, Offer and AggregateOffer, and four rows. Accepted for product snippets: Offer yes, AggregateOffer yes. Accepted for merchant listings: Offer yes, AggregateOffer no, because the merchant must be the seller. Eligible for the price drop enhancement: Offer yes, AggregateOffer no. Price of 0 allowed: for product snippets yes, for merchant listings no, the price must be above zero. Offer or AggregateOffer? What each is allowed to do in Google's product features Offer AggregateOffer Product snippets Yes Yes Merchant listings Yes No Price drop enhancement Yes No Price of 0 allowed Snippets yes; merchant listings no

Scroll the diagram sideways to see all of it.

Source: Ambeltek diagram based on Google Search Central's product snippet and merchant listing documentation.

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.

Where shipping and return policies sit in product markup, per Google's current guidance A layered diagram. Top layer, Organization, defined once on a policy or about page: holds the standard MerchantReturnPolicy and shipping policy, and can hold a MemberProgram for loyalty pricing. Middle layer, each Product page: Product with name, image, identifiers and brand, containing an Offer with price, currency, availability and condition. Bottom layer, only when a product differs: the Offer adds its own hasMerchantReturnPolicy or shippingDetails, or references the global policy by @id. An arrow shows product pages inheriting the organization-level policies. Define policies once; override only when a product differs Google's merchant listing docs recommend organization-level shipping and returns Organization (declared once) Standard return policy, standard shipping policy, loyalty program (MemberProgram) Product page: Product + Offer name, image, gtin, sku, brand | Offer: price, priceCurrency, availability, itemCondition Only when this product differs Offer adds its own hasMerchantReturnPolicy or shippingDetails inherits

Scroll the diagram sideways to see all of it.

Source: Ambeltek diagram based on Google Search Central's merchant listing structured data documentation.

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:

  1. Decide per template whether it’s a merchant listing (buy pages) or snippet (reviews, comparisons), and apply the right required properties.
  2. Render Product markup server-side, from the same product record that fills the visible price and stock.
  3. Include identifiers (GTIN in numeric form, SKU without spaces, one brand) wherever you have them.
  4. Move shipping and returns to Organization markup, and override only for exceptions.
  5. 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.
  6. 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.

OK

Olga Kunger

Founder & Lead Strategist, Ambeltek

Olga leads Ambeltek's web development, AI SEO, and GEO work — helping brands rank on Google and get cited by AI engines. More about Olga →

Want structured data that engines trust?

We audit, design and ship connected JSON-LD for your whole site, validated and monitored.