Schema and rich results
Seven checks: valid structured data, and what it can earn you.
Structured data is a machine-readable description of what a page is, embedded in the page itself. It does not make you rank higher. It decides whether your result can be more than a blue link: star ratings, prices, FAQ dropdowns, recipe cards, event dates.
Seven checks, and they are strict in one direction: invalid schema is worse than none, because it can disqualify a page from rich results it would otherwise have earned.
The checks
| Check | Severity | What it means |
|---|---|---|
schema.missing | Recommended | No structured data at all. Your result can only ever be a title, a URL and a description. |
schema.malformed_json | Critical | A JSON-LD block that does not parse. Everything in it is discarded, so this is worse than having none. |
schema.missing_required_property | Recommended | A declared type without the properties its rich result needs. |
schema.no_high_value_type | Recommended | Structured data present but only generic types that unlock nothing. |
schema.non_jsonld | Notice | Microdata or RDFa rather than JSON-LD. Valid, more fragile. |
schema.rich_result_eligible | Pass | A complete, valid type that qualifies for a rich result. |
schema.valid | Pass | Structured data present and parsing correctly. |
Use JSON-LD
Three formats exist. Microdata and RDFa mix the markup into your HTML, so
every template change risks breaking the data. JSON-LD sits in one
<script> tag, is the format Google documents and
recommends, and is the only one we treat as fully supported.
A JSON-LD block is self-contained, so it can be generated by whatever already knows the facts, your CMS or your product database, rather than by the template that happens to render them. That separation is why it stays correct as the design changes.
Types worth having
schema.no_high_value_type fires when a page has structured
data but only of a generic kind. WebPage is valid and tells a
search engine almost nothing it could not already see. These are the types
that unlock something.
| Type | Suits | Can produce |
|---|---|---|
Article, NewsArticle | Posts, news, editorial | Headline, image, author and date in the result |
Product | Anything with a price | Price, availability and star rating |
FAQPage | Pages that answer several questions | Expandable questions under your result |
HowTo | Step-by-step instructions | Numbered steps, sometimes with images |
Recipe | Recipes | Time, rating, calories and a photo |
Event | Anything with a date and a place | Dates and venue in the result |
LocalBusiness | Anywhere with an address | Hours, address and phone in local results |
Organization | Your home or about page | Knowledge panel details and logo |
BreadcrumbList | Anything nested | A path instead of a raw URL under your title |
Required properties
schema.missing_required_property means a type is declared but
is incomplete. A Product without an offers block
has no price to show, so it gets no rich result even though the markup
parses. The finding names the type and the property.
Only mark up what is actually on the page. Structured data claiming a rating or a price the visitor cannot see is a policy violation, and the penalty is losing rich results across the whole site rather than on the one page.
Checking your work
We validate the shape of the data. Whether Google chooses to show a rich result is a separate question, and it depends on the query as well as on your markup. Google's own Rich Results Test tells you what they would render today; this report tells you whether your markup gives them the chance.