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.
  • brand and sku — 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.