Claude-Skills schema-markup

install
source · Clone the upstream repo
git clone https://github.com/borghei/Claude-Skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/borghei/Claude-Skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/marketing/schema-markup" ~/.claude/skills/borghei-claude-skills-schema-markup && rm -rf "$T"
manifest: marketing/schema-markup/SKILL.md
source content

Schema Markup Implementation

Production-grade structured data implementation covering 20+ schema types, rich result eligibility rules, AI search optimization, and CMS-specific deployment patterns. Handles auditing existing markup, implementing new schema, and fixing validation errors.


Table of Contents


Operating Modes

Mode 1: Audit Existing Markup

  1. Extract all JSON-LD blocks from the page source
  2. Validate required vs recommended fields per schema type
  3. Cross-reference with Google's current rich result requirements
  4. Score completeness 0-100 per schema block
  5. Deliver prioritized fix list with corrected JSON-LD

Mode 2: Implement New Schema

  1. Identify page type and matching schema types
  2. Select primary + supporting schema combination
  3. Generate complete, copy-paste-ready JSON-LD populated with page content
  4. Advise on placement method (inline head, CMS plugin, server-side rendering)
  5. Test before deployment

Mode 3: Fix Validation Errors

  1. Map Google Search Console errors to specific fields
  2. Identify root cause (missing field, wrong format, content mismatch)
  3. Deliver corrected JSON-LD with change log
  4. Explain the fix to prevent recurrence

Schema Type Selection Matrix

Primary Schema by Page Type

Page TypePrimary SchemaSupporting SchemaRich Result Type
HomepageOrganizationWebSite + SearchActionSitelinks search box
Blog postArticleBreadcrumbList, Person (author), ImageObjectArticle card
How-to guideHowToArticle, BreadcrumbList, ImageObjectHow-to steps
FAQ pageFAQPageBreadcrumbListFAQ dropdowns
Product pageProductOffer, AggregateRating, Review, BreadcrumbListProduct card
Local businessLocalBusinessOpeningHoursSpecification, GeoCoordinates, PostalAddressLocal pack
Video pageVideoObjectArticle (if embedded)Video card
Category pageCollectionPageBreadcrumbList, ItemList--
Event pageEventOrganization, Place, OfferEvent listing
RecipeRecipeNutritionInformation, AggregateRatingRecipe card
CourseCourseOrganization, OfferCourse listing
Software/AppSoftwareApplicationOffer, AggregateRatingSoftware card
Job postingJobPostingOrganization, PlaceJob listing
Review pageReviewProduct or LocalBusiness, RatingReview snippet
Podcast episodePodcastEpisodePodcastSeries, PersonPodcast card
Author pagePersonsameAs linksKnowledge Panel
Company pageOrganizationsameAs links, ContactPointKnowledge Panel
Breadcrumb trailBreadcrumbList--Breadcrumb rich result
Site navigationSiteNavigationElement----
DatasetDatasetDataCatalogDataset search

Stacking Rules

Always add:

  • BreadcrumbList to any non-homepage if breadcrumbs exist on the page
  • Organization to the homepage (site-wide identity)

Common valid stacks:

  • Article + BreadcrumbList + Person + ImageObject (blog posts)
  • Product + Offer + AggregateRating + BreadcrumbList (product pages)
  • LocalBusiness + OpeningHoursSpecification + GeoCoordinates + Review (local pages)
  • HowTo + Article + BreadcrumbList + ImageObject (guides)

Never combine:

  • Product on a page that does not sell a product (Google penalizes misuse)
  • Multiple Organization blocks for the same entity (combine into one)
  • FAQPage on pages where the Q&A is not visible to users

Implementation Patterns

JSON-LD Format (Always Use This)

JSON-LD is the only format worth implementing. Google recommends it, it lives in the

<head>
, and it does not touch your HTML markup. Microdata and RDFa are legacy -- do not use them for new implementations.

Placement

<head>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Your Article Title",
    "author": {
      "@type": "Person",
      "name": "Author Name",
      "url": "https://example.com/authors/name",
      "sameAs": ["https://linkedin.com/in/name", "https://twitter.com/name"]
    },
    "datePublished": "2026-01-15",
    "dateModified": "2026-03-01",
    "image": "https://example.com/images/article-hero.jpg",
    "publisher": {
      "@type": "Organization",
      "name": "Company Name",
      "logo": {
        "@type": "ImageObject",
        "url": "https://example.com/logo.png"
      }
    }
  }
  </script>
