Rich Snippets Tester Example: Product Schema Audit
This example shows the aiwebpageseo Rich Snippets Tester validating Product schema pasted from a product page. The report shows the schema is valid JSON but missing aggregateRating, which means Google cannot show star ratings. All other requirements are met.
| Rich Result Type | Eligible? | Reason |
|---|---|---|
| Product — Price & Availability | ✅ Eligible | name, offers.price, offers.availability, offers.priceCurrency all present |
| Product — Star Ratings | ❌ Not eligible | Missing aggregateRating — required for star display |
| Product — Review Snippets | ❌ Not eligible | No review array present |
| Product — Merchant Listing | ✅ Eligible | Required fields complete for merchant listings |
"aggregateRating": {"@type": "AggregateRating", "ratingValue": "4.7", "reviewCount": "284", "bestRating": "5"}
The report shows you the exact JSON to add, populated with a 4.7 from 284 reviews. Those are illustrative numbers. Pasting them, or any number you have not actually earned, is the single most expensive mistake available in structured data.
The rating must come from real reviews that are visible on the page
Marked-up review data with no corresponding reviews a visitor can see violates Google's structured data policies. The penalty is not a missing star rating — it is a manual action for structured data spam, which suppresses rich results across your entire site until it is fixed and appealed. You would be trading the price snippet you already have for nothing.
The order is: collect the reviews, display them on the page, then mark up the aggregate you are already showing. Schema describes a page. It does not create facts about it. A Product block scoring 71/100 with no stars is in a far better position than one scoring 100 with a manual action attached.
This is the rule that catches out more businesses than any other, and no validator will tell you about it, because your markup is not the problem.
Google does not show review rich results for self-serving reviews — that is, reviews about a business, collected and published on that business's own website, marked up on LocalBusiness or Organization. The markup validates. The eligibility check passes. The stars never appear, and no report explains why.
The distinction that matters:
| Scenario | Stars? |
|---|---|
| Reviews of a product you sell, on the product page | ✅ Eligible |
| Reviews of your own business, on your own site | ❌ Not eligible |
| Reviews of a third party you have written about | ✅ Eligible |
So a plumber marking up their own testimonials page will never see stars in organic results, however clean the JSON-LD. The route to stars for a service business is Google Business Profile — the reviews Google itself holds — not schema on your own site.
Third-party review widgets frequently defeat themselves
Most review platforms inject their content with JavaScript, after the page loads. If the reviews and the ratings only exist in the rendered DOM, and the schema is served in the HTML, you have a page whose markup claims something the served document does not show. Server-render both, or the two will never agree.
Rich result types are not permanent. Google adds them, restricts them and removes them, and markup built for a feature that no longer exists is a page's worth of work for nothing.
Two changes worth knowing about, because they caught a great many people out:
- FAQ rich results were sharply restricted in 2023. Google narrowed the FAQ dropdown to a small set of authoritative government and health sites. For most businesses, an
FAQPageblock no longer produces the expandable questions in the SERP — the feature is simply not shown to you any more. - HowTo rich results were removed entirely.
Does that mean the markup is pointless? No — but be honest about what it now buys you. FAQPage markup no longer earns a SERP enhancement for most sites, and it still does something worth having: it states, unambiguously and machine-readably, that this text is a question and that text is its answer. Retrieval systems that parse rather than render use exactly that kind of structure. The SEO justification has largely gone; the AEO one has not.
Check Google's documentation before building for a rich result
The list of supported types, and the requirements for each, changes. Before you spend a day on markup for a specific SERP feature, confirm the feature still exists and that your site type is still eligible for it. Building schema because a tool suggested it, without checking what it currently produces, is how sites end up with elaborate markup that has done nothing for two years.
The report says "valid JSON-LD" and "partially eligible". Neither is a promise, and the gap between them and displayed is where most disappointment in structured data lives.
- Valid — the JSON parses, the types are real, the properties exist. A syntax check.
- Eligible — every property Google requires for a given feature is present. A permission, not a promise.
- Displayed — Google actually shows it. Never guaranteed. It decides per query, per device, per user whether an enhancement adds anything, and it withholds enhancements from pages it does not trust — regardless of how immaculate the markup is.
Perfect schema on a low-quality page earns nothing, and that is working as intended. Structured data is an amplifier, not an engine. It makes a good page more legible; it cannot make a weak page rank.
The only report that answers question three is Search Console → Enhancements. A tester tells you the markup was correct when you pasted it. Search Console tells you what Google is doing with it on your live pages — and it is the only place you will discover that a templating change silently broke the schema on four hundred URLs.
The report marks Merchant Listing as eligible, and it is the row people skim past. It is worth more attention than the stars, for a simple reason: you can act on it today, and the stars you cannot.
Two properties, both under-used, both surfacing information in the search result itself:
shippingDetails— delivery cost and speed. The first question anyone has about buying online.hasMerchantReturnPolicy— the returns window. The second.
These answer the two objections that stop a click before it happens, and unlike an aggregateRating you already know both answers. There is nothing to collect and nothing to wait for.
Two further details on the offers block that the check does not cover: priceValidUntil, whose absence lets the price be treated as stale — set it forward and keep it moving — and the absolute requirement that the marked-up price matches the displayed price. A stale £279 in the JSON-LD against a £249 on the page is a mismatch Google notices, and it is the fastest way to lose a merchant listing you already had.
What are rich snippets?
Rich snippets are enhanced search result appearances enabled by structured data — star ratings, prices, event dates, recipe details, breadcrumb trails. They typically achieve higher CTR than standard results because they provide more information at a glance and stand out visually in the SERP. The supported types change over time: FAQ rich results were restricted in 2023 to a small set of authoritative government and health sites, and HowTo rich results were removed entirely, so check Google's current documentation before building markup for a specific feature.
Why are my star ratings not showing in Google?
If aggregateRating is absent, add it — but only from real reviews that are visible on the page, since inventing one risks a manual action for structured data spam. The reason that catches most businesses out, however, is different and no validator reports it: Google does not show review rich results for self-serving reviews, meaning reviews about a business, collected and published on that business's own website and marked up on LocalBusiness or Organization. The markup validates, the eligibility check passes, and the stars never appear. Reviews of a product you sell, on that product's page, are eligible; testimonials about yourself are not. For a service business the route to stars is Google Business Profile. Other causes: schema validation errors, reviews injected by JavaScript that the served HTML does not contain, or Google not yet having recrawled the page.
How long does it take for rich snippets to appear?
After adding valid structured data, Google typically processes it within a few days to a few weeks. Use Google Search Console's URL Inspection tool to request indexing of the updated page. Rich results also require the page to have been crawled and the schema to pass Google's eligibility checks.
Can I just add an aggregateRating to unlock the stars?
No. The rating must come from real reviews visible on the page. Marked-up review data with no corresponding reviews a visitor can see violates Google's structured data policies, and the penalty is a manual action for structured data spam — which suppresses rich results across your entire site until it is fixed and appealed. You would trade the price snippet you already have for nothing. Collect the reviews, display them, then mark up the aggregate you are already showing.
My review markup is perfect but the stars never appear. Why?
Most likely because they are self-serving reviews. Google does not show review rich results for reviews about a business, collected and published on that business's own website and marked up on LocalBusiness or Organization. The markup validates, the eligibility check passes, and the stars never come. Reviews of a product you sell, on that product's page, are eligible; testimonials about yourself, on your own site, are not. For a service business, the route to stars is Google Business Profile — the reviews Google itself holds.
Is FAQ schema still worth adding?
For the SERP dropdown, mostly no — Google restricted FAQ rich results in 2023 to a small set of authoritative government and health sites, and removed HowTo rich results entirely. For most businesses an FAQPage block no longer produces the expandable questions. It still does something worth having, though: it states unambiguously that this text is a question and that text is its answer, which is exactly the structure retrieval systems parse. The SEO justification has largely gone; the AEO one has not. Always check Google's current documentation before building markup for a specific SERP feature.
What should I add instead of chasing the stars?
shippingDetails and hasMerchantReturnPolicy. They surface delivery cost and the returns window in the search result itself, answering the two objections that stop a click before it happens — and unlike an aggregateRating, you already know both answers, so there is nothing to collect and nothing to wait for. Also set priceValidUntil, whose absence lets the price be treated as stale, and make certain the marked-up price matches the displayed price exactly.
Three tools, and they are routinely used interchangeably by people who then get confusing answers. They are not interchangeable — each answers a different question, and knowing which one you are asking saves a great deal of confusion.
| Tool | The question it answers | Use it when |
|---|---|---|
| Rich Results Test | "Is this eligible for a Google rich result?" | You want a specific SERP enhancement |
| Schema Markup Validator | "Is this valid schema.org?" | You are marking up for correctness, and for machines other than Google |
| Search Console → Enhancements | "Is this working on my live pages, at scale?" | After deployment, across the whole site |
The distinction that trips people up: Google's Rich Results Test will ignore, or warn about, perfectly valid schema.org markup that Google simply does not use for any of its own features. That is not an error in your markup. It is Google telling you about Google.
So if you are marking up so that answer engines and other parsers can read your content unambiguously — rather than to win a star rating — the schema.org validator is the one that answers your question, and a warning from Google's tool may be entirely irrelevant to what you are trying to do.
Test the live URL, not the pasted code
A tester that accepts pasted JSON-LD proves the code was correct when it left your editor. It cannot tell you that your CMS HTML-escaped every quote on the way to the page, that a rich-text editor mangled the block, or that the markup is being injected by JavaScript and therefore does not exist in the served HTML at all. Always run the final check against the live URL, and read the served page source yourself. The journey from editor to page is where most structured data dies.
Related Demo Reports
Run Rich Snippets Tester on Your Own Site
Get your real audit with specific issues, fixes and improvements — free to start.