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