Common Structured Data Errors (and How to Fix Them)

The structured data errors Google's Rich Results Test and Search Console surface most — missing required fields, wrong value types, content mismatch, malformed JSON-LD, and deprecated types — and exactly how to debug each one.

First published: Jul 2, 2026 · Last updated: Jul 18, 2026 · Advanced
demand #20 in Structured Data#50 in On-Page#234 in Technical SEO#325 on the site

Structured data errors split into two kinds: parsing errors that break the markup entirely (malformed JSON-LD — trailing commas, unescaped quotes, a missing colon or brace) and eligibility errors that parse fine but fail a rich-result rule (missing required property, wrong value type, a colliding/duplicate @id, or markup describing content not visible on the page). A missing required property or unparsable JSON blocks the rich result outright; a missing recommended property is only a warning — the rich result usually still shows, less richly. Content mismatch is the one error class with real teeth: it's a policy violation that can trigger a manual action, not just silent ineligibility. A distinct failure mode isn't an error at all — a deprecated/unsupported type (FAQ, removed by May 2026) is valid markup that just no longer earns a visual. Debug with three different tools: the Rich Results Test (Google eligibility + SERP preview, single URL), the Schema Markup Validator (schema.org syntax/vocabulary, any type), and Search Console's Rich result report (site-wide, sampled, over time) — a pass in one answers only that tool's own question. Fixing errors restores rich-result eligibility — structured data isn't a ranking factor, so a fix wins back a SERP visual, not a ranking.

TL;DR — Structured data errors split into parsing errors (malformed JSON-LD — trailing commas, unescaped quotes, missing colons or braces — that break the markup so badly Google can’t determine the type; these land in the Unparsable structured data report) and eligibility errors (the markup parses but fails a rich-result rule: missing required property, wrong value type, or markup describing content not visible on the page). Errors can block; warnings are non-critical — a missing required property can kill feature eligibility, while a missing recommended one generally preserves eligibility but may limit available information. Content mismatch is the one class with teeth — a policy violation that can trigger a manual action, not silent ineligibility. A separate failure mode isn’t an error at all: a deprecated/unsupported type (FAQ, gone by May 2026) is valid markup that earns no visual. Debug with three different tools — Rich Results Test (Google eligibility + preview), Schema Markup Validator (schema.org syntax, any type), and Search Console’s Rich result report (site-wide, sampled). Structured data isn’t a ranking factor, so a fix wins back a SERP visual, not a ranking.

Evidence for this claim Google structured data must follow technical, quality, relevance, and feature-specific guidelines; valid syntax alone is insufficient for eligibility. Scope: Current Google structured-data policies. Confidence: high · Verified: Google Search Central: Structured data general guidelines Evidence for this claim Google recommends Rich Results Test for supported feature validation and URL Inspection for deployed-page status; warnings may preserve eligibility while errors can block it. Scope: Current Google structured-data validation workflow. Confidence: high · Verified: Google Search Central: Generate structured data with JavaScript

Errors vs. warnings — what actually blocks a rich result

Debug in order: make the markup readable, make the item eligible, then verify that it matches the page and policy. Source: Google Search Central

Step one checks whether the JSON-LD parses and fixes malformed syntax first. Step two checks required rich-result fields and valid value types; errors can block eligibility while warnings usually identify recommended fields. Step three checks whether the markup matches visible content and Google policy. Passing one layer does not prove the next, and valid markup does not guarantee display.

© Patrick Stox LLC · CC BY 4.0 ·

Before the taxonomy, get this distinction straight, because most guides use “error” as a catch-all and it causes needless panic.

  • An error means a required property is missing or invalid, or the markup is unparsable. The item can’t be a rich result until you fix it.
  • A warning means a recommended (not required) property is missing. The rich result can still show — just less completely.

Google’s own guidance leans toward accuracy over padding: “it is more important to supply fewer but complete and accurate recommended properties rather than trying to provide every possible recommended property with less complete, badly-formed, or inaccurate data.” In other words, don’t chase every warning by stuffing in half-accurate data — that can create worse problems than the warning it solves.

