Rich Results Test: how to run it and fix what it flags
Run the test, read the output properly, and fix every error and warning class it reports — including the cases where a clean pass still shows nothing in Search.
What the Rich Results Test actually checks
It answers one narrow question: does this page contain valid structured data for a rich result type Google currently supports?
That is the whole job. It is a validator for eligibility. It is not an index check, not a ranking tool, and not a general schema linter.
Structured data is code that labels what is on a page so a search engine can read it without guessing. If that idea is new, start with our schema markup guide, then come back here to test what you built.
Two limits matter before you read any output:
- It only reports Google's own list. Google documents 25 supported structured data types in its search gallery (Search Central, last updated 16 October 2026). Valid markup for anything outside that list is simply not listed.
- It is not a schema.org validator. For vocabulary-level checking — spelling of properties, types that do not exist — use Schema.org's own Markup Validator. The two tools answer different questions and you want both.
FAQPage is the cleanest example of limit one. Google added a deprecation notice on 8 May 2026 saying FAQ results would no longer appear in Search from 7 May 2026, and removed the documentation on 15 June 2026 (Search Central documentation updates).
So a perfectly valid FAQPage block now returns nothing useful here. The markup is not broken. The feature is gone. It is still valid schema.org and still machine-readable context — it just will not draw a rich result. Our post on FAQ schema covers what to do with the blocks you already have.
Which rich result types still exist and what each one needs is a separate question, and we answer it in a separate post on Google rich result types. How to write the JSON-LD itself is another post again. This one stays on the test.
How to run the test, step by step
- Open the tool. search.google.com/test/rich-results. It is free and needs no sign-in for a public page.
- Choose URL or Code. URL fetches the live page. Code tests markup you paste — use that before you publish, and for anything behind a login.
- Set the user agent. Googlebot smartphone is the default and the one to trust. Google indexes mobile-first, so the smartphone render is the render that counts. Switch to desktop only to compare.
- Run it and let it render. The test fetches the page, pulls its resources and executes JavaScript before it reports. That takes a few seconds.
- Open every detected item. The summary panel hides detail. Expand each item to see which property triggered which message.
Then open View tested page. That panel holds the rendered HTML, a screenshot, the page resources the test could not load, and any JavaScript console messages.
Most real diagnosis happens there, not in the summary.
Error, warning, or "no items detected" — the three outcomes
These three mean completely different things, and treating a warning like an error is the most common waste of a developer's afternoon.
| Outcome | What it means | What to do |
|---|---|---|
| Error | A required property is missing or invalid. That item is ineligible for the rich result. | Fix it. Nothing else on the page matters until this clears. |
| Warning | A recommended property is missing. The item is still eligible. | Fix it only if the missing property is something a searcher would see. |
| No items detected | The test found no structured data for any supported type. | Check four things: is there markup at all, did it render, are you testing the right URL, is the type supported. |
| Valid, zero issues | Eligible. That is all it means. | Move to Search Console. Eligibility is not display. |
"No items detected" on a page you know has markup is almost always one of those four causes, in that order of likelihood.
Fixing each error class the test reports
The exact wording changes by type, but the error classes do not. Match the message to a row, apply the fix, retest.
| Error class | Typical cause | Fix |
|---|---|---|
| Missing required field | A property the type cannot work without is absent. | Add it, with a value that matches what the page visibly says. |
| Invalid value type | Plain text where a nested object belongs — an author as a string instead of a Person. | Wrap the value in the type the property expects. |
| Invalid enum value | A value outside the allowed set — an availability or condition label someone invented. | Use the exact schema.org value, spelling and case included. |
| Unparsable structured data | Broken JSON: a trailing comma, a curly quote, an unescaped quote inside a string. | Run the block through any JSON parser. Check your CMS is not auto-curling quotes. |
| Invalid URL value | A relative path, a space in the URL, or a staging domain left behind. | Use absolute, live, https URLs. |
| Invalid date format | A human-readable date instead of ISO 8601. | Use YYYY-MM-DD, or the full timestamp with a time zone offset. |
| Either X or Y required | The type accepts one of two alternatives and you supplied neither. | Supply one. Supplying both is usually fine but never necessary. |
| Conflicting duplicate items | Two plugins, or a plugin and a theme, both emitting the same type. | Pick one source of truth and switch the other off. |
That last row is the one that bites WordPress sites hardest. An SEO plugin and a theme both writing Organization markup will fight, and the test shows you the result without telling you there are two authors.
If you are building a block from scratch rather than debugging one, our schema markup generator produces a valid block you can paste straight into the Code tab and check before it ever reaches the site.
One placement note for WordPress. Put the finished block in your SEO plugin's custom schema field, or in the theme head. Plenty of security and optimisation plugins strip scripts from post bodies — this site runs one — and a block that was stripped looks identical to a block that was never added.
Warnings: which to fix, which to leave
A warning never blocks eligibility. It tells you the rich result can be built, but will be built with less in it.
So the test is simple: would a searcher notice the missing property?
- Fix it when the property is something that shows — an image, a price, a date, a rating, a brand. A thinner rich result competes worse than a complete one.
- Leave it when the property genuinely does not apply to your page. A warning is not a scorecard.
- Never invent a value to clear one. Google's general structured data guidelines require markup to represent the page's visible content. Marking up something that is not there is a guidelines problem, not a warning fix.
Why the test passes and the rich result still does not show
This is the question we get asked most, and the markup is usually not the answer.
In our own work on client schema, when a block validates cleanly and nothing appears in Search, we check four things in this order before touching the markup again:
- Is the URL even indexed? The Rich Results Test will validate a noindex page without complaint — it does not check indexing at all. Run the URL through URL Inspection in Search Console first. No index, no rich result, no exceptions.
- Does that type still produce a rich result? FAQ and HowTo are both gone. Several supported types are machine-readable context rather than a visible feature. A pass on a withdrawn feature is a pass on nothing.
- Is the item type eligible? Review snippets, for one, apply only to Book, Recipe, Movie, Product, Software App and Local business. Review markup on a services page earns nothing however valid it is.
- Has Google recrawled since the change? Check the last crawl date in URL Inspection, then look at the matching rich result report in Search Console. A fix made yesterday is not a fix Google has seen.
Only after those four do we question the markup itself. More often than not, the markup was never the problem.
There is also a harder truth. Valid structured data makes a page eligible for a rich result. Google decides whether to show one, per query, per device. No testing tool can promise a SERP appearance, and anyone who tells you otherwise is selling something.
Worth separating too: a rich result is not a featured snippet. Snippets are extracted from your text and need no markup at all. Different mechanism, different work.
JavaScript-injected schema behaves differently
The test renders the page, so JSON-LD written by JavaScript is usually found. That is not the same as Googlebot finding it in production.
Where the two diverge:
- Timing. The test renders on demand, now, with a fresh fetch. Live rendering is queued and happens when Google's resources allow. A block that arrives late can be missed in production and still pass here.
- Blocked resources. If the script that writes your schema is disallowed in robots.txt, the test flags it under page resources — and Googlebot hits the same wall. Our technical SEO guide covers the crawl-access side.
- Dependencies. Schema injected through a tag manager depends on the container loading and the tag firing. One consent banner, one script error, and the block is not there.
- Server-rendered is deterministic. The block is in the first HTML response. Nothing has to run for Google to see it.
Quick way to tell which you have: compare the rendered HTML in View tested page against your page source. In the rendered HTML but not the source means JavaScript put it there.
Server-render it where you can. Where you cannot, test with the smartphone agent, retest after every theme and plugin update, and put "retest schema on changed templates" into your site audit checklist. Also confirm the page is discoverable in the first place — a URL missing from your XML sitemap and unlinked internally may never get crawled, markup or no markup.
Where to take this next
The Rich Results Test is a pre-flight check, not a monitor. It looks at one URL, once, right now.
Monitoring is Search Console's job. The working loop is: generate the block, test it in the Code tab before publishing, publish, request indexing, watch the matching rich result report for valid and invalid counts, then retest after any template change.
One last thing it is not. Google's guidance on its AI experiences (Search Central, last updated 10 July 2026) states there are no additional technical requirements and no special structured data needed to appear in AI Overviews or AI Mode. Structured data governs rich-result eligibility. Treating this tool as an AI-visibility checker is a category error.
Frequently asked questions
Is the Rich Results Test free to use?
Yes. It is free and needs no Search Console account to test a public URL. Pages behind a login, or blocked by robots.txt, cannot be fetched — paste the markup into the Code tab instead and test it that way.
Why does the Rich Results Test say "no items detected"?
Four usual causes, in order: there is no structured data on that URL, the markup is injected by JavaScript that did not run, you are testing a different URL to the one you edited, or the type you used is not one Google supports for a rich result.
Is this the same as the old structured data testing tool?
No. Google's Structured Data Testing Tool was retired and now points to Schema.org's Markup Validator. That schema validator checks your markup against the vocabulary. The Rich Results Test checks it against Google's supported rich result types. Use both — they answer different questions.
Does passing the Google Rich Results Test mean my rich result will appear?
No. A pass means the page is eligible. Google still decides whether to show a rich result, per query and per device. The page also has to be indexed, and the type has to be one that still produces a visible feature in Search.
Does the Rich Results Test still check FAQ schema?
It reports nothing useful for it. Google stopped showing FAQ rich results from 7 May 2026 and removed the documentation on 15 June 2026, so FAQPage is no longer a supported rich result type. The markup stays valid as machine-readable context — it just will not draw a rich result.
Markup that validates and gets crawled
We build, test and monitor structured data as part of the technical work — not as a one-off paste.
Make Digital Hangover a preferred source
One tap tells Google to show more of our SEO and marketing coverage in your Top Stories.