</head>

Multiple

<script type="application/ld+json">
blocks per page are valid. Use separate blocks for unrelated schema types. Nest related types within one block.

Scope Rules

ScopeSchemaPlacement
Site-wideOrganization, WebSite + SearchActionHomepage template header
Per-pageArticle, Product, HowTo, FAQPagePage-specific head injection
Per-elementBreadcrumbListEvery non-homepage
ConditionalEvent, JobPostingOnly on pages with that content type

Rich Result Eligibility Rules

Google does not give rich results for all valid schema. These are the current requirements (as of 2026):

Article Rich Result

FieldRequiredNotes
headlineYesMust match visible page title
imageYesMust be crawlable, min 1200px wide
datePublishedYesISO 8601 format
dateModifiedRecommendedMust be >= datePublished
author.nameYesMust match a real person or organization
author.urlRecommendedLinks to author page
publisher.nameYes
publisher.logoYesMax 600x60px

Product Rich Result

FieldRequiredNotes
nameYesProduct name
imageYesProduct photo
offers.priceYesNumeric value
offers.priceCurrencyYesISO 4217 code
offers.availabilityRecommendedUse schema.org/InStock etc.
aggregateRating.ratingValueRecommendedNumeric
aggregateRating.reviewCountRecommendedInteger
reviewRecommendedAt least 1 review

FAQPage Rich Result

FieldRequiredNotes
mainEntityYesArray of Question items
Question.nameYesThe question text
Question.acceptedAnswer.textYesThe answer text
Visible on pageYesQ&A must be visible to users, not hidden

HowTo Rich Result

FieldRequiredNotes
nameYesTitle of the how-to
stepYesArray of HowToStep items
step.nameYesStep title
step.textYesStep description
imageRecommendedPer-step or overall
totalTimeRecommendedISO 8601 duration

AI Search Optimization

AI search systems (Google AI Overviews, Perplexity, ChatGPT Search, Bing Copilot) use structured data for content understanding, citation decisions, and entity recognition.

Why Schema Matters for AI Search

  1. Content type classification -- AI systems use
    @type
    to determine if content is a how-to, product listing, FAQ, or opinion piece
  2. Citation eligibility -- FAQPage and HowTo schema increase citation likelihood because AI systems can extract structured Q&A and step-by-step content directly
  3. Freshness signals --
    datePublished
    and
    dateModified
    help AI systems filter by recency
  4. Authority signals --
    author
    with
    sameAs
    links to known profiles boosts entity recognition
  5. Entity connection --
    Organization
    with
    sameAs
    links to Wikidata, LinkedIn, and social profiles strengthens entity resolution

AI Search Schema Playbook

ActionPriorityImpact
Add FAQPage schema to any page with Q&A content (even 3 questions)HighDirect citation in AI answers
Add author Person schema with sameAs to LinkedIn, Twitter, Google ScholarHighAuthor entity recognition
Add Organization with sameAs to Wikidata, LinkedIn, CrunchbaseHighBrand entity recognition
Keep dateModified accurate on every content updateMediumFreshness filtering
Add HowTo schema to process/tutorial contentMediumStep-by-step citation
Add SoftwareApplication schema to tool/product pagesMediumProduct recognition in AI answers

Knowledge Graph Strategy

Getting into Google's Knowledge Graph means your entity (person, company, product) is recognized and displayed in panels, AI answers, and cross-referenced searches.

Knowledge Graph Entry Requirements

  1. Wikidata entry -- Create or claim your entity on Wikidata.org
  2. Wikipedia presence -- A Wikipedia article dramatically increases KG entry probability
  3. Consistent NAP -- Name, Address, Phone must be identical across all citations
  4. sameAs network -- Organization schema must link to all official profiles

sameAs Best Practices

{
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://yourcompany.com",
  "sameAs": [
    "https://www.wikidata.org/wiki/Q12345678",
    "https://en.wikipedia.org/wiki/Your_Company",
    "https://www.linkedin.com/company/yourcompany",
    "https://twitter.com/yourcompany",
    "https://www.crunchbase.com/organization/yourcompany",
    "https://github.com/yourcompany"
  ]
}

Order of importance for sameAs links:

  1. Wikidata (strongest entity signal)
  2. Wikipedia
  3. LinkedIn
  4. Official social profiles
  5. Industry directories (Crunchbase, G2, Capterra)

