Structured Data Regression Guard
Structured data fails quietly. A plugin update drops a required property, an editor leaves a field blank, and the rich result is gone long before the enhancement report registers a change. Validating one URL by hand at build time does not catch any of this, because the failure comes from data variation across the catalogue rather than from the template that was tested.
Use when rich results disappear without an obvious cause, or after any CMS, template, theme or plugin change that touches page markup.
The skill file
What you need first
- A list of templates that emit structured data and the schema type each one emits
- Rendered HTML, not template source, for at least 20 URLs per template chosen to include edge cases
- Search Console enhancement reports with error and warning counts by type
- The current Google documentation for required versus recommended properties for the result types you are targeting
Method
- 01 Extract the JSON-LD from rendered HTML rather than from the template file. What ships is what the CMS produced after the fields were populated, and the gaps live in the population, not the template.
- 02 Sample deliberately for absence: the item with no image, the one with no reviews, the cheapest and the most expensive, one out of stock, one with an unusually long name. A uniform sample passes and proves nothing.
- 03 Validate against the required properties for the specific rich result you want, not against schema.org in general. schema.org accepts a great deal that Google will never display.
- 04 Confirm the marked-up values match what a user can see on the page. Prices, ratings and availability that appear only in the markup are a manual action risk, and the mismatch is usually caused by a stale cache rather than by anyone intending it.
- 05 Record a baseline count per template and per type, then re-run the same extraction after every template, theme or plugin change. A falling count is the alert, and it fires weeks earlier than Search Console does.
- 06 Read the enhancement report as confirmation on a lag rather than as the detector. It tells you what Google has processed, which is useful for arbitration and useless for early warning.
- 07 When markup is valid and the rich result is still gone, stop before rewriting anything. Eligibility is not entitlement, Google withdraws result types by query and by site, and the check is whether competitors still show that result type for the same queries.
What this produces
A per-template structured data baseline with required-property coverage, a deliberately awkward sample set, and a re-runnable extraction that flags count drops after any markup change.
Where this goes wrong
- Validating the template in isolation, which passes while live pages fail on the fields nobody filled in
- Marking up values the page does not display, which is the most common cause of a structured data manual action
- Adding every property schema.org permits on the theory that more markup ranks better, which adds surface area for breakage and no eligibility
- Rewriting valid markup because a rich result vanished, when the result type itself was withdrawn for those queries
Use this skill in your own AI
The download is a plain markdown file with the name and trigger in its frontmatter. Where an assistant supports skills it can load itself, that frontmatter is what it reads to decide this one applies.
Questions about this skill
When is a baseline worth building rather than validating a URL in the Rich Results Test?
When rich results disappear without an obvious cause, or after any CMS, theme or plugin change that touches markup. A single validation at build time catches template faults and nothing else, because these failures come from data variation across the catalogue: a blank field on one product, a missing image on another. Those pass every single-URL check you run.
What do I need in hand before starting?
A list of templates and the schema type each emits, rendered HTML rather than template source for at least twenty URLs per template, the Search Console enhancement counts, and current Google documentation on required versus recommended properties. Sample uniformly and the run passes while proving nothing; you need the item with no image, the one with no reviews, one out of stock and one with a very long name.
What do I end up with, and which part gets used?
A per-template baseline with required-property coverage, a deliberately awkward sample set, and an extraction you can re-run after any markup change. The baseline count is what gets used: a drop against it is the alert, and it fires weeks before the enhancement report, which tells you what Google has processed and is therefore useful for arbitration and useless as a detector.
What is the mistake that ruins this, and what does it cost?
Marking up values the page does not display. Prices, ratings and availability that exist only in the JSON-LD are the most common cause of a structured data manual action, and the mismatch is usually a stale cache rather than anyone intending it. The related waste is rewriting valid markup because a rich result vanished, when Google had withdrawn that result type for those queries.
More in Technical SEO
Crawl budget audit
Use when a large site has pages that stay unindexed for weeks, or when log files show crawlers s...
Indexation gap analysis
Use when the number of pages you publish and the number Google indexes do not match, and you nee...
Core Web Vitals triage
Use when field data shows failing LCP, INP or CLS and you need to know which fix will actually m...
JavaScript rendering check
Use when a site renders content client-side and you need to confirm search engines actually see...