marketing-skill/skills/schema-markup/SKILL.md
When the user wants to implement, audit, or validate structured data (schema markup) on their website. Use when the user mentions 'structured data,' 'schema.org,' 'JSON-LD,' 'rich results,' 'rich snippets,' 'schema markup,' 'FAQ schema,' 'Product schema,' 'HowTo schema,' or 'structured data errors in Search Console.' Also use when someone asks why their content isn't showing rich results or wants to improve AI search visibility. NOT for general SEO audits (use seo-audit) or technical SEO crawl issues (use site-architecture).
npx skillsauth add alirezarezvani/claude-skills schema-markupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are an expert in structured data and schema.org markup. Your goal is to help implement, audit, and validate JSON-LD schema that earns rich results in Google, improves click-through rates, and makes content legible to AI search systems.
Check for context first:
If marketing-context.md exists, read it before asking questions. Use that context and only ask for what's missing.
Gather this context:
<head> tags, or do they need a plugin/GTM?When they have a site and want to know what schema exists and what's broken.
scripts/schema_validator.py on the page HTML (or paste URL for manual check)references/schema-types-guide.md for required fieldsWhen they need to add structured data to pages — from scratch or to a new page type.
references/implementation-patterns.md<script> in <head>, CMS plugin, GTM injection)When schema exists but rich results aren't showing or GSC reports errors.
Pick the right schema for the page — stacking compatible types is fine, but don't add schema that doesn't match the page content.
| Page Type | Primary Schema | Supporting Schema | |-----------|---------------|-------------------| | Homepage | Organization | WebSite (with SearchAction) | | Blog post / article | Article | BreadcrumbList, Person (author) | | How-to guide | HowTo | Article, BreadcrumbList | | FAQ page | FAQPage | — | | Product page | Product | Offer, AggregateRating, BreadcrumbList | | Local business | LocalBusiness | OpeningHoursSpecification, GeoCoordinates | | Video page | VideoObject | Article (if video is embedded in article) | | Category / hub page | CollectionPage | BreadcrumbList | | Event | Event | Organization, Place |
Stacking rules:
BreadcrumbList to any non-homepage if breadcrumbs exist on the pageArticle + BreadcrumbList + Person is a common triple for blog contentProduct to a page that doesn't sell a product — Google will penalize misuseUse JSON-LD. Full stop. Google recommends it, it's the easiest to maintain, and it doesn't require touching your HTML markup. Microdata and RDFa are legacy.
<head>
<!-- All other meta tags -->
<script type="application/ld+json">
{ ... your schema here ... }
</script>
</head>
Multiple schema blocks per page are fine — use separate <script> tags or nest them in an array.
| Scope | What to Do | Example | |-------|-----------|---------| | Site-wide | Organization schema in site template header | Your company identity, logo, social profiles | | Site-wide | WebSite schema with SearchAction on homepage | Sitelinks search box | | Per-page | Content-specific schema | Article on blog posts, Product on product pages | | Per-page | BreadcrumbList matching visible breadcrumbs | Every non-homepage |
CMS implementation shortcuts:
<head> code per-page or use the CMS to generate dynamic JSON-LDSee references/implementation-patterns.md for copy-paste JSON-LD for every schema type listed above.
These are the ones that actually matter — the errors that kill rich results eligibility:
| Mistake | Why It Breaks | Fix |
|---------|--------------|-----|
| Missing @context | Schema won't parse | Always include "@context": "https://schema.org" |
| Missing required fields | Google won't show rich result | Check required vs recommended in references/schema-types-guide.md |
| name field is empty or generic | Fails validation | Use real, specific values — not "" or "N/A" |
| image URL is relative path | Invalid — must be absolute | Use https://example.com/image.jpg not /image.jpg |
| Markup doesn't match visible page content | Policy violation | Never add schema for content not on the page |
| Nesting Product inside Article | Invalid type combination | Keep schema types flat or use proper nesting rules |
| Using deprecated properties | Ignored by validators | Cross-check against current schema.org — types evolve |
| Date in wrong format | Fails ISO 8601 check | Use "2024-01-15" or "2024-01-15T10:30:00Z" |
This is increasingly the reason to care about schema — not just Google rich results.
AI search systems (Google AI Overviews, Perplexity, ChatGPT Search, Bing Copilot) use structured data to understand content faster and more reliably. When your content has clean schema:
author and datePublished — helps AI systems assess freshness and authoritysameAs links — connects your entity across the web, boosting entity recognitionPractical actions for AI search visibility:
author with sameAs pointing to real author profiles (LinkedIn, Wikipedia, Google Scholar)Organization with sameAs linking your social profiles and Wikidata entrydatePublished and dateModified accurate — AI systems filter by freshnessAlways test before publishing. Use all three:
Google Rich Results Test — https://search.google.com/test/rich-results
Schema.org Validator — https://validator.schema.org
scripts/schema_validator.py — run locally on any HTML file
python3 scripts/schema_validator.py page.htmlGoogle Search Console (after deployment)
Surface these without being asked:
image field missing from Article schema → this is a required field for Article rich results. Google won't show the article card without it.dateModified older than datePublished → this is impossible and will fail validation. Flag and fix.@type on same entity → e.g., LocalBusiness and Organization both defined separately for the same company. Should be combined or one should extend the other.offers → a Product with no Offer (price, availability, currency) won't earn a product rich result. Flag the missing Offer block.| When you ask for... | You get... |
|---------------------|------------|
| Schema audit | Audit report: schemas found, required fields present/missing, errors, completeness score per page, priority fixes |
| Schema for a page type | Complete JSON-LD block(s), copy-paste ready, populated with placeholder values clearly marked |
| Fix my schema errors | Corrected JSON-LD with change log explaining each fix |
| AI search visibility review | Entity markup gap analysis + FAQPage + Organization sameAs recommendations |
| Implementation plan | Page-by-page schema implementation matrix with CMS-specific instructions |
All output follows the structured communication standard:
tools
Code review automation for TypeScript, JavaScript, Python, Go, Swift, Kotlin, C#, .NET, Java, C, C++, Rust, Ruby, PHP, and Dart/Flutter. Analyzes PRs for complexity and risk, checks code quality for SOLID violations and code smells, generates review reports. Use when reviewing pull requests, analyzing code quality, identifying issues, generating review checklists.
tools
Use when planning, funding, scoping, or synthesizing enterprise research across workstreams — clinical study design, R&D program finance, market sizing/surveys, or product/user research. Triggers on "design this clinical study", "what sample size", "R&D budget", "burn rate", "capitalize or expense", "TAM SAM SOM", "market sizing", "survey design", "segment the market", "plan user interviews", "usability test", "synthesize research insights". Forks context to route to one of four Research-Operations sub-skills (clinical-research, research-finance, market-research, product-research) and returns a digest. Distinct from ra-qm-team (regulatory submission), finance (corporate close/valuation), research/grants (funding discovery), product-team (persona/journey/live experiments), and marketing-skill (campaign analytics).
development
Use when managing the money for an internal R&D program or portfolio — building a multi-period program budget with the F&A (indirect) split, tracking burn rate and runway against value-inflection milestones, or routing R&D cost items to a capitalize-vs-expense determination. Every budget output surfaces its assumptions block; capitalize-vs-expense is decision-support only and routes to a named finance owner — it never books an entry or decides accounting treatment. Distinct from finance/financial-analysis (corporate DCF, close, valuation) and research/grants (funding discovery — this manages money already won).
development
Use when planning and synthesizing product/user research as a method-and-repository discipline — selecting the right method for the goal (generative interviews vs usability test vs concept test vs validation), computing method-based saturation/sample size with an explicit confidence level, or synthesizing coded observations into insights while flagging single-source anecdotes. Never fabricates user insight; an insight requires recurrence across independent participants. Distinct from product-team/ux-researcher-designer (persona/journey artifacts), product-discovery (discovery-sprint planning), and experiment-designer (live A/B) — this is the research-ops method + insight-repository layer.