Structured Data Audit and Remediation
Last reviewed:
Schema work is usually mishandled one of two ways: ignored because the page ranks anyway, or treated as a layer that can say whatever the page owner wishes were true. This is the middle path — accurate, page-type-correct markup that supports search systems instead of confusing them.
Use this when rich-result behavior is inconsistent, schema is clearly stale or duplicated, or a page’s entity markup no longer matches what users and crawlers can verify on the page. Preconditions: a representative URL set, access to template/CMS markup, at least one validator, and a way to inspect rendered source if schema is injected client-side.
Define the intended page type and outcome
Schema selection starts with the page’s job, not a plugin menu.
- Label each tested URL as article, product, FAQ, local page, organization page, or another real page type
- Document the markup the page should carry based on that type and its visible content
- Separate required business outcomes from fantasy outcomes — not every valid page is eligible for a rich result
- If the page is doing multiple jobs badly, fix the page model before adding more schema types
Inventory what schema is actually present
Many broken implementations fail because nobody knows which system is generating what.
- Extract all JSON-LD, Microdata, and RDFa from representative URLs
- Identify whether schema comes from the template, CMS plugin, tag manager, or a custom component
- Note duplicates, overlapping entities, or conflicting page-type markup across sources
Decision point: if the same entity is emitted by multiple systems, choose one canonical owner before editing properties.
Validate syntax and parsing first
Syntax errors are the bluntest failure mode, so remove them early.
- Run validator checks to catch invalid JSON, broken nesting, and unsupported property types
- Check rendered output as well as template source if schema is assembled client-side
- Fix parse errors before debating strategy — unparsable markup is dead markup
- Keep warnings separate from errors so critical faults don’t hide in noise
Compare schema against visible content
Schema should describe the page the user sees, not the page marketing wishes existed.
- Check whether names, descriptions, authors, dates, prices, ratings, and availability match visible page content exactly where they should
- Remove FAQ, review, or product markup that visible page evidence doesn’t support
- Confirm breadcrumb markup reflects the actual navigational hierarchy
- If the page content is wrong, fix the page first, then update the schema to match
Review the entity graph and identifiers
Broken identity wiring makes otherwise valid schema noisy.
- Check
@idvalues,sameAsreferences, and parent-child relationships across Organization, Person, Article, Product, and Breadcrumb entities - Make sure repeated entities reuse the same stable identifiers rather than minting new ones per page
- Confirm author entities resolve to real author pages or corroborating sources
- Remove orphan entities that are never referenced or that contradict the site’s main organization identity
Fix page-type properties and trim junk markup
Good schema is usually simpler after the audit, not bigger.
- Populate the properties that materially improve page-type clarity and eligibility
- Remove speculative properties, copied examples, and deprecated patterns that add noise without support — see Schema to Avoid for the current deprecated/gated list
- Do not stack multiple competing page types on a single page unless it genuinely supports that model
- Use the smallest accurate graph that fully describes the page
Roll the fix out by template, not by hero URL
One clean page on a dirty template changes almost nothing.
- Map which templates share the broken schema pattern and group fixes accordingly
- Test at least one page with edge-case content before release, so optional-field logic doesn’t break production
- Version the template change so regressions trace to a release, not to memory
- When a plugin is the source of bad markup, decide whether to reconfigure, override, or remove it
Validate again with eligibility in mind
Passing a validator is necessary and still not the same as earning a rich result.
- Re-run syntax and rich-result tests after deployment on representative pages
- Check that the rendered page exposes the final schema exactly once
- Confirm the page also meets the visible-content and quality conditions the markup needs to matter
- Document which pages are expected to become eligible and which are simply better-described now
Monitor for regressions and false confidence
Schema problems recur whenever templates drift or content teams change fields without understanding the graph.
- Spot-check high-value templates after CMS changes, redesigns, or plugin updates
- Watch for new duplicate entities introduced by experiments, embeds, or tag-manager scripts
- Keep a small schema QA checklist in release workflows for affected templates
- Don’t infer success from a validator screenshot alone — check live pages and actual eligibility signals
Decision point: the markup is valid but the page type is wrong → change the schema model, not just the properties. No rich result appears after the fix → check page quality and eligibility rules before blaming the markup again.
Watch for these failure modes
- Adding every schema type a plugin offers because more looks impressive in a test tool
- Marking up reviews, FAQs, or pricing that are absent, stale, or contradicted by the page
- Letting organization, person, and page entities mint conflicting
@idvalues across templates - Treating validator success as proof of rich-result eligibility
- Fixing one showcase page manually while the underlying template stays broken