CMS Deployment Guide

WordPress

  • Yoast SEO / Rank Math: Auto-generate Article, Organization, BreadcrumbList. Add custom schema via their blocks for HowTo and FAQPage.
  • Custom schema: Add via
    wp_head
    action hook or a custom plugin.
  • Avoid: Plugins that inject schema via JavaScript (Google may not render it).

Webflow

  • Per-page: Add custom code in page settings > Custom Code > Head
  • CMS-driven: Use Webflow CMS to generate dynamic JSON-LD via embedded code blocks with CMS field references
  • Site-wide: Add Organization schema in Project Settings > Custom Code > Head

Shopify

  • Product schema: Auto-generated by most themes. Verify it includes Offer and AggregateRating.
  • Article/Blog schema: Usually missing -- add manually via theme.liquid or a schema app.
  • Organization: Add to theme.liquid
    <head>
    section.

Next.js / Custom React

  • Server-side rendering: Generate JSON-LD in the page component and render in
    <Head>
    .
  • next-seo library: Provides schema components for common types.
  • Dynamic pages: Generate schema from your data layer, not hardcoded.

Static sites (Hugo, Jekyll, Gatsby)

  • Template-level: Add JSON-LD to layout templates using template variables.
  • Per-page: Use frontmatter data to populate schema fields dynamically.

Google Tag Manager (GTM)

  • Warning: GTM-injected schema is often NOT indexed by Google because it renders client-side after JavaScript execution.
  • Use only when: No other option exists (no CMS access, no dev resources).
  • Better alternative: Server-side injection via CMS or template engine.

Validation and Testing

Three-Layer Validation

Test every schema implementation with all three tools before deployment:

ToolURLWhat It Checks
Google Rich Results Testsearch.google.com/test/rich-resultsGoogle's parser, rich result eligibility
Schema.org Validatorvalidator.schema.orgFull spec compliance (broader than Google)
Google Search ConsoleEnhancements sectionReal-world errors at scale, post-deployment

Validation Workflow

  1. Pre-deployment: Rich Results Test + Schema.org Validator on the rendered HTML
  2. Post-deployment (day 1): Check page is crawled via URL Inspection tool in GSC
  3. Post-deployment (week 2-4): Check Enhancements section in GSC for errors at scale
  4. Ongoing (monthly): Monitor GSC Enhancements for new errors from content updates

Common Errors and Fixes

ErrorRoot CauseFix
Missing
@context
Schema block has no context declarationAdd
"@context": "https://schema.org"
Missing required fieldA required property is absentAdd the field with real content from the page
image
URL is relative
/image.jpg
instead of absolute URL
Use
https://example.com/image.jpg
dateModified
<
datePublished
Impossible date relationshipEnsure dateModified >= datePublished
Markup does not match page contentSchema claims content not visible to usersOnly add schema for content actually on the page
Deprecated propertyUsing old schema.org property namesCheck current spec at schema.org
Nested type conflictProduct inside Article incorrectlyKeep types flat or use proper @graph nesting
Date format wrongNot ISO 8601Use
"2026-01-15"
or
"2026-01-15T10:30:00Z"
Empty string values
"name": ""
passes syntax but fails semantics
Use real values, never empty strings
Array expected, single value given
mainEntity
needs array for FAQPage
Wrap in
[]
array brackets
Logo too largePublisher logo exceeds 600x60pxResize or use a different logo format
GTM injection not indexedClient-side renderingMove to server-side
<head>
injection

Audit Framework

Audit Scorecard (0-100)

DimensionWeightScoring
Required fields present40%-10 per missing required field
Recommended fields present15%-3 per missing recommended field
Rich result eligibility20%Binary: eligible or not
Content-markup match15%-5 per mismatch between schema and visible content
sameAs and entity signals10%-5 per missing major platform link

Priority Classification

PriorityCriteriaAction
P0 CriticalRequired field missing, blocks rich resultFix immediately
P1 HighRecommended field missing, reduces eligibilityFix this week
P2 MediumContent mismatch, deprecated propertyFix this month
P3 LowMissing sameAs link, optional enhancementAdd when convenient

Output Artifacts

