A product page, to structured data, is a single purchasable item with a price. The
markup is Product with an Offer, and the rewards are two related
surfaces: the product snippet (price, availability and rating under your result) and
merchant listings in the Shopping tab.
What is required — and the rule the requirement hides
Formally, Product requires one property: name.
In practice there is a second rule: Google shows a product rich result only when the
product carries at least one of offers,
review or aggregateRating. A
name alone is valid markup and an empty claim — there is nothing to display.
For a page that sells, the offer is the natural one, and the Offer has its
own requirements: price and
priceCurrency, with availability
(InStock, OutOfStock, PreOrder) close behind.
What strengthens the listing
image— absolute URLs, largest first. Merchant listings are image-led.brandandsku— identity within your own catalogue.gtin(or MPN or ISBN) — the global identifier that lets Google recognise the same product across retailers. Without it you are competing as an unidentified item.shippingDetails— delivery cost and time. These show in merchant listings, and their absence is visible next to a competitor who declares them.hasMerchantReturnPolicy— the return window and who pays return postage. Same logic: shown, and compared.
An example
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Trailhead 40L Backpack",
"image": ["https://example.com/img/trailhead-40.jpg"],
"brand": {"@type": "Brand", "name": "Example Outdoors"},
"sku": "TH-40-GRN",
"gtin13": "9501101530003",
"offers": {
"@type": "Offer",
"price": "4499.00",
"priceCurrency": "INR",
"availability": "https://schema.org/InStock",
"url": "https://example.com/shop/trailhead-40l"
},
"aggregateRating": {"@type": "AggregateRating",
"ratingValue": "4.6", "reviewCount": "128"}
}
The mistakes that cost the snippet
A price that disagrees with the page. The markup price and the visible price must match, always. A mismatch — usually a stale cache or a currency conversion — is the fastest route to losing product results sitewide.
Marking up a category page. One product, one page. A grid of twelve items with Product markup describes none of them, and Google's documentation calls this out specifically.
Ratings without reviews. An aggregateRating on a page with
no visible reviews is self-assessed reputation, and it is the pattern manual actions look
for.
Availability nobody updates. InStock markup on an out-of-stock page disappoints at the exact moment a buyer arrives.
Checking your page
Validate the block with the structured data validator and confirm the offer-review-rating rule is satisfied, then run the complete page audit — price consistency, image reachability and indexability are page-level facts the markup depends on and cannot verify from inside itself.
