Structured data not showing rich results is one of the most confusing problems in technical SEO, and the single most useful thing you can do is figure out which of two completely different problems you actually have. Either Google cannot detect or trust your markup at all, or Google detects it fine and is simply choosing not to display a rich result. Those two branches need opposite fixes, and most troubleshooting guides blur them together. This walkthrough splits them and gives you a concrete fix plus a re-validate step for each.
Here is the part that trips everyone up: passing the Rich Results Test does not mean a rich result will appear, and failing the test is not the only reason results stay hidden. Eligibility and display are separate gates. Until you know which gate you are stuck at, you are guessing.
Structured Data Not Showing Rich Results: The Two Failure Points#
Before touching code, locate your failure point. Run your live URL through Google's Rich Results Test and read the result against this split:
- Failure point 1: not detected or not valid. The test says "No items detected" or shows errors and missing required properties. Google literally cannot read or trust the markup. Nothing will ever render until you fix this.
- Failure point 2: detected and eligible, but no rich result in search. The test says the page is "Eligible for rich results," yet Google's actual search listing shows a plain blue link. The markup is fine. Display is the problem.
These are two different worlds. Failure point 1 is a markup or crawl problem you control completely. Failure point 2 is a trust, quality, or eligibility problem where Google has the final say. Treating a point-2 issue like a point-1 issue (rewriting your JSON-LD over and over) wastes hours, because the markup was never broken.
Key distinction: the Rich Results Test answers "can Google use this?" It does not answer "will Google show this?" Eligible means allowed, not guaranteed.
If you are still hand-writing JSON-LD and suspect a syntax slip is the culprit, generating clean, schema-valid markup with the free schema markup generator removes the most common source of point-1 errors before you debug anything else.
Branch A: Google Cannot Detect or Trust Your Markup#
This is the "No items detected" or red-error branch. Work through these causes in order, because they account for the overwhelming majority of point-1 failures.
Missing required properties#
Every schema type has required properties, and Google ignores the whole block if a required one is absent. A Recipe needs name and image. A Product needs name plus a valid offers, review, or aggregateRating. An Article needs headline and a datePublished. Recommended properties are bonuses, but a single missing required field can silently disqualify the entire item.
The Rich Results Test flags these explicitly under "missing field" warnings. Read them literally. A warning like "missing field offers" is not optional advice, it is the reason your Product result is not eligible.
Wrong or invalid syntax#
JSON-LD is unforgiving. A trailing comma, an unescaped quote inside a string, or a @type that does not match a recognized schema.org type will break parsing. Common breakers:
- A trailing comma after the last property in an object.
- Using a single
@typevalue where Google expects a specific subtype (for exampleThinginstead ofArticle). - Wrapping the script in the wrong tag. It must be
<script type="application/ld+json">, nottext/javascriptor a bare<script>. - Placing the JSON-LD inside a comment or a string that another script injects but never actually writes to the DOM.
Warning: paste your block into a JSON validator first. If it is not valid JSON, it is definitely not valid JSON-LD, and Google will skip it without telling you why in plain language.
The markup is in JavaScript Google never runs#
If your structured data is injected client-side by a tag manager or a framework after page load, Google has to render the page to see it. That usually works eventually, but it adds latency and can fail if the script errors, depends on user interaction, or runs after a timeout. Server-rendered JSON-LD in the initial HTML is always the safer bet.
To check, view the rendered HTML in the Rich Results Test (it shows the rendered source) and confirm your JSON-LD block is present there, not just in your local browser after hydration.
A crawl block is hiding the page#
Google cannot read structured data on a page it cannot crawl. Two silent killers:
- robots.txt is blocking the URL. If the path is disallowed, Googlebot never fetches the page, so it never sees the markup. Confirm the URL is crawlable, and if your robots file is messy, rebuild a clean one with the robots.txt generator so you stop accidentally blocking template paths.
- A
noindexdirective is set. A page withnoindex(in a meta tag orX-Robots-Tagheader) will not appear in search at all, which means no rich result either. Eligibility is irrelevant if the page is excluded from the index.
Content and markup mismatch#
Google requires that structured data describe content actually visible on the page. If your Review markup includes a star rating that no human sees, or your FAQ schema contains questions that are not present in the visible body, that is a guideline violation. Google may ignore the markup, and repeated mismatches can trigger a structured data manual action.
The fix is simple and strict: every value in your JSON-LD must correspond to real, visible content. Hidden ratings, fabricated reviews, and FAQ answers that exist only in the markup are the classic traps.
Re-validate (Branch A)#
After each fix, re-run the live URL in the Rich Results Test. When it flips from "No items detected" or an error state to "Eligible for rich results," you have cleared Branch A. Then move to Branch B, because eligible is only half the battle.
Branch B: Eligible but Still No Rich Result#
This is the frustrating branch. The test says you are eligible, the markup is clean, and yet your live listing is a plain link. Here is why that happens and what you can actually do.
Google has not re-crawled and reprocessed yet#
Rich results are not instant. Even after you fix everything, Google has to re-crawl the page, render it, reprocess the structured data, and update the index. This can take anywhere from a few days to a few weeks depending on how often Google crawls your site.
What to do:
- Submit the URL with URL Inspection in Google Search Console and click Request Indexing.
- Check the Enhancements reports in Search Console (for example the FAQ, Product, or Breadcrumb reports) to see whether Google has detected and validated the item at the site level, which is a stronger signal than a single live test.
- Be patient. A page indexed for the first time, or one with low crawl priority, will lag.
Eligible is not a promise#
This is the core truth most articles skip. Google's documentation is explicit that being eligible does not guarantee a rich result will show. The algorithm decides per query, per device, and per moment whether a rich result improves that specific search. Reasons it may withhold one:
- The query does not warrant that result type (rich results are query-dependent, not page-dependent).
- Google judges the page or site quality as not yet meeting the bar for enhanced display.
- A competing result is shown instead, or the SERP layout for that query simply does not include your result type.
You cannot force display. You can only stay eligible and improve the underlying page quality and relevance so Google has more reason to feature it.
A manual action or quality issue is suppressing it#
Open Manual Actions and Security Issues in Search Console. A structured data manual action (usually for spammy or mismatched markup) will suppress rich results across affected pages even when the markup validates. If you find one, fix the underlying mismatch, then file a reconsideration request.
The result type is deprecated or restricted#
Google periodically retires rich result types or limits which sites get them. FAQ and How-to rich results, for example, were sharply reduced in 2023 and are now shown for a much narrower set of sites and queries. Your FAQ markup can be perfectly valid and eligible and still almost never produce a visible rich result, because Google curtailed that feature. If you are unsure whether the type you are targeting is still widely shown, read our breakdown of whether FAQ schema is still worth adding in 2026 before you keep debugging a result Google rarely renders anymore.
Re-validate (Branch B)#
Branch B has no instant "fixed" signal, so validation is about confirming eligibility holds and then watching the right reports over time:
- Re-run the live URL test and confirm it still says Eligible. If it does, your job on the markup side is done.
- Watch the relevant Enhancements report in Search Console for the item to appear as Valid at scale.
- Track actual SERP appearance over the following days and weeks, not minutes. If the type is still active and the page is quality, results typically surface after reprocessing.
A Quick Diagnostic Table#
Use this to route yourself to the right fix instead of randomly editing markup.
| What you see | Failure point | First fix | How you confirm |
|---|---|---|---|
| "No items detected" | A: not detected | Add JSON-LD, fix syntax, server-render it | Test shows the item |
| Red errors / "missing field X" | A: invalid | Add the missing required property | Errors clear in the test |
| Markup only visible after JS loads | A: not detected | Server-render the JSON-LD | Rendered HTML shows the block |
| Page not in index at all | A: blocked | Remove noindex / fix robots.txt | URL Inspection says indexed |
| "Eligible for rich results" but plain SERP | B: display | Request indexing, wait, improve quality | Enhancements report + SERP over time |
| Eligible but suppressed everywhere | B: manual action | Check Manual Actions, fix, reconsider | Manual action cleared |
| Valid FAQ/How-to but never shown | B: deprecated type | Accept reduced visibility, reprioritize | Confirm type is still active |
How to Validate Markup the Right Way#
Tooling matters here, because different validators answer different questions and using the wrong one sends you down the wrong branch.
- Rich Results Test (Google): the only tool that tells you whether Google considers the page eligible for a Google rich result. Always test the live URL, not a code snippet, so it accounts for crawl blocks and rendering.
- Schema Markup Validator (schema.org): tells you whether your markup is technically valid schema.org, including types Google does not use for rich results. Useful for catching syntax errors, but passing it does not imply eligibility.
- Search Console Enhancements + URL Inspection: the source of truth for what Google has actually detected, validated, and indexed on your real pages over time.
A reliable workflow is to generate valid markup, confirm it parses as JSON, validate it in the Rich Results Test against the live URL, then monitor Search Console. If you are building or auditing tags as part of a broader on-page pass, pairing the schema generator with the SERP snippet preview tool and a clean meta tag generator keeps your titles, descriptions, and structured data consistent, which is exactly the kind of overall page quality that helps Branch B resolve in your favor.
Putting It Together#
When your structured data is not showing rich results, resist the urge to keep rewriting JSON-LD until you have confirmed which branch you are on. Run the live Rich Results Test first. If it says the item is not detected or shows errors, you are in Branch A: fix required properties, syntax, rendering, crawl blocks, and content mismatch, then re-test until it says eligible. If it already says eligible, you are in Branch B: request indexing, check for manual actions and deprecated types, improve page quality, and give Google time to reprocess.
The mental model worth keeping: detection and eligibility are things you control, while display is a decision Google makes per query. Get the markup clean and eligible, stay honest about content matching, and accept that some result types (FAQ and How-to especially) will be eligible far more often than they are shown. Generate the markup correctly once with a schema markup generator, validate it the right way, and you remove every variable that is actually in your hands.
Frequently Asked Questions#
Why does my structured data pass the Rich Results Test but no rich result shows in Google? Because eligibility and display are separate gates. The Rich Results Test only confirms Google can use your markup, not that it will show a result. Google decides per query and per device whether a rich result improves that search, and it can withhold one even when your page is fully eligible. Request indexing, check Search Console, and give it time to reprocess.
Why does the Rich Results Test say "No items detected"? Google could not find valid, parseable structured data on the live page. The usual causes are invalid JSON-LD syntax, markup injected by JavaScript that Google did not render, the wrong script type, or a crawl block (robots.txt disallow or noindex) that stops Googlebot from fetching the page at all. Fix the markup or crawl issue, then re-test the live URL.
How long does it take for rich results to appear after I fix the structured data? There is no fixed time. Google must re-crawl, render, reprocess the markup, and update its index, which commonly takes from a few days to a few weeks depending on your site's crawl frequency. Submitting the URL through URL Inspection and clicking Request Indexing in Search Console can speed up the first step, but display is never instant.
My markup is valid but a manual action is mentioned, what do I do? Open the Manual Actions report in Google Search Console. A structured data manual action, usually issued for spammy or mismatched markup, suppresses rich results even when the code validates. Fix the underlying issue (most often markup describing content that is not visible on the page), then submit a reconsideration request through Search Console.
Why won't my FAQ schema show a rich result even though it's valid? Google sharply reduced FAQ and How-to rich results in 2023 and now shows them for a much narrower set of sites and queries. Your FAQ markup can be valid and eligible yet almost never produce a visible result because Google curtailed the feature. The schema still has value for clarity and parsing, but do not expect the old visual FAQ snippet.
Does adding structured data improve rankings directly? No. Structured data does not give a direct ranking boost. Its job is eligibility for rich results, which can improve how your listing looks and its click-through rate, indirectly helping performance. Keep your expectations on enhanced appearance and clarity for search engines, not on a position bump from the markup alone.



