seo-schema
Skill201 starsChanged 5 months agoMITView on GitHub
Detect existing JSON-LD structured data on a page, validate against Google's rich-result requirements, and generate missing schema markup (Article, Product, LocalBusiness, FAQPage, BreadcrumbList). Produces paste-ready JSON-LD script blocks. Use when the user asks for "schema markup", "structured data", "JSON-LD", "rich results", "schema validation", or "fix the schema on this page".
38 other projects use a version of this, 1 of them edited.
Adopted by
Most recently taken up by
- alpit-patel/seo-aeo-geo-kittheir own version, first seen Nov 8, 2026
- Littlpinguin/marketing-cockpit-templatetheir own version, first seen Nov 3, 2026
- Gallyan/trouvabletheir own version, first seen Nov 1, 2026
- zhtyyx/codex-seotheir own version, first seen Nov 1, 2026
- joaoguirunas/team-ostheir own version, first seen Oct 21, 2026
- DoddleHQ/doddle-seo-geo-skillstheir own version, first seen Oct 20, 2026
Used with
Projects with it also use seo-agentic, seo-image-gen and 6 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AgriciDanielSkillseo-agentic
Audit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Use when the user asks whether AI agents can use or browse the site, or about llms.txt or WebMCP. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).
Also in 5 projects that use this
timruebenachSkillseo-image-gen
AI image generation for SEO assets: OG/social preview images, blog hero images, schema images, product photography, infographics. Powered by Gemini via nanobanana-mcp. Requires banana extension installed. Use when user says \"generate image\", \"OG image\", \"social preview\", \"hero image\", \"blog image\", \"product photo\", \"infographic\", \"seo image\", \"create visual\", \"image-gen\", \"favicon\", \"schema image\", \"pinterest pin\", \"generate visual\", \"banner\", or \"thumbnail\".
Also in 12 projects that use this
timruebenachSkillseo-cluster
SERP-based semantic topic clustering for content architecture planning. Groups keywords by actual Google SERP overlap (not text similarity), designs hub-and-spoke content clusters with internal link matrices, and generates interactive visualizations. Optionally executes content creation if claude-blog is installed. Use when user says "topic cluster", "content cluster", "semantic clustering", "pillar page", "hub and spoke", "content architecture", "keyword grouping", or "cluster plan".
Also in 12 projects that use this
mangollcSkillseo-backlinks
Backlink analysis and link building strategy: competitor backlink profiling, outreach plan generation, monthly SEO reporting framework, toxic link identification, link opportunity scoring, and unlinked mention discovery.
Also in 15 projects that use this
- +4 more from timruebenach
Other versions38 projects use a version of this.
Word for word · 0
None found.
Edited · 1
- amirjahfar1/automate-seo-with-claude★ 296% same
Wrote their own version · 37
- AgriciDaniel/claude-seo★ 20ksame name
- zhtyyx/codex-seo★ 152same name
- coopersimson96/ai-content-system★ 17same name
- ZachArticulateV/designer-pro-and-seo★ 10same name
- Littlpinguin/marketing-cockpit-template★ 9same name
- bestdeejay-design/agent-skills★ 6same name
- joaoguirunas/team-os★ 6same name
- oegeyilmaz9/seo-aeo-geo-ultimate★ 6same name
- 01clauding/claude-seo-skill★ 4same name
- avalonreset/legends-seo-dungeon★ 4same name
27 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository31 other files it gives its agents.
- ai-search-gaps-to-social-campaignSkill
- client-onboarding-proposalSkill
- local-gmb-visibilitySkill
- seo-adsSkill
- seo-agency-landing-pageSkill
- seo-ai-search-share-of-voiceSkill
- seo-ai-social-reportSkill
- seo-apiSkill
- seo-backlink-gapSkill
- seo-backlinks-profileSkill
- seo-competitor-gap-analysisSkill
- seo-competitor-pagesSkill
- seo-content-auditSkill
- seo-content-briefSkill
- seo-driftSkill
- seo-firecrawlSkill
- seo-gaps-to-social-campaignSkill
- seo-geoSkill
- seo-googleSkill
- seo-hreflangSkill
- seo-imagesSkill
- seo-keyword-clusterSkill
- seo-keyword-nicheSkill
- seo-localSkill
- seo-pageSkill
- seo-planSkill
- seo-sitemapSkill
- seo-subdomainSkill
- seo-sxoSkill
- seo-technical-auditSkill
- site-audit-to-social-distributionSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 2 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 36 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 41
If multiple intents detected, generate schema for each.
- Very specific: line 72
Create a folder seo-schema-{target-slug}-{YYYYMMDD}/ with:
- Distinctive: line 134
Test every generated block in Google's Rich Results Test before shipping.
“Common” is measured: kept by at least 6 in 10 of the 36 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Example output: examples/seo-schema-budgetbytes-slow-cooker-chicken-noodle-soup-20260514/SCHEMA.md
Schema Markup
Detect, validate, and generate Schema.org JSON-LD for a page. Output is paste-ready <script> blocks the user can drop into their CMS or page template, plus a validation report on what's currently present and what's broken.
Prerequisites
- Required for detect/validate paths:
mcp__firecrawl-mcp__firecrawl_scrape(raw HTML access). WebFetch returns markdown only — every<script type="application/ld+json">block is stripped before the skill ever sees it. Without Firecrawl, the skill can still generate new schema from intent detection (steps 4–6) but cannot detect or validate what's already on the page (steps 2–3, 7). - Optional: SE Ranking MCP server (used in step 7 for benchmarking competitor schema).
- User provides: a target URL. Optionally a hint about page intent ("this is a product page", "this is a how-to") if the URL pattern doesn't make it obvious.
Process
- Fetch HTML
mcp__firecrawl-mcp__firecrawl_scrape(preferred) or degrade- Cost note. Firecrawl: 1 credit for the target URL, +10 credits if step 7 (competitor benchmark) runs (1 per top-10 SERP result). User may pass
--no-firecrawlto force the degraded path (generate-only mode) for credit conservation. - If Firecrawl available: scrape the target URL. For SPAs, pass
waitFor: 2000(or a CSS selector for the main content) so the JS-rendered DOM is captured. Use the response'shtmlfor JSON-LD parsing in step 2 andmetadatafor canonical/robots cross-reference. - If Firecrawl unavailable: skip steps 2, 3, and 7 entirely (they all need raw HTML). Steps 4–6 still run — the skill becomes "generate-only", producing recommended JSON-LD blocks from intent detection without comparing to what's on the page. Surface clearly in
SCHEMA.md:Existing-schema detection: skipped — Firecrawl required (WebFetch returns markdown only). Install via extensions/firecrawl/install.sh. - Even with Firecrawl: if JSON-LD blocks appear only after JS render, flag in the output: "JS-rendered schema may not be detected by all crawlers — server-side render JSON-LD where possible."
- Cost note. Firecrawl: 1 credit for the target URL, +10 credits if step 7 (competitor benchmark) runs (1 per top-10 SERP result). User may pass
- Detect existing schema (requires Firecrawl HTML from step 1)
- From the returned
html: extract every<script type="application/ld+json">block. - Parse each as JSON. Report syntax errors.
- List each detected
@type. - Also detect Microdata (
itemscope/itemprop) and RDFa (typeof/property) — flag as legacy and recommend migration to JSON-LD (Google's stated preference). - If step 1 degraded: skip this step. Record
Existing-schema detection skippedin01-detected.md.
- From the returned
- Validate against Google's spec
- Load
references/google-rich-results.md. - For each detected
@type, check required and recommended properties. - Surface common errors: missing
@context, dates not in ISO 8601, prices as numbers instead of strings,availabilityas plain text instead of schema.org URL, telephone not in international format.
- Load
- Detect page intent
- From URL pattern (
/blog/,/products/,/contact/,/how-to/,/faq/). - From
<title>and<h1>tone. - From content signals (numbered list of steps → HowTo; visible Q&A blocks → FAQPage; price + buy button → Product; address + hours → LocalBusiness).
- If multiple intents detected, generate schema for each.
- From URL pattern (
- Generate missing JSON-LD
- For each detected intent without matching valid schema, load the relevant template from
templates/:article.json— for editorial/blog contentproduct.json— for product/SKU pageslocal-business.json— for brick-and-mortar landing pagesfaq-page.json— for explicit Q&A blocks (gov/health allowlist only — see references/google-rich-results.md)breadcrumb-list.json— for any page with breadcrumb navigation
- Fill template fields from the live HTML (title → headline, h2s → mainEntity questions, etc.).
- Mark any field that couldn't be auto-filled as
{REPLACE: ...}so the user knows to complete it. - Don't generate
HowTo— Google retired HowTo rich results in September 2023 (mobile + desktop). The schema can still ship for semantic clarity, but expect zero rich-result uplift; flag this in the recommendation rationale rather than treating HowTo as a live option.
- For each detected intent without matching valid schema, load the relevant template from
- Validate generated JSON-LD
- Re-run the same validation rubric from step 3 on the generated blocks.
- Surface any required fields still marked
{REPLACE: ...}.
- Optional: benchmark against top SERP results
DATA_getSerpResults+mcp__firecrawl-mcp__firecrawl_scrape- Identify the page's primary keyword (from
<title>or user input). - Pull top 10 organic results.
- If Firecrawl available: scrape each of the top 10 (10 Firecrawl credits). For each, parse JSON-LD blocks from the returned
htmland list detected@types. This produces real schema data, not inferences from markdown. - If Firecrawl unavailable: skip the benchmark — WebFetch's markdown strips all schema blocks, so any "detection" from it would be guesswork. Write
Competitor benchmark skipped — Firecrawl required to read JSON-LD from competitor pages.into04-competitor-benchmark.md. - Surface "schema types used by 6+ of the top 10 that this page is missing." High-signal addition list. (Only emitted when benchmark ran.)
- Identify the page's primary keyword (from
- Synthesise
SCHEMA.md- Validation report (existing schema, pass/fail per block).
- Recommended additions (with rationale linking back to step 4 detection or step 7 benchmark).
- Generated
<script>blocks ready to paste.
Output format
Create a folder seo-schema-{target-slug}-{YYYYMMDD}/ with:
seo-schema-{target-slug}-{YYYYMMDD}/
├── 01-detected.md (existing schema, validation results)
├── 02-recommended.md (which types this page should add and why)
├── 03-generated/
│ ├── article.jsonld
│ ├── faq-page.jsonld
│ └── ... (per generated type)
├── 04-competitor-benchmark.md (only if step 7 ran)
└── SCHEMA.md (deliverable: paste-ready blocks + install instructions)SCHEMA.md follows this shape:
# Schema Markup: {URL}
> Snapshot dated {YYYY-MM-DD}.
## Currently present
- `Article` — valid ✓
- `BreadcrumbList` — invalid ✗ (missing `position` on item 2)
- ...
## Recommended additions
- `FAQPage` — page has 6 visible Q&A blocks but no FAQ schema. Adding this is eligible for FAQ rich results (subject to Google's 2024+ tightening — see references/google-rich-results.md).
- `HowTo` — ...
## Paste these into the `<head>` of the page
### FAQPage
\`\`\`html
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [...]
}
</script>
\`\`\`
### ... (per generated block)
## Validation pass
- All generated blocks parse cleanly ✓
- All required fields filled ({n} {REPLACE: ...} placeholders remain — see below)
- {REPLACE: ...} placeholders to fill manually:
- article.jsonld → `image` (need a hero image URL ≥ 1200×800)
- ...
## Install
1. Copy each `<script>` block above.
2. Paste into the `<head>` of the relevant page (or the global `<head>` template, gated by page type).
3. Test with [Google's Rich Results Test](https://search.google.com/test/rich-results).
4. Submit the URL to GSC for re-indexing if changes are critical.Tips
- JSON-LD goes in
<head>or top of<body>. Don't bury it. - Test every generated block in Google's Rich Results Test before shipping. The validation in step 3/6 follows the published spec but Google's actual test is authoritative.
references/google-rich-results.mdis dated. If it's >6 months old when you run this skill, flag staleness in the output and recommend the user verify against current docs.- Don't mark up content that isn't visibly on the page. Google penalises hidden-content schema. If a page doesn't actually have FAQs visible, don't generate FAQPage schema.
- For Article schema,
imageis required. If the page has no obvious hero image, leave the{REPLACE: hero image URL}placeholder rather than guessing. - The skill is read-mostly on the SE Ranking side: zero SE Ranking credits unless step 7 (competitor benchmark) is requested — that adds ~5–10 SE Ranking credits for
DATA_getSerpResults. Firecrawl costs are separate: 1 credit for the target URL, +10 credits when step 7 runs. - Verify after deploy: once the generated schema is pasted into your CMS and re-deployed, re-run this skill on the same URL — the new run's "Currently present" section reflects the live state and confirms the schema actually rendered (vs sitting in the CMS but not yet pushed). Ad-hoc alternative: invoke
seo-firecrawlon the URL and grepMETA.mdfor the expected@types.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

