Structured data is easy to add and easy to break. A theme update drops a comma, a plugin outputs a second Product block without a price, a template stops filling in the image. Nothing looks different on the page, but rich results quietly disappear.
This guide covers the two kinds of structured data errors, why testing one URL isn’t enough, and how to audit markup across a whole site.
What is structured data, and why does it break?
Structured data describes a page in the schema.org vocabulary so search engines can understand it and show rich results: prices and ratings, breadcrumbs, event dates, recipe details. Google’s introduction to structured data recommends JSON-LD, a <script type="application/ld+json"> block, because it’s the easiest to implement and maintain at scale.
Because the markup is usually generated by templates and plugins, errors are rarely one-offs. One broken template means every product, article or location page has the same problem.
What are the two kinds of structured data errors?
1. Invalid JSON-LD
A missing comma, an unescaped quote, a trailing bracket. JSON is strict: one syntax error and the whole block is ignored, along with every rich result it could have earned.
Common causes:
- quotes inside product names or descriptions not escaped by the template
- trailing commas after the last property
- two blocks concatenated by a plugin
- template variables left empty, producing
"price": ,
Fix: correct the JSON in the template, then re-test.
2. Missing required properties
The JSON is valid, but an item lacks a property Google requires for its rich result. Google’s documentation is explicit that you must include all the required properties for an item to be eligible. These are the required properties Crawlens checks for common types:
| Type | Required properties checked |
|---|---|
| Product | name, plus one of offers, review or aggregateRating |
| Offer | price or priceSpecification |
| Article / BlogPosting / NewsArticle | headline |
| BreadcrumbList | itemListElement |
| LocalBusiness (and subtypes like Restaurant, Store, Hotel) | name, address |
| Event | name, startDate, location |
| Recipe | name, image |
| VideoObject | name, thumbnailUrl, uploadDate |
| Review | itemReviewed, reviewRating, author |
| JobPosting | title, datePosted, description, hiringOrganization |
They’re minimums: each rich result type in Google’s documentation has its own page listing required and recommended properties, and that page is the reference to check before you change a template.
Fix: add the missing properties to the template, or remove markup for types you don’t want as rich results. Google notes it’s better to supply fewer but complete and accurate properties than many incomplete ones.
Does valid markup guarantee rich results?
No. Complete markup makes a page eligible; Google decides whether to show the rich result. Some types are also restricted: since 2023, FAQ rich results are only shown for well-known, authoritative government and health websites. FAQPage markup can still describe a page, but most sites won’t see the rich result.
How do you find structured data errors across a site?
Test templates with Google’s Rich Results Test. It’s the authoritative check for one URL: which rich results the page is eligible for, and what’s missing. Run it on one page per template.
Monitor with Search Console. The rich result reports show valid and invalid items Google has found, grouped by issue.
Crawl the whole site. Testing one URL per template misses pages where the data is different: a product with no price, an article with an empty headline, a location without an address. A crawler that parses structured data on every page finds those. Crawlens reads JSON-LD and microdata on every page and runs two checks:
| Check | What it flags | Severity |
|---|---|---|
| Invalid JSON-LD | JSON-LD blocks with syntax errors | Warning |
| Structured data missing required properties | Items missing the properties listed above | Warning |
Open any URL to see its parsed structured data alongside its other SEO fields, and filter the URL table to find every page from the same template.
A workflow that scales
- Crawl and sort structured data issues by URL pattern to find the templates behind them.
- Fix the template, not individual pages.
- Validate one fixed page per template in the Rich Results Test.
- Re-crawl and compare with the previous crawl: the issues should show up as fixed.
- Watch Search Console’s rich result reports as Google recrawls.
Checklist
- JSON-LD used where possible, one block per entity or a single
@graph - Every JSON-LD block parses (no syntax errors)
- Required properties present for every type you mark up
- Values match what’s visible on the page (prices, ratings, dates)
- One page per template checked in the Rich Results Test
- Whole site crawled for pages where template data is missing
- Rich result reports in Search Console monitored after fixes
Frequently asked questions
What is structured data?
Structured data is code that describes a page's content in a standard vocabulary (schema.org), such as a product's name, price and rating. Google uses it to understand the page and to show rich results.
Which structured data format does Google recommend?
Google recommends JSON-LD, because it's the easiest to implement and maintain at scale. Microdata and RDFa are also supported.
Does valid structured data guarantee rich results?
No. Including all required properties makes a page eligible for rich results, but Google decides whether to show them. Quality and accuracy of the markup still matter.
What happens if JSON-LD has a syntax error?
The whole block is ignored, so none of the structured data in it counts, and any rich results it would have earned are lost.
Can I still get FAQ rich results?
Since 2023, Google only shows FAQ rich results for well-known, authoritative government and health websites. FAQPage markup can still describe a page, but most sites won't get the rich result.