seo-sitemaps
Skill81 starsChanged 2 months agoMITView on GitHub
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. Module M17. Feeds the Search SEO score.
In this repository33 other files it gives its agents.
- auditSkill
- compareSkill
- fixSkill
- geoSkill
- scoreSkill
- seo-agent-readinessSkill
- seo-ai-crawlersSkill
- seo-ai-discoverySkill
- seo-core-web-vitalsSkill
- seo-crawlabilitySkill
- seo-crawl-renderSkill
- seo-ecommerceSkill
- seo-eeatSkill
- seo-entity-linkingSkill
- seo-fix-applySkill
- seo-freshnessSkill
- seo-geo-answerblocksSkill
- seo-geo-factdensitySkill
- seo-headings-structureSkill
- seo-images-mediaSkill
- seo-indexabilitySkill
- seo-internal-linkingSkill
- seo-internationalSkill
- seo-localSkill
- seo-meta-onpageSkill
- seo-mobileSkill
- seo-orchestratorSkill
- seo-platform-detectSkill
- seo-renderingSkill
- seo-schema-jsonldSkill
- seo-scoreSkill
- seo-social-cardsSkill
- seo-vertical-detectSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 22
Sitemap-to-canonical consistency: no URL in the sitemap is noindex, redirected, 4xx/5xx, or non-canonical (self-referencing canonical only).
- Very specific: line 34
When the required data tier (live fetch of sitemap/robots, or the resolved link graph) is unavailable, status is needs_api — never a false …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
<!-- Portions Copyright (c) 2026 Enrique Rocha (@soyenriquerocha) - see LICENSE for original authors · tododeia.com · id er-d03758e1 -->seo-sitemaps (M17)
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.
Inputs
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.
Audits
Working from the PageSnapshot (parsed_rendered when render.used is not none, else parsed) plus site/sitemaps.json and site/robots.json:
- Presence & validity: locate XML sitemap(s) (
/sitemap.xml, robotsSitemap:lines, sitemap index); parse as well-formed XML against the sitemaps.org schema. - Size limits: each sitemap
<=50,000URLs and<=50MBuncompressed; if exceeded, expect a sitemap index splitting the set. - Extensions: where relevant, validate
image:,video:, andnews:namespace entries (correct namespace declared, required child elements present). - lastmod accuracy:
<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). - robots referencing: at least one absolute
Sitemap:line inrobots.txt. - Sitemap-to-canonical consistency: no URL in the sitemap is
noindex, redirected, 4xx/5xx, or non-canonical (self-referencing canonical only). Cross-check indexability with M-indexability. - Orphan reconciliation: diff sitemap URLs against the internal link graph — flag indexable pages absent from the sitemap and sitemap URLs unreachable by internal links.
Fixes
- AUTO: generate or repair XML sitemap entries (correct
<loc>, accurate<lastmod>from observed last-modified data, validimage:/video:extension children where media exists) and add an absoluteSitemap:line torobots.txt. These are additive/deterministic diffs forfix. - PROPOSED: removing or splitting entries (e.g. dropping non-canonical/noindex URLs, sharding into a sitemap index) — drafted, accepted per-item.
- ADVISORY: changing site-wide lastmod strategy or canonical decisions — described, never written by the tool.
- Never fabricate lastmod times, media URLs, or canonical targets — pull from observed data, ask the user, or leave a clearly-marked
TODOplaceholder per the schemafixablecontract.
Verification
- From the run (no network): read
<run_dir>/site/sitemaps.jsonand<run_dir>/site/robots.json— the crawl already walked the index, followed gzipped children and recorded the per-file errors. - Re-fetch:
node "${CLAUDE_PLUGIN_ROOT}/scripts/parse-robots-sitemap.mjs" --url <final_url> [--max-sitemaps 50] [--max-urls 100000] [--no-well-known]— methodxml_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--snapshotmode: sitemaps are site-level artifacts, not page snapshots. - When the required data tier (live fetch of sitemap/robots, or the resolved link graph) is unavailable, status is
needs_api— never a falsepass.
Findings
Emit findings per schema/finding.schema.json. Examples:
M17.sitemap.missing— no XML sitemap found at/sitemap.xmlor in robots.txt (statusfail, severity 3,fixable: auto, axissearch, confidenceestablished).M17.robots.no_sitemap_line— sitemap exists but noSitemap:line in robots.txt (statuswarn, severity 3,fixable: auto, axissearch, confidenceestablished).M17.sitemap.noindex_url— a<loc>in the sitemap points to anoindex/non-canonical URL (statusfail, severity 3,fixable: proposed, axissearch, confidenceestablished).M17.sitemap.error_url— a<loc>the crawl fetched returned 4xx/5xx (statusfail, severity 3,fixable: proposed, axissearch, confidenceestablished).M17.sitemap.redirected_url— a<loc>redirects instead of returning the final URL (statuswarn, severity 3,fixable: proposed, axissearch, confidenceestablished).M17.sitemap.missing_indexable_url— an indexable URL the crawl found is listed in no sitemap (statuswarn, severity 3,fixable: proposed, axissearch, confidencedirectional— 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 (statuswarn, severity 2,fixable: advisory, axissearch, confidencedirectional). 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.missingis also emitted asneeds_apiwhen 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 whenprofile.jsonnames the platform (shopify,wordpress,nextjs,nuxt,astro,gatsby,hugo). They are indexed inreferences/routing.md§ Platform-conditional finding ids and specified inreferences/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 %).
Honesty
- A sitemap is a discovery aid, not a ranking signal or an indexing guarantee — Google treats
<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). - Submitting a sitemap won't force indexing of low-quality or non-canonical pages; orphan and canonical hygiene matters more than sitemap size.
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.

