What This Error Means
Google's Rich Results Test throws Either "offers", "review", or "aggregateRating" should be specified when your Product structured data describes a product but gives Google no commercial signal to attach to it. A product rich result can show a price, a star rating, or a review snippet, and Product schema requires at least one of those three fields so there's something to show. Without one, the markup is valid JSON but not eligible for a product rich result, so Google flags it.
It's usually reported as a warning, not an error. Your page still gets indexed and can still rank. What you lose is eligibility for the enhanced listing (price, stars) in search, which is exactly the part that lifts click-through.
The Fix
Add whichever of the three fields is true for your product. Don't invent ratings you don't have; fabricated review markup is a policy violation and can trigger a manual action.
If you sell it, add offers (the most common fix):
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Wool Runner Shoe",
"image": "https://example.com/shoe.jpg",
"offers": {
"@type": "Offer",
"price": "98.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
}
}
</script>
If you have real ratings, add aggregateRating:
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "127"
}
If you have individual reviews, add review with an author and a reviewRating. You only need one of the three to clear the warning, but real e-commerce pages usually include offers plus aggregateRating together.
Common Causes
- You used
Productfor something that isn't for sale, like a portfolio item, a software feature, or a recipe. If nothing is being sold or rated, the wrong@typeis the real problem. UseSoftwareApplication,CreativeWork, orRecipeinstead. - The
offersblock is there but incomplete, missingpriceorpriceCurrency. Google needs both. - You have reviews on the page but not in the markup. Visible star ratings don't count unless they're also in structured data.
Build a valid block fast with the Product schema generator, or check what you have with the JSON-LD schema generator.
FAQ
Q: Is this a warning or an error? It's a warning in most cases. The page indexes and ranks normally; you just aren't eligible for the price or rating rich result until you add one of the three fields.
Q: Can I add aggregateRating if I don't have reviews yet? No. Only mark up ratings that genuinely exist and are visible on the page. Inventing them violates Google's structured data policies and risks a manual action.
Q: Which field should I choose?
If the product is for sale, use offers. It's the most useful and the easiest to keep accurate. Add aggregateRating on top once you have real reviews.