New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Detect existing JSON-LD structured data on a page

Schema Markup

by seranking · MIT license · ★ 147 on GitHub

Schema Markup cover

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…

---
name: seo-schema
description: 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".
---
> Example output: [examples/seo-schema-budgetbytes-slow-cooker-chicken-noodle-soup-20260514/SCHEMA.md](../../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

Overview

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.

Manual install (npx, ZIP)
Claude Codenpx skills add seranking/seo-skills --skill seo-schema -g -a claude-code
Claude Code (degit)npx degit seranking/seo-skills/skills/seo-schema#main ~/.claude/skills/seo-schema-3
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md9.4 KB
Read SKILL.md here
seranking/main1 file shown
SKILL.md
Show the full text140 lines
seo-schema-3/SKILL.md140 lines · 9.4 KB

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

  1. 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-firecrawl to 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's html for JSON-LD parsing in step 2 and metadata for 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."
  2. 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 skipped in 01-detected.md.
  3. 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, availability as plain text instead of schema.org URL, telephone not in international format.
  4. 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.
  5. Generate missing JSON-LD

    • For each detected intent without matching valid schema, load the relevant template from templates/:
      • article.json — for editorial/blog content
      • product.json — for product/SKU pages
      • local-business.json — for brick-and-mortar landing pages
      • faq-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.
  6. Validate generated JSON-LD

    • Re-run the same validation rubric from step 3 on the generated blocks.
    • Surface any required fields still marked {REPLACE: ...}.
  7. 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 html and 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. into 04-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.)
  8. 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.md is 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, image is 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-firecrawl on the URL and grep META.md for the expected @types.
