Skip to content

Product schema example

Google documents two Product experiences. A product snippet (price, stars, availability under a normal result) needs name plus at least one of offers, review or aggregateRating. A merchant listing, for pages where the item can be bought, needs name, image and an offer with a price. One Product block can satisfy both.

JSON-LD ยท passes this validator with 0 errors
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Trailhead 28L Daypack",
  "image": [
    "https://example.com/img/trailhead-28.jpg"
  ],
  "description": "A 28-litre hiking daypack with a ventilated back panel and a rain cover.",
  "sku": "TH28-GRN",
  "gtin13": "4006381333931",
  "brand": {
    "@type": "Brand",
    "name": "Northfold"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/trailhead-28",
    "price": "89.00",
    "priceCurrency": "EUR",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "reviewCount": 212
  },
  "review": [
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "Jonas P."
      },
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": 5,
        "bestRating": 5
      },
      "reviewBody": "Carried it on a three-day hut trek; the rain cover earned its keep."
    }
  ]
}
</script>

What Google checks

Product snippet docs

Required: name one of offersreviewaggregateRating

Recommended: imagedescriptionbrandskuoffersaggregateRatingreview

Merchant listing docs

Required: nameimageoffers

Recommended: descriptionbrandgtinskuaggregateRatingreview

Taken from Google Search Central's documentation for this type. Meeting the requirements makes a page eligible; Google decides whether to show a rich result.

Mistakes the validator catches on Product

"price": "$89.00" or "89,00"
price takes digits and a dot only. The currency goes in priceCurrency as an ISO 4217 code (EUR, USD), never a symbol.
Either "offers", "review", or "aggregateRating" should be specified
Google's snippet needs at least one of the three. A Product with only a name and description is not eligible.
brand as plain text
Some reports flag "Invalid object type for field brand". Use {"@type": "Brand", "name": "Northfold"}.
Stale priceValidUntil
A date in the past tells Google the price has expired. Update it or drop it.
Stars with no real reviews
aggregateRating must reflect ratings shown on the page. Invented or imported-but-hidden ratings break Google's review guidelines.

Paste your own version into the schema markup validator or test a live URL.

Questions

What is required for Product rich results?

For a product snippet: name, and at least one of offers, review or aggregateRating. For a merchant listing: name, image and offers with a price. Everything else is recommended.

Why does Search Console say "Missing field review" if it isn't required?

That is a non-critical warning. If you already provide offers or aggregateRating, the item can still be eligible; review is recommended, not mandatory.

Should the GTIN be a number or a string?

Use a string. Leading zeros are meaningful in GTINs, and JSON numbers drop them.

Other examples

ArticleFAQPageRecipeEventLocalBusinessOrganizationBreadcrumbListVideoObjectJobPostingReview