SEO
Optimize for search engine visibility and ranking.
Audit and generate sitemaps and discovery files — validate XML sitemap presence/size/extensions/lastmod, check robots.txt referencing and sitemap-to-canonical consistency, reconcile orphans against the link graph, and produce repaired sitemap entries plus a robots.txt Sitemap line.
Listed ·Updated
Install data from skills.sh
$ npx skills add https://github.com/hainrixz/claude-seo-ai --skill seo-sitemapsThis skill is one module of the author's Claude Code plugin and runs the plugin's shared scripts, which a single-skill install does not copy. For the full audit, install the plugin: run "/plugin marketplace add Hainrixz/claude-seo-ai", then "/plugin install claude-seo-ai@claude-seo-ai". That works in Claude Code only.
SEO Sitemaps is a Technical SEO skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves crawlability, indexing, site architecture, Core Web Vitals, and log-file analysis. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.
Sitemaps are the discovery contract you hand the crawler — they should list exactly the canonical, indexable URLs and nothing else. Schema rules for related markup: references/schema-tier1.md.
Work from the PageSnapshot named in your dispatch envelope: read parsed from <run_dir>/pages/<slug>.json plus <run_dir>/site/sitemaps.json (+ site/sitemap-urls.txt), <run_dir>/site/robots.json, and <run_dir>/crawl.json for orphan reconciliation and per-URL status; Grep pages/<slug>.html for verbatim evidence. Deterministic findings already emitted by audit.mjs are listed in <run_dir>/findings.deterministic.json — do not re-emit those ids; add model-judged findings only. If invoked directly with a URL/path and no snapshot exists, first run node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <target> --out "${CLAUDE_PLUGIN_DATA}/runs" and use the printed snapshot path.
Working from the PageSnapshot (parsed_rendered when render.used is not none, else parsed) plus site/sitemaps.json and site/robots.json:
/sitemap.xml, robots Sitemap: lines, sitemap index); parse as well-formed XML against the sitemaps.org schema.<=50,000 URLs and <=50MB uncompressed; if exceeded, expect a sitemap index splitting the set.image:, video:, and news: namespace entries (correct namespace declared, required child elements present).<lastmod> is valid ISO 8601 and reflects real last-modified time — not a build-time stamp on every URL (which trains crawlers to ignore it).Sitemap: line in robots.txt.noindex, redirected, 4xx/5xx, or non-canonical (self-referencing canonical only). Cross-check indexability with M-indexability.<loc>, accurate <lastmod> from observed last-modified data, valid image:/video: extension children where media exists) and add an absolute Sitemap: line to robots.txt. These are additive/deterministic diffs for fix.TODO placeholder per the schema fixable contract.<run_dir>/site/sitemaps.json and <run_dir>/site/robots.json — the crawl already walked the index, followed gzipped children and recorded the per-file errors.node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-robots-sitemap.mjs" --url <final_url> [--max-sitemaps 50] [--max-urls 100000] [--no-well-known] — method xml_parse: parses robots.txt + every declared and probed sitemap, checks well-formedness, size caps, namespace/extension validity, and the canonical/noindex consistency assertion. --sitemap <sitemap url> targets one file and --file <robots.txt> [--path /x] parses an offline robots file. This script has no --snapshot mode: sitemaps are site-level artifacts, not page snapshots.needs_api — never a false pass.Emit findings per schema/finding.schema.json. Examples:
M17.sitemap.missing — no XML sitemap found at /sitemap.xml or in robots.txt (status fail, severity 3, fixable: auto, axis search, confidence established).M17.robots.no_sitemap_line — sitemap exists but no Sitemap: line in robots.txt (status warn, severity 3, fixable: auto, axis search, confidence established).M17.sitemap.noindex_url — a <loc> in the sitemap points to a noindex/non-canonical URL (status fail, severity 3, fixable: proposed, axis search, confidence established).M17.sitemap.error_url — a <loc> the crawl fetched returned 4xx/5xx (status fail, severity 3, fixable: proposed, axis search, confidence established).M17.sitemap.redirected_url — a <loc> redirects instead of returning the final URL (status warn, severity 3, fixable: proposed, axis search, confidence established).M17.sitemap.missing_indexable_url — an indexable URL the crawl found is listed in no sitemap (status warn, severity 3, fixable: proposed, axis search, confidence directional — a well-linked page is discovered without a sitemap).M17.sitemap.lastmod_identical — every <loc> carries the same <lastmod>, so the file cannot distinguish a changed page from an unchanged one (status warn, severity 2, fixable: advisory, axis search, confidence directional).
Per-URL verdicts are only emitted for <loc> entries the crawl actually fetched; a URL that was never visited is left unreported rather than guessed. M17.sitemap.missing is also emitted as needs_api when sitemap discovery never ran in the run (--artifacts none / --no-sitemaps), which is a different fact from "no sitemap exists".
Platform-conditional ids. This module also emits 8 ids that fire only when profile.json names the platform (shopify, wordpress, nextjs, nuxt, astro, gatsby, hugo). They are indexed in references/routing.md § Platform-conditional finding ids and specified in references/platforms/<id>.md §10.Each finding: evidence.observed quotes the page/sitemap verbatim; verification.reproduce is the runnable command above; expected_impact is banded + confidence-tagged (no naked %).
<lastmod>, <priority>, and <changefreq> as hints, and <priority>/<changefreq> are largely ignored, so don't promise ranking lift from tuning them (label any such tactic low-magnitude/directional).Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.
$ npx skills add https://github.com/hainrixz/claude-seo-ai --skill seo-sitemaps -a claude-codeOptimize for search engine visibility and ranking.
Optimize Core Web Vitals (LCP, INP, CLS) for better page experience using field and lab evidence.
Analyze existing XML sitemaps or generate new ones with industry templates.
Audit and generate robots.txt and general crawl access for a page — verify robots.txt reachability and syntax, detect Disallow rules that block CSS/JS or important content, sanity-check crawl-delay, confirm a Sitemap directive, and assert overall crawl access for Googlebot/Bingbot.
Audit and generate hreflang annotations for multilingual sites — check reciprocity, BCP-47 validity, self-reference, x-default, hreflang/canonical conflicts, and <html lang> agreement, and emit reciprocal hreflang link sets.
Detects URL spaces that grow without limit, such as faceted navigation, calendar loops and session IDs, and recommends robots or canonical containment.