Menu

Why Is Your Structured Data Valid but Not Showing Rich Results?

The validator is green, the Rich Results Test is happy, and the search result is still a plain blue link. That gap is not a markup bug, and editing the markup again will not close it.

Signal trace · Technical SEO897 words · 7 sections · 6 terms
schema markupreview schema
On this page 7 sections
  1. Does valid markup guarantee a rich result?
  2. Which validator did you use, and what does it actually check?
  3. Is the page indexed, and is it the canonical?
  4. Does the rich result you want still exist?
  5. Does your markup describe what the page actually shows?
  6. Is Google simply choosing not to show it?
  7. What should you check first?

Valid markup is permission, not a promise. Google's documentation says structured data makes a page eligible for a rich result and never guarantees one. Six things usually sit in that gap, and they fail in a fixed order.

Does valid markup guarantee a rich result?

No. Validation confirms that your structured data parses and carries the properties Google asks for. Whether the result renders is a separate decision Google makes later, per query. Between the two stages sit indexing, canonical selection, whether the feature still exists, whether the markup matches the visible page, and ranking. A validator can only see the first stage, which is why it keeps telling you everything is fine.

Which validator did you use, and what does it actually check?

Each tool answers a narrower question than its name suggests. Running the wrong one is the most common reason a team believes the problem is solved.

ToolWhat it checksWhat it cannot tell you
Schema.org validatorSyntax and conformance to the schema.org vocabularyWhether Google supports that type for any search feature at all
Google Rich Results TestWhether the page or the pasted schema markup qualifies for a specific Google featureWhether Google will choose to show it
Search Console enhancement reportsWhat Google saw on URLs it has already indexed, with errors and warningsAnything about URLs that are not indexed
URL Inspection, live testThe markup Google reads right now, after rendering the pageThe state of the version currently in the index

A type that passes the schema.org validator and fails the Rich Results Test is not broken markup. It is markup for something Google does not turn into a feature.

Is the page indexed, and is it the canonical?

Rich results come only from indexed pages, and Google reads markup from the URL it picked as canonical. Markup sitting on a duplicate that Google folded into another address is simply not being read. URL Inspection names the Google-selected canonical explicitly, which makes this a one-minute check rather than a theory. Parameterized URLs, paginated variants and staging copies are where this hides. A page excluded from the index has no path to any kind of organic search enhancement, and no amount of markup changes that.

Key Insight

A validator answers "is this markup correct?" Search Console answers "did Google use it?" Only the second question has a consequence, and the two answers disagree far more often than teams plan for.

Does the rich result you want still exist?

Some features were retired, and markup for a retired feature validates forever while showing nothing. Google announced in 2023 that FAQ rich results would be limited to well-known authoritative government and health sites, and that HowTo rich results would be dropped. In 2019 it ended support for self-serve review snippets on Organization and LocalBusiness markup, so review schema a business writes about itself is eligible for nothing at all. Google has also split product results into separate experiences with different required properties, so product schema that qualifies as a product snippet may not qualify as a merchant listing. Check the current feature documentation for your type before you debug anything else.

Does your markup describe what the page actually shows?

Google's general structured data guidelines require marked-up content to be visible to the reader on the page. A price that appears only in JSON-LD, a rating assembled from a source the visitor cannot see, a review count that exists nowhere in the HTML: each fails that check. The failure mode is worse than silence, because the spam policy for structured markup is enforced with manual actions, and those arrive in Google Search Console rather than in any validator.

Common Mistake

Marking up an aggregate rating that appears nowhere on the page is the fastest way to lose eligibility across an entire template, because a manual action can be applied to a whole section of a site rather than to the single URL that triggered it.

Is Google simply choosing not to show it?

This is the residual case, and it is the most common one on healthy sites. Eligibility is decided per page; display is decided per query, per device and per result layout. The same URL can carry a rich result for one phrasing and a plain link for another, and a page that ranks below the set of results the feature draws from shows nothing even while being perfectly eligible. The Performance report's search appearance dimension is the honest test: filter to the URL and see whether that appearance has ever fired for it.

What should you check first?

Run URL Inspection on the exact URL and read three lines: is it indexed, is the Google-selected canonical the URL you expected, and is the markup detected after rendering. Then confirm the feature still exists for your type. Then compare the JSON-LD against what a visitor can see. Only after those three does editing the markup make sense.

If all three come back clean and the snippet still does not appear, you are not looking at a structured data problem. You are looking at a ranking problem that happens to show up as a missing rich result, and it needs content and links, not another property in the JSON-LD. Those are two different projects with two different owners, and the next decision is which one you are actually funding.