Worth knowing: even Google’s own reporting isn’t infallible here. In October 2022 Search Console had a bug where some issues were mislabeled as errors when they were actually warnings; Google’s fix moved them “from the critical error table to the warning table,” and clarified it was “strictly a reporting issue and did not affect whether or not a rich result could be displayed” (Search Engine Land, Oct 2022). The lesson: when in doubt, cross-check a flagged item against the Rich Results Test rather than trusting one report blindly.

Malformed JSON-LD — the “unparsable” errors

This is the most fundamental error class: the markup is broken badly enough that Google can’t even determine the intended type. Google files these in a separate Unparsable structured data report rather than a per-type report, because there’s no type to attribute the item to. Google’s own description: an item lands here because of a “serious syntax error” and “the intended type of structured data (Job, Event, and so on) could not be determined because of the parsing error.”

The usual culprits:

  • Trailing commas. A comma after the last property in an object or array is valid in JavaScript but invalid in JSON. This is the single most common way hand-written or template-concatenated JSON-LD breaks.
  • Unescaped quotes. A double quote inside a string value that isn’t escaped (\") terminates the string early. Google’s documented error for this is “Bad escape sequence in string.” Product names, review text, and descriptions with inch marks or quoted phrases are the classic offenders.
  • Missing colons or braces. Google documents these verbatim as “Parsing error: Missing ’:’” and “Parsing error: Missing ’,’ or ’}’” — usually a copy-paste or string-concatenation accident.
  • Wrong value type inside otherwise-valid JSON. Google’s “Incorrect value type” — e.g., a numeric field wrapped in quotes when a number was expected. (This shades into the eligibility errors below; when it’s bad enough to break parsing, it lands here.)

How to debug: strip to an empty object, rebuild piece by piece

Google’s own debugging tip for unparsable markup is refreshingly low-tech: “If you are having problems finding the error, try starting from an empty object, then add back content from your broken code piece by piece.” Paste the stripped-down object into the Rich Results Test, confirm it parses, then add properties back until it breaks — the last thing you added is your culprit.

One caution straight from Google: fixing a parsing error “might trigger additional warnings or errors that were hidden because the item could not be parsed at all.” One fix can unmask the next layer, so re-test after every change.

Missing required fields and wrong value types

Once the JSON parses, the next error class is about the contents: is every required property present, and is every value the right type?

Every Google-supported type has required properties (leave one out and you lose eligibility — that’s an error) and recommended ones (leave one out and you get a warning, but the rich result can still show). Search Console’s guidance is to open the report, “click an issue to see affected pages,” and use the “Why items are invalid” table to prioritize — errors first, then warnings.

Type mismatches — string where a number, URL, or date is expected

The classic eligibility bug: the value is there, but it’s the wrong type. A price field containing a date. A rating provided as "five stars" instead of a number. A URL field containing plain text. Google flags this as an invalid/unexpected value type.

Bing is worth a note here because, per its own structured data help documentation, it behaves differently: rather than erroring loudly, Bing’s crawlers are documented to ignore an annotation whose value type is wrong (a price field holding a date, an Event with no date, a Person with no name) rather than surface a red error. So don’t assume “no Bing error” means “correct” — Bing’s public documentation is thinner and less granular than Google’s (it doesn’t publish a per-type required-vs-recommended breakdown or a report as detailed as the Rich result report), and its tolerance for mismatched types is a silent-drop, not a loud-fail. Lean on Google’s Rich Results Test for the detailed error taxonomy.

Duplicate @id values and entity confusion

A subtler one that CMS plugins cause constantly: reusing the same @id for two different entities, or letting a plugin emit a fresh, colliding @id on every page instead of a stable one. This is not a parsing failure — the JSON itself is well-formed, so it doesn’t land in the Unparsable structured data report. @id is how JSON-LD nodes reference each other inside a @graph, so a collision is an entity-identity problem: it creates ambiguity about which node a reference actually points to. This gets worse on sites where multiple sources (the theme and a schema plugin) both auto-generate Organization, WebSite, and WebPage nodes.