ArtifactFormatDescription
Schema Audit ReportScored tablePer-page schema inventory, completeness score, priority fixes
JSON-LD ImplementationCopy-paste code blocksComplete schema for each page type, populated with placeholder values marked clearly
Error Fix LogBefore/after JSON-LDEach fix explained with root cause and prevention
AI Search Gap AnalysisRecommendation tableMissing entity markup, FAQPage opportunities, sameAs gaps
CMS Implementation GuideStep-by-step instructionsPlatform-specific deployment instructions
Rich Result Eligibility MatrixPage type x schema x eligibilityWhich pages qualify for which rich result types

Related Skills

  • seo-audit -- For full technical and content SEO audits spanning beyond structured data. Use when the problem is broader than schema.
  • site-architecture -- For URL structure and navigation. Use when architecture is the root cause, not schema.
  • programmatic-seo -- For sites with thousands of pages that need schema at scale. Schema patterns feed into pSEO template design.
  • content-creator -- For content creation. Use before implementing Article schema to ensure content quality.

Troubleshooting

ProblemLikely CauseFix
Schema passes validation but no rich results appearMissing required fields for rich result eligibility, or Google has not recrawledVerify against Google Rich Results Test (not just schema.org validator); request reindexing via GSC
FAQPage schema not generating FAQ dropdownsQuestions not visible to users on the page, or site lacks sufficient authorityEnsure Q&A content is visible in page HTML, not hidden behind tabs or JS toggles
Product schema shows "missing field" warnings in GSCRequired fields (price, availability, review) absent or malformedAdd all required Product + Offer fields; use ISO 4217 for currency, schema.org/InStock for availability
GTM-injected schema not being indexedClient-side rendering — Google may not execute GTM JavaScript for schemaMove schema from GTM to server-side
<head>
injection; GTM schema is unreliable for indexing
dateModified older than datePublishedData entry error or CMS auto-populating incorrectlyEnsure dateModified >= datePublished; audit CMS date field logic
Multiple conflicting Organization blocksDifferent plugins or templates injecting separate Organization schemaConsolidate into a single Organization block on the homepage; remove duplicates
Schema validated but Google shows "content mismatch"Schema claims content not actually visible to users on the pageOnly add schema for content physically present on the page — never fake or hidden content

Success Criteria

  • Rich result eligibility: 100% of content pages with appropriate schema types eligible for rich results per Google Rich Results Test
  • Validation pass rate: Zero errors in Google Search Console Enhancements reports across all schema types
  • Rich result CTR boost: Structured data pages achieving 20-35% higher CTR than non-structured pages (2026 benchmark from SearchPilot testing)
  • AI citation impact: FAQPage and HowTo schema present on all informational content pages to maximize AI extraction
  • Entity recognition: Organization schema with 5+ sameAs links deployed site-wide; brand appearing in Knowledge Graph
  • Coverage breadth: Schema implemented on 95%+ of indexable pages (BreadcrumbList minimum, content-specific types on relevant pages)
  • Freshness accuracy: dateModified updated within 24 hours of every content change across all Article schema

Scope & Limitations

In scope:

  • Schema type selection and JSON-LD implementation for 20+ schema types
  • Rich result eligibility verification and optimization
  • AI search visibility through structured data
  • Knowledge Graph entity optimization
  • Schema validation, testing, and error resolution
  • CMS-specific deployment guidance (WordPress, Webflow, Shopify, Next.js)

Out of scope:

  • Content creation for schema-eligible pages (use Content Production)
  • Technical SEO beyond structured data (use SEO Audit)
  • Microdata or RDFa implementations (JSON-LD only — Google's recommendation)
  • Custom schema.org extensions or vocabulary proposals
  • Server-side rendering implementation
  • CMS plugin development

Known limitations:

  • Google does not guarantee rich results even with valid schema — authority and content quality also factor in
  • GTM-injected schema is frequently not indexed — server-side deployment is required for reliability
  • Schema.org spec updates faster than Google's support — not all valid types generate rich results
  • Rich result types can be deprecated with minimal notice (e.g., HowTo rich results were restricted in 2023)
  • Structured data CTR impact varies by industry and SERP features present

Scripts

# Validate JSON-LD schema from a file or URL
python scripts/schema_validator.py --file schema.json --json

# Audit a page for schema coverage and completeness
python scripts/schema_validator.py --html page.html --verbose

# Generate JSON-LD templates for common page types
python scripts/schema_generator.py --type Article --title "My Post" --author "Jane" --json