Summary
- Google requires at least one of
offers,review, oraggregateRatingon Product markup to qualify for rich results - Most common cause: using Product schema on informational or catalog pages that do not sell, review, or rate a product
- Fix: add one of the three properties, or switch to a different schema type if the page is not a product page
- This is a Google-specific requirement, not a schema.org rule
The Google Rich Results Test shows this error when a Product type is missing all three commerce and review signals. Google requires at least one of offers, review, or aggregateRating to generate a Product rich result. Without any of them, the markup has no actionable data for search results.
What This Error Means
Google’s Product rich results display prices, availability, ratings, and review counts alongside search listings. To show any of this, Google needs at least one of these properties:
offers- pricing and availability informationreview- an individual review with a ratingaggregateRating- a summary of multiple ratings (average score, review count)
If none are present, Google cannot generate a useful rich result and flags the markup as incomplete. This is a Google requirement for rich result eligibility. The schema.org specification itself does not mandate these properties.
Common Causes
Using Product markup on informational pages. This is the most common cause. A page that describes a product category, compares products, or lists features without pricing or reviews should not use Product schema at all.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Running Shoes",
"description": "Everything you need to know about running shoes",
"brand": {
"@type": "Brand",
"name": "Various"
}
}
This describes a product category, not a specific product for sale. Google flags it because there are no offers or reviews.
Product pages before pricing is set. Draft product pages or pre-launch pages sometimes have structured data added before the price is finalized. The markup ships without offers.
CMS templates that skip conditional fields. A template might output Product JSON-LD for every product, but only include offers when a price exists in the database. Products with missing prices get markup with no commerce data.
How to Fix It
Option 1: Add offers
The most common fix. If the page sells a product, add an offers property with price and availability.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "TrailCo Speedrunner 3000",
"description": "A lightweight running shoe for trail use",
"brand": {
"@type": "Brand",
"name": "TrailCo"
},
"offers": {
"@type": "Offer",
"price": 129.99,
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/products/speedrunner-3000"
}
}
Option 2: Add review
If the page features a single review of the product, add a review property.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "TrailCo Speedrunner 3000",
"review": {
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": 4,
"bestRating": 5
},
"author": {
"@type": "Person",
"name": "Alex Chen"
},
"reviewBody": "Great traction on muddy trails. Runs a half size small."
}
}
Option 3: Add aggregateRating
If the page displays a summary of user ratings, add aggregateRating.
{
"@context": "https://schema.org",
"@type": "Product",
"name": "TrailCo Speedrunner 3000",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": 4.3,
"reviewCount": 89,
"bestRating": 5
}
}
Option 4: Use a different schema type
If the page is not about a specific, purchasable product, do not use Product. Consider these alternatives:
- Category pages listing multiple products: use
ItemListwith individualProductentries, or useCollectionPage. - Informational articles about products: use
ArticleorTechArticle. - Comparison pages: use
Articlewith the comparison as the subject.
Prevention
- Only use
Productschema on pages where a specific product is offered for sale, reviewed, or rated by users. - In CMS templates, wrap the entire Product JSON-LD block in a conditional that checks for the presence of at least one commerce signal. If none exist, either skip the structured data or output a different type.
- Test new product templates with the Rich Results Test before deploying to production.
- Review the Product schema reference for the full list of required and recommended properties.
Related Errors
- Missing field ‘name’ - another required field error that often appears alongside this one
- Unparsable structured data - when the JSON syntax is broken
- Product schema reference - full property reference for Product markup
- Testing Structured Data - tools for validating structured data