The fix is a stable, unique @id per real-world entity — a URL-fragment identifier like https://example.com/#organization, reused consistently across the site, not regenerated per page. This is the mirror image of the canonicalization problem, where one stable identifier per real thing is likewise the whole game.

Nested-property errors (a missing name inside author)

Some required properties live inside other objects — author.name, aggregateRating.ratingValue. A missing one used to produce a vague error like Missing field "name" that could point anywhere on the page. In March 2022 Google added nested context so the same error now reads Missing field "name" (in "author") — a small change that makes these far easier to locate. (Anyone with an open “validate fix” request at the time had to re-trigger it, since the old issue IDs were retired.) If you see a nested-property error, read the parenthetical — it tells you exactly which object is short a field.

Content mismatch — the policy-violation error class

This is the one error class that deserves its own section, because the consequence is categorically worse than “no rich result.” Everything above is a technical problem. Content mismatch is a policy problem.

Google’s General Structured Data Guidelines are explicit on two points:

  • “Don’t mark up content that is not visible to readers of the page.”
  • “Your structured data must be a true representation of the page content.”

Marking up a 4.8-star rating that appears nowhere on the page, describing content that’s hidden or served only to crawlers, or labeling something as one thing when it’s really another — Google’s own examples include a sports live-streaming site labeling broadcasts as local events, and a woodworking site labeling instructions as recipes — all violate this.

Consequences: manual actions vs. silent ineligibility

A technical error costs you the rich result silently. A content-mismatch policy violation can cost you more: “If your page contains a structured data issue, it can result in a manual action. A structured data manual action means that a page loses eligibility for appearance as a rich result; it doesn’t affect how the page ranks in Google web search.” Manual actions show up in the Manual Actions report in Search Console — a place you never want to see a structured-data entry.

A common quieter version of this: templated, non-unique schema. John Mueller’s long-standing guidance is that “the structured data on a website, or on a page, should be specific to that particular page” (via Search Engine Journal). A site-wide Organization block copy-pasted with the same review count onto every page reads as a representation problem, not just a sloppy one.

Why validation isn’t enough. This is the answer to “my markup validates clean — why no rich result?” Validators check syntax and Google’s technical eligibility rules. They do not check Google’s content-quality and spam-policy layer. A syntactically perfect, policy-violating implementation can still be denied a rich result or hit with a manual action. Passing the Rich Results Test is necessary but not sufficient.

Using a deprecated or unsupported type

Here’s a failure mode that isn’t technically an “error” at all — and it trips people up because nothing turns red. Your markup is perfectly valid, it parses, it passes the schema.org validator, and yet no rich result will ever show, because Google turned the feature off.

Case study: FAQ rich results (deprecated 2026)

The timely example. Google added a deprecation notice to the FAQ rich result documentation, stating the feature “will no longer appear in Google Search starting May 7, 2026,” then in mid-2026 removed the FAQ documentation, Rich Results Test support, and Search Console reporting because “the FAQ rich result feature is no longer shown in Google Search results.”

The nuance that matters: FAQPage is still a valid schema.org type, and Google still parses it. The type isn’t “wrong.” It simply no longer earns the visual treatment. So the correct reaction to “is my FAQ schema now an error?” is no — leaving the markup in place doesn’t hurt anything; it just no longer buys you a SERP enhancement. Don’t panic-strip valid markup because the visual went away.

Other retired types

FAQ isn’t alone. Google has repeatedly retired rich-result types when analysis showed they weren’t widely used or didn’t add user value: HowTo rich results were removed from desktop back in 2023; a June 2025 batch retired seven more niche types (including Claim Review, Estimated Salary, Learning Video, Special Announcement, and Vehicle Listing); and Practice Problems structured data was deprecated starting January 2026. In each case the schema.org type usually remains valid — it just stops rendering.

