Rich Results Test errors, decoded
Google’s structured data messages tell you which field is wrong. They rarely tell you why it is wrong, and never tell you what to do about it. This page decodes the errors and warnings you will actually meet — including the worst category of all: the markup that validates cleanly and still never produces a result.
Parsing errors — Google never read your markup
These come first because nothing else matters until they are gone. The block was found but could not be turned into data, so every property inside it is invisible.
Unparsable structured data
Parsing error: Missing ',' or '}' in object declaration
No items detected / structured data not found
Duplicate field "…"
Missing field errors — the rich result is switched off
The markup parses, but a property Google treats as mandatory is absent. The result will not appear until you add it. Our generators list these before you copy anything.
Missing field "name"
Missing field "image"
Missing field "location"
Missing field "hiringOrganization"
Either "author.name" or "author.url" should be specified
Missing field "offers", "review" or "aggregateRating"
Invalid value errors — the property is there but the wrong shape
This group causes the most confusion, because the field is clearly populated. Schema.org types are strictly specified, and a value in the wrong format is treated as a plain string and discarded.
Invalid value type for field "…"
Invalid object type for field "…"
The value provided for "…" must be a valid URL
Invalid enum value / not a recognised value
The value provided for "startDate" / "uploadDate" / "datePosted" is invalid
The value provided for "duration" is invalid
Value in field "ratingValue" must be between …
The value provided for "validThrough" is in the past
Warnings — valid, but a weaker result
Warnings never block a rich result. They tell you the result will be plainer than a competitor’s, or that it may behave badly over time. Treat them as a ranked to-do list, not errors.
No global identifier provided (e.g. gtin, mpn, isbn)
Missing field "priceValidUntil"
Missing field "aggregateRating"
Missing field "dateModified"
Policy rejections — valid markup Google deliberately ignores
This is the most frustrating category, because the Rich Results Test shows a clean pass and nothing ever appears in search. The markup is correct; the use of it is not allowed.
Self-serving reviews
Markup does not match visible content
FAQ rich results limited to authoritative sites
Content behind a paywall or login
Most of these errors are avoidable at the point of generation rather than discovered afterwards. Our generators check the same requirements as you type, name the missing properties, and refuse to emit malformed dates, URLs and currency codes.
Why “valid” and “eligible” are not the same thing
This trips up almost everyone. The Rich Results Test answers a narrow question: is this markup well-formed, and does it carry the properties this result type needs? A pass means you have cleared the technical bar. It is not a prediction.
Whether a rich result actually appears depends on three further things the test cannot see: whether the page is indexed at all, whether the content is good enough for Google to want to feature it, and whether the use of that markup is permitted under Google’s policies for the result type. A page can be perfectly marked up, fully valid, and still show nothing because it is not indexed — or because the markup describes content that is not visible.
The practical sequence is: validate with the Rich Results Test, publish, confirm the URL is indexed with URL Inspection, then watch the relevant enhancement report in Search Console over the following days. Search Console is the only place that tells you what Google accepted on the live URL.
Three habits that prevent most of this
- Generate, do not hand-edit. Almost every parsing error comes from editing generated JSON by hand and dropping a comma or a brace.
- Never let a CMS rich-text editor touch your markup. It will convert straight quotes to curly ones and silently break the block. Use a code or header injection field.
- Mark up only what is on the page. If a value is not visible to a visitor at that URL, it should not be in the structured data. This single rule prevents the entire policy category above.
Common questions
My markup passes the Rich Results Test but no rich result appears. Why?
The Rich Results Test only answers whether the markup is well-formed and complete. It does not promise a result. Eligibility also depends on your page content and quality, and on Google's policies for that result type — self-serving reviews, for example, are perfectly valid markup that Google ignores by design. Check the relevant Search Console report for the live URL, which is the only place that shows whether Google accepted the markup in production.
What is the difference between an error and a warning?
An error means the rich result is switched off — Google will not use the markup until it is fixed. A warning means the markup works but the result will be plainer or less competitive, for example without a star rating or a price. Fix all errors first; treat warnings as a ranked improvement list.
Why does the test pass but Search Console report errors?
The Rich Results Test renders the URL live, on demand. Search Console reports what Googlebot saw the last time it actually crawled the page, which may be days old or may have rendered differently. If the two disagree, trust Search Console for the live state and use URL Inspection to see the rendered HTML Google really got.
Does fixing structured data errors improve rankings?
Not directly. Structured data is not a ranking factor. It makes pages eligible for richer presentations in search, which can raise click-through rate. Fixing errors restores that eligibility; it does not move you up the results page on its own.
Can I have more than one JSON-LD block on a page?
Yes. Multiple script tags are valid, and so is a single block using an @graph array. The problem is not the number of blocks but describing the same entity twice with different values, which is a common cause of duplicate-field errors when a theme and a plugin both emit schema.