1---
2name: seo-schema
3description: 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".
4---
5> Example output: [examples/seo-schema-budgetbytes-slow-cooker-chicken-noodle-soup-20260514/SCHEMA.md](../../examples/seo-schema-budgetbytes-slow-cooker-chicken-noodle-soup-20260514/SCHEMA.md)
6 
7# Schema Markup
8 
9Detect, 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.
10 
11## Prerequisites
12 
13- **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).
14- Optional: SE Ranking MCP server (used in step 7 for benchmarking competitor schema).
15- 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.
16 
17## Process
18 
191. **Fetch HTML** `mcp__firecrawl-mcp__firecrawl_scrape` (preferred) or degrade
20 - **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-firecrawl` to force the degraded path (generate-only mode) for credit conservation.
21 - **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's `html` for JSON-LD parsing in step 2 and `metadata` for canonical/robots cross-reference.
22 - **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.`
23 - 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."
24 
252. **Detect existing schema** (requires Firecrawl HTML from step 1)
26 - From the returned `html`: extract every `<script type="application/ld+json">` block.
27 - Parse each as JSON. Report syntax errors.
28 - List each detected `@type`.
29 - Also detect Microdata (`itemscope`/`itemprop`) and RDFa (`typeof`/`property`) — flag as legacy and recommend migration to JSON-LD (Google's stated preference).
30 - **If step 1 degraded:** skip this step. Record `Existing-schema detection skipped` in `01-detected.md`.
31 
323. **Validate against Google's spec**
33 - Load `references/google-rich-results.md`.
34 - For each detected `@type`, check required and recommended properties.
35 - Surface common errors: missing `@context`, dates not in ISO 8601, prices as numbers instead of strings, `availability` as plain text instead of schema.org URL, telephone not in international format.
36 
374. **Detect page intent**
38 - From URL pattern (`/blog/`, `/products/`, `/contact/`, `/how-to/`, `/faq/`).
39 - From `<title>` and `<h1>` tone.
40 - From content signals (numbered list of steps → HowTo; visible Q&A blocks → FAQPage; price + buy button → Product; address + hours → LocalBusiness).
41 - If multiple intents detected, generate schema for each.
42 
435. **Generate missing JSON-LD**
44 - For each detected intent without matching valid schema, load the relevant template from `templates/`:
45 - `article.json` — for editorial/blog content
46 - `product.json` — for product/SKU pages
47 - `local-business.json` — for brick-and-mortar landing pages
48 - `faq-page.json` — for explicit Q&A blocks (gov/health allowlist only — see references/google-rich-results.md)
49 - `breadcrumb-list.json` — for any page with breadcrumb navigation
50 - Fill template fields from the live HTML (title → headline, h2s → mainEntity questions, etc.).
51 - Mark any field that couldn't be auto-filled as `{REPLACE: ...}` so the user knows to complete it.
52 - **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.
53 
546. **Validate generated JSON-LD**
55 - Re-run the same validation rubric from step 3 on the generated blocks.
56 - Surface any required fields still marked `{REPLACE: ...}`.
57 
587. **Optional: benchmark against top SERP results** `DATA_getSerpResults` + `mcp__firecrawl-mcp__firecrawl_scrape`
59 - Identify the page's primary keyword (from `<title>` or user input).
60 - Pull top 10 organic results.
61 - **If Firecrawl available:** scrape each of the top 10 (10 Firecrawl credits). For each, parse JSON-LD blocks from the returned `html` and list detected `@type`s. This produces real schema data, not inferences from markdown.
62 - **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.` into `04-competitor-benchmark.md`.
63 - Surface "schema types used by 6+ of the top 10 that this page is missing." High-signal addition list. (Only emitted when benchmark ran.)
64 
658. **Synthesise** `SCHEMA.md`
66 - Validation report (existing schema, pass/fail per block).
67 - Recommended additions (with rationale linking back to step 4 detection or step 7 benchmark).
68 - Generated `<script>` blocks ready to paste.
69 
70## Output format
71 
72Create a folder `seo-schema-{target-slug}-{YYYYMMDD}/` with:
73 
74```
75seo-schema-{target-slug}-{YYYYMMDD}/
76├── 01-detected.md (existing schema, validation results)
77├── 02-recommended.md (which types this page should add and why)
78├── 03-generated/
79│ ├── article.jsonld
80│ ├── faq-page.jsonld
81│ └── ... (per generated type)
82├── 04-competitor-benchmark.md (only if step 7 ran)
83└── SCHEMA.md (deliverable: paste-ready blocks + install instructions)
84```
85 
86`SCHEMA.md` follows this shape:
87 
88```markdown
89# Schema Markup: {URL}
90 
91> Snapshot dated {YYYY-MM-DD}.
92 
93## Currently present
94- `Article` — valid ✓
95- `BreadcrumbList` — invalid ✗ (missing `position` on item 2)
96- ...
97 
98## Recommended additions
99- `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).
100- `HowTo` — ...
101 
102## Paste these into the `<head>` of the page
103 
104### FAQPage
105\`\`\`html
106<script type="application/ld+json">
107{
108 "@context": "https://schema.org",
109 "@type": "FAQPage",
110 "mainEntity": [...]
111}
112</script>
113\`\`\`
114 
115### ... (per generated block)
116 
117## Validation pass
118- All generated blocks parse cleanly ✓
119- All required fields filled ({n} {REPLACE: ...} placeholders remain — see below)
120- {REPLACE: ...} placeholders to fill manually:
121 - article.jsonld → `image` (need a hero image URL ≥ 1200×800)
122 - ...
123 
124## Install
1251. Copy each `<script>` block above.
1262. Paste into the `<head>` of the relevant page (or the global `<head>` template, gated by page type).
1273. Test with [Google's Rich Results Test](https://search.google.com/test/rich-results).
1284. Submit the URL to GSC for re-indexing if changes are critical.
129```
130 
131## Tips
132 
133- JSON-LD goes in `<head>` or top of `<body>`. Don't bury it.
134- Test every generated block in [Google's Rich Results Test](https://search.google.com/test/rich-results) before shipping. The validation in step 3/6 follows the published spec but Google's actual test is authoritative.
135- `references/google-rich-results.md` is 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.
136- **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.
137- For Article schema, `image` is required. If the page has no obvious hero image, leave the `{REPLACE: hero image URL}` placeholder rather than guessing.
138- 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.
139- **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-firecrawl` on the URL and grep `META.md` for the expected `@type`s.
140 
View all files on GitHub →

Details

License
MIT
Stars on the repo
★ 147
Checked
Source
seranking/seo-skills ↗
Creator
seranking · 4 listings
View creator

Similar skills

See all →
SkillThe Lighthouse Agentic Browsing fractionAgentic Browsing ReadinessAgriciDaniel/claude-seo · by AgriciDanielAudit 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. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).★ 17.4k GitHub starsSkillReferring domains, anchor text distributionBacklink Profile AnalysisAgriciDaniel/claude-seo · by AgriciDanielBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.★ 17.4k GitHub starsSkillConnect a CMS to notfair SEO tools/setup-cmsnowork-studio/notfair-plugin · by nowork-studioConnect a CMS to notfair SEO tools. Guides users through configuring WordPress, Strapi, Contentful, or Ghost — tests the connection, and writes credentials to .env.local. Once set up, seo-analysis automatically cross- references CMS content against Google Search Console data. Use whenever the user says "connect my CMS", "set up WordPress", "configure Strapi", "add Contentful", "connect Ghost", or "CMS setup". Also trigger if the user asks why no CMS data appears in a seo-analysis report.★ 3.9k GitHub starsSkillBacklink profile for any domainBacklink checkRyze-AI-Adgent/open-seo-mcp-skills · by Ryze-AI-AdgentBacklink profile for any domain — referring domains, authority, anchors, new/lost links, and a side-by-side vs a competitor. Use when asked "check my backlinks", "backlink profile of X", "who links to them", or "link gap vs competitor".★ 3.1k GitHub starsSkillOptimize Core Web Vitals for better page experienceCore Web Vitals optimizationaddyosmani/web-quality-skills · by addyosmaniOptimize Core Web Vitals (LCP, INP, CLS) for better page experience using field and lab evidence. Use when asked to "improve Core Web Vitals", "fix LCP", "reduce CLS", "optimize INP", "page experience optimization", or "fix layout shifts".★ 2.8k GitHub starsSkillRun an SEO page observation-action-review loopRun the SEO page looptsingyuai/growth-lab · by tsingyuaiRun an SEO page observation-action-review loop with persistent Memory by coordinating demand research, page creation, adversarial review, image generation, IndexNow submission, and performance review. Use when taking an SEO page from opportunity discovery through publication, measurement, iteration, or continuing a previous SEO loop from Memory.★ 2k GitHub stars

More from seranking

SkillAd-hoc web scraping, site mappingFirecrawl Orchestratorseranking/seo-skills · by serankingAd-hoc web scraping, site mapping, and full-site crawling via Firecrawl MCP. Returns raw HTML, parsed metadata (og:*, twitter:*, JSON-LD, canonical, robots), JS-rendered DOM, and screenshots that WebFetch cannot. Distinct from the SE Ranking skills (which give keyword/traffic/SERP data) and from WebFetch (which gives markdown prose only). Use when the user says "scrape this page", "crawl this site", "map this site", "find all pages on", "get the OG tags", "get the JSON-LD", "render this JS-heavy page", or any task where raw HTML head metadata, structured-data scripts, or post-JS DOM are the actual deliverable. Also invoked as a sub-step from other skills that need raw HTML.★ 147 GitHub starsSkillImage SEO audit for a URL or domainseranking/seo-skills · by serankingImage SEO audit for a URL or domain. Pulls raw image inventory via Firecrawl, then audits alt-text quality, modern-format coverage (WebP / AVIF), responsive sizing (`srcset` / `sizes`), lazy-loading and LCP signals (`loading`, `fetchpriority`, `decoding`), CLS-safe dimensions, descriptive file names, and `ImageObject` JSON-LD. Optional PageSpeed Insights cross-reference for real byte-saving estimates. Produces a prioritised remediation list plus paste-ready picture-element markup and `ImageObject` schema. Distinct from `seo-technical-audit` (which surfaces audit-flagged image issues at the site level) and from `seo-schema` (which generates page-level JSON-LD but not image-specific markup). Use when the user asks for "image SEO", "image audit", "alt-text audit", "WebP coverage", "AVIF", "responsive images", "lazy loading", "CLS images", "image schema", "ImageObject", "image rich results", "licensable images", or "optimise images".★ 147 GitHub starsSkillSE Ranking API Integration Architectseranking/seo-skills · by serankingSE Ranking API integration architect. Covers the whole SE Ranking surface — the Data API (keyword research, backlinks, domain & competitor analysis, SERP, website audit, AI Search) and the Project API (rank tracking, project/keyword/backlink management, marketing plan, sub-accounts, AIRT prompts). Answers any "how do I…" question about endpoints, parameters, JSON schemas, credit cost, rate limits, or auth, and produces ready-to-paste cURL / Python / TypeScript / MCP-tool-call recipes. With explicit confirmation it also wires up Project API state — creating projects, adding keywords, configuring audits, setting up AIRT prompt groups. Pulls live tool schemas from the connected MCP. Unlike the analysis skills (briefs, audits, reports), seo-api produces integration recipes and wired-up state. Use when the user asks how to use the SE Ranking API, which endpoint returns a metric, how to build a rank tracker, for Postman / cURL / Python recipes, or how to integrate with Looker / n8n / Make.★ 147 GitHub stars