How to tell if a type is still “live”

Check Google’s Search Gallery — the canonical list of types that currently earn rich results. If a type isn’t in the gallery, valid markup for it won’t produce a visual, no matter how clean it is. Re-check the gallery periodically; Google revises it often.

How to actually debug — three different tools

The single most common meta-mistake is conflating the tools. There are three, and they answer different questions.

Rich Results Test — Google eligibility + SERP preview

The Rich Results Test takes a single URL or a code snippet and checks the subset of markup Google uses for rich results, then previews how the result might appear. Google frames it as “an easy and useful tool for validating your structured data, and in some cases, previewing a feature in Google Search.” Use it during development and to spot-check a fix. It does not validate schema types Google doesn’t use for rich results.

Schema Markup Validator — schema.org syntax, any type

The Schema Markup Validator is run by schema.org, not Google. It checks general syntax and vocabulary compliance for any schema.org type — including ones Google doesn’t turn into rich results (e.g., Action schema). Passing it means your markup is well-formed schema.org; it does not mean you’re eligible for a Google rich result. This is the tool for “is my JSON-LD structurally correct?” independent of any search engine.

The two-tool trap: these are genuinely different tools, and passing one does not mean passing the other. The split has confusing history — Google tried to fully deprecate its old “Structured Data Testing Tool” in July 2020, reversed course after backlash that December, then refocused it into today’s schema.org-run validator by mid-2021. Plenty of old blog posts still point people at the dead tool name. For 2026: Rich Results Test for Google eligibility, Schema Markup Validator for schema.org syntax.

Search Console’s Rich result report — site-wide, sampled, over time

The Rich result report (the older nav and a lot of practitioners still call this the “Enhancements” reports) is the only one that’s ongoing and site-wide rather than a single-URL spot check. Google: “a valid item is an item that doesn’t have any critical issues and can appear on Google as a rich result. An invalid item has at least one critical issue preventing it from appearing as a rich result.” Two limitations to keep in mind: per-type reports only appear once Google finds valid markup of that type, and “the reports aren’t a comprehensive list of all detected items. They show a sample of detected items to help assess the quality of your structured data.” It’s a monitoring surface, not an exhaustive audit.

A pass answers only that tool’s own layer. Rich Results Test, Schema Markup Validator, and the Rich result report each check a different question, so a clean result in one tells you nothing about the other two — a pass in the Schema Markup Validator doesn’t mean Google’s Rich Results Test would pass, and neither proves what the Rich result report will show once Google actually crawls the deployed page.

Validating a fix (and why it takes a while)

Once you’ve fixed an issue, Google’s documented workflow is: fix on-site, confirm the page is crawlable (not blocked by robots.txt or noindex), spot-check with URL Inspection, then “click Validate fix on the issue’s details page to start Google’s validation process.” Set expectations on timing — Google says validation “can take two weeks or more, depending on crawl frequency.” It’s not instant; Google has to re-crawl the affected pages.

The one framing that keeps you sane

Fixing structured data errors is about rich-result eligibility, not rankings. As John Mueller put it (reported by Search Engine Roundtable, April 2025), “structured data won’t make your site rank better” — it’s for displaying the search features in Google’s gallery. So the payoff of a clean fix is a SERP visual (stars, breadcrumbs, price) and the click-through it can earn — never a ranking bump. Keep that straight and you’ll prioritize the right errors: the ones blocking a visual you actually want, not every warning in the report.

Where this sits

This is a deep-dive sibling under the Structured Data for SEO hub — the same sub-cluster as the schema-markup, JSON-LD, and rich-results deep dives. The error taxonomy here is the troubleshooting counterpart to those: they cover what to build, this covers what breaks and how to see it. For the broader picture of on-page signals it lives alongside — meta tags, header tags, image SEO — see the on-page SEO cluster.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.