seo-ahrefs
Ahrefs API analyst (extension). Reads referring domains, backlinks, organic keywords, and content explorer data via the tested…
Analyze existing XML sitemaps or generate new ones with industry templates. Validates format, URLs, and structure. Use when user says "sitemap", "generate sitemap", "sitemap issues", or "XML sitemap".
Claude Code
$ npx -y skills add AgriciDaniel/claude-seo --skill seo-sitemap --agent claude-code
Codex
$ npx skills add AgriciDaniel/claude-seo --skill seo-sitemap -a codex -y
Cursor
$ npx skills add AgriciDaniel/claude-seo --skill seo-sitemap -a cursor -y
Gemini CLI
$ npx skills add AgriciDaniel/claude-seo --skill seo-sitemap -a gemini-cli -y
GitHub Copilot
$ npx skills add AgriciDaniel/claude-seo --skill seo-sitemap -a github-copilot -y
OpenCode
$ npx skills add AgriciDaniel/claude-seo --skill seo-sitemap -a opencode -y
Windsurf
$ npx skills add AgriciDaniel/claude-seo --skill seo-sitemap -a windsurf -y
name: seo-sitemap description: > Analyze existing XML sitemaps or generate new ones with industry templates. Validates format, URLs, and structure. Use when user says "sitemap", "generate sitemap", "sitemap issues", or "XML sitemap". user-invocable: true argument-hint: "[url or generate]" license: MIT metadata: author: AgriciDaniel version: "2.6.0" category: seo
Discover candidates before reporting a sitemap missing, and read every sitemap found in the same run:
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run sitemap_discovery.py <url> --expand --jsonThe helper reads every bounded `Sitemap:` declaration in robots.txt, validates cross-host targets through the shared SSRF-safe fetch layer, and still probes common paths when a declared sitemap is stale or invalid. Use only entries in `found`; preserve declared failures as findings instead of treating a robots.txt line alone as proof that a sitemap works. Gzip sitemaps (`.xml.gz`) are inflated and classified by their content; such an entry carries `gzip: true`.
With `--expand` it also follows a sitemap index one level down to its child sitemaps and counts every entry. `expanded.files` has one object per sitemap file and `expanded.totals` sums them. Read these checks from the output; do not count or parse sitemap files by hand:
| Check | Fields in `expanded` | |-------|----------------------| | Valid XML, file reachable | `files[].valid`, `error`, `status_code`, `kind` | | Per-file limit: **≤50,000 URLs AND ≤50MB uncompressed** | `url_count`, `bytes`, `decompressed_bytes`; `findings` holds `over_50000_urls`, `over_50000_sitemaps` or `over_50mib_uncompressed` | | Index structure | `child_count`, child files carry `parent`; `nested_sitemap_index` in `findings` means an index lists another index (not allowed, not followed) | | `<lastmod>` present and valid **W3C Datetime** | `lastmod_count` against `url_count`, `lastmod_invalid_count` | | `<lastmod>` suspiciously uniform | `lastmod_identical_share` near 1.0 on a file with many URLs, with `lastmod_most_common`, `lastmod_oldest`, `lastmod_newest` | | URLs on another host than their sitemap | `cross_host_url_count`, `cross_host_url_examples`; a child file on another host has `cross_host` | | Duplicate or malformed URLs | `duplicate_count` (repeats inside one file), `totals.duplicates_across_files` (URL already listed by an earlier file; each entry is counted one way only), `invalid_loc_count`, `totals.unique_urls` against `totals.total_urls` | | Tokens or session IDs in listed URLs | `redacted_url_count`, `redacted_url_examples` (values replaced) | | Sitemap referenced in robots.txt | `source` is `robots.txt` (top-level `declared` lists every directive) | | Run cut short | `truncated`, `children.skipped`; rerun with a higher `--max-children` (default 50) |
Sitemap file URLs (`url`, `parent`) and `cross_host_url_examples` are printed without their query string (`query_redacted` refers to the file URL). Every page URL is counted, but only `--sample` distinct URLs per file (default 20) are printed in `sample_urls`. Those keep their query string and can be requested as printed. URLs in `redacted_url_examples` had a value replaced: report them, do not status-check them.
The script cannot judge these; check them yourself:
`redacted_url_examples` or `cross_host_url_examples`, which are not exact URLs)
(main content, structured data, links, not copyright/boilerplate edits). Google only honours `<lastmod>` when consistently and verifiably accurate, so warn when values are newer than the page's real content.
| Issue | Severity | Fix | |-------|----------|-----| | >50k URLs in single file | Critical | Split with sitemap index | | >50MB uncompressed single file | Critical | Split with sitemap index | | Non-200 URLs | High | Remove or fix broken URLs | | Noindexed URLs included | High | Remove from sitemap | | Redirected URLs included | Medium | Update to final URLs | | All identical lastmod | Low | Use actual modification dates | | Priority/changefreq used | Info | Can remove (ignored by Google) |
Google documents three subtypes with their own rules, validate per-subtype:
tags remain, `<image:image>` and `<image:loc>` (max **1,000** `<image:image>` per `<url>`). `<image:caption>`/`<image:geo_location>`/`<image:title>`/ `<image:license>` were deprecated (2022), flag as info-level removable.
`<video:title>`, `<video:description>`, plus `<video:content_loc>` or `<video:player_loc>`; mRSS also supported. Flag deprecated/removed tags (`<video:category>`, `<video:gallery_loc>`, `<video:price>`, `<video:tvshow>`, player autoplay/allow_embed) as info-level removable; recheck Google docs before citing a removal date.
50 MB checks; do not replace them when the `news:` namespace is present (https://developers.google.com/search/docs/crawling-indexing/sitemaps/news-sitemap). Include `<news:news>` only on articles from the **last 2 days**; required `<news:publication>`/`<news:name>`/`<news:language>`/`<news:publication_date>`/ `<news:title
Universal SEO skill for Claude Code. 26 sub-skills + 19 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, agent readiness (Lighthouse Agentic Browsing, WebMCP, llms.txt), backlinks, local SEO, e-commerce, international SEO, Google APIs, and PDF/Excel reporting. 9 optional extensions for live SEO data.
Ahrefs API analyst (extension). Reads referring domains, backlinks, organic keywords, and content explorer data via the tested…
AI image generation for SEO assets: OG/social preview images, blog hero images, schema images, product photography, infographics.…
Bing Webmaster Tools + IndexNow extension. Microsoft Copilot citations are fed by the Bing index; this skill makes Bing…
Live SEO data via DataForSEO MCP server: SERP analysis, keyword research (volume, difficulty, intent, trends), backlink profiles,…
Full-site crawling, scraping, and site mapping via Firecrawl MCP. Use when user says "crawl site", "map site", "full crawl",…
Matomo Reporting API extension. Self-hosted or Matomo Cloud analytics as a GA4 alternative or complement. Organic traffic,…
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…
Build an immersive scroll-scrubbed "fly through the world" landing page for any industry or brand using Higgsfield. As the…