Most guides on how to add product schema start with a block of JSON-LD to copy. That is the wrong place to start. The markup is easy; deciding what the page actually is, and marking up only that, is where most implementations go wrong.
Below is the decision first, then the properties, then an example of product schema you can adapt, then how to check it. If structured data in general is new territory, our primer on schema markup covers the basics.
Product snippets or merchant listings: decide first
Google’s Product structured data documentation separates the two. Product snippets are “For product pages where people can’t directly purchase the product”. Think review sites, comparison pages and editorial roundups: the emphasis is on reviews and ratings. Merchant listings are “For pages where customers can purchase products from you”, and they carry the commercial details: price, shipping, sizing and the like.

The distinction sounds obvious, but it is routinely blurred. Affiliate sites mark up review pages as though they sold the product, and shops leave out the fields that only matter for merchant listings. Ask the question honestly. If the buy button sends the visitor to someone else’s checkout, you are publishing a product snippet page, not a merchant listing.
A shop page that also shows customer reviews is still a merchant listing page. The reviews sit inside the same Product markup alongside the offer; they do not turn it into a different kind of page. What matters is whether the transaction happens with you.
| Product snippets | Merchant listings | |
|---|---|---|
| Google’s description | “For product pages where people can’t directly purchase the product” | “For pages where customers can purchase products from you” |
| Typical page | Review, comparison or editorial page | A shop’s product page |
| Emphasis | Reviews and ratings | Price, shipping, sizing and similar details |
| Minimum to be eligible | Product name plus review, aggregateRating or offers | Product details with offer information |
| Merchant Center feed | Not relevant | Complements the markup |
The properties Google product schema markup needs
For product snippets, the documentation asks for the product’s name plus at least one of three things: a review, an aggregateRating or offers. Without one of those there is nothing for Google to show beyond what the title already says.

Offers are where commercial detail lives. The core properties are price, priceCurrency and availability. They must match what a visitor sees on the page. A price in the markup that differs from the price on screen is exactly the kind of mismatch that undermines trust in your structured data, and stale availability is the most common version of it.
Reviews deserve the same care. If you mark up ratings, they should be ratings shown on the page, not a number pulled in from elsewhere. Our guide to review schema covers the rules for marking up reviews and ratings specifically.

An example of product schema
Here is a minimal JSON-LD block for a page that sells a single product. It belongs in the page’s HTML, and every value in it should be visible on the page too.
The rating and review count above are placeholders; use the real figures shown on your own page. A review site would typically keep the aggregateRating and reviews and drop the offer unless it genuinely lists prices. A shop that sells the product should add the merchant details the documentation describes, such as shipping and returns, rather than stopping at the minimum.
For products sold in several sizes or colours, Google supports variants, so you do not need to pretend each variant is an unrelated product. If you also submit a Merchant Center feed, treat it as a complement to the markup rather than a replacement. The two should agree on price and availability.
On most platforms you will not write this block by hand for every product. Shop software and SEO plugins generate it from a template, which is efficient and also where errors multiply: one wrong field mapping is repeated across every product. So read the generated output for a handful of real pages before trusting it, and check that each value comes from the product’s own data rather than a default.
The category-page mistake
Product markup should describe the product on the page. It is not meant for category pages that list many products. It is an easy line to cross: a template adds Product markup to every item on a listing page, and the category page ends up claiming to be twenty products at once.

The fix is structural. Product markup belongs on individual product pages; category pages should link to those pages and let them carry the markup. If you are reworking shop templates more widely, our guide to ecommerce SEO covers how category and product pages should divide the work.
How to check product schema
Check before you ship and keep checking after. Google’s Rich Results Test shows whether a page’s markup is eligible for rich results and lists errors and warnings. Once the markup is live, Search Console’s reports for product snippets and merchant listings show problems across the whole site, which is where template errors surface.

Run the test on a few pages from each template, not just one. A product in stock, one out of stock and one with variants will usually expose any field that is hard-coded when it should be dynamic.
Then repeat the check whenever the template, the theme or the plugin changes. Markup that was correct at launch can break silently after an update, and the site-wide reports in Search Console are usually the first place it shows.

One limitation to be clear about. Valid markup makes a page eligible for rich results; it does not guarantee them. Google decides whether to show a product snippet or merchant listing, and passing the test is not a promise that one will appear. Treat product schema as a way of describing your page accurately, and judge it by whether it is correct and complete rather than by whether stars appear next week. Teams that add markup only to chase a visual feature tend to cut corners on accuracy, and accuracy is the part Google checks. The same discipline applies to any other markup you add alongside it, including FAQ schema.
Frequently asked questions
What is the difference between product snippets and merchant listings?
Product snippets are for pages where people can’t buy the product directly, such as reviews. Merchant listings are for pages where customers can buy from you, with price and shipping details.
What does product schema need at minimum?
For product snippets, the product name plus a review, an aggregateRating or offers. Offers should include price, priceCurrency and availability.
Can I add product schema to category pages?
No. Product markup should describe the product on the page, not a category page listing many products. Put it on the individual product pages.
Does valid product schema guarantee rich results?
No. Valid markup makes a page eligible, but Google decides whether to show a rich result.
The takeaway Decide whether the page is a product snippet or a merchant listing, mark up only the product on that page, keep offers in line with what visitors see, and test every template.

