SEO
by addyosmani / web-quality-skills
Optimize for search engine visibility and ranking.
Analyze existing XML sitemaps or generate new ones with industry templates.
Listed ·Updated
Install data from skills.sh
This skill runs shared helper scripts through the author's plugin, which a single-skill install does not set up. For the full tool, install it as a Claude Code plugin: run "/plugin marketplace add agricidaniel/claude-seo". The one-command install gives you the instructions, but not the scripts.
Validates an XML sitemap you already have, or builds a new one. For an existing site, the author's discovery script reads the Sitemap lines in robots.txt and also checks common locations. The checks then cover XML validity, the 50,000 URL and 50MB per-file limits, non-200, noindexed, redirected and non-canonical URLs, lastmod accuracy, the rules for image, video and news sitemaps, and crawled pages missing from the sitemap, with issues ranked by severity in a validation report. To generate one, it asks your business type, plans the structure with you from industry templates, warns at 30 location pages and stops at 50 unless you justify them. It writes sitemap.xml, split under an index when needed, and a STRUCTURE.md.
Discover candidates before reporting a sitemap missing:
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run sitemap_discovery.py <url> --json
The 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.
<lastmod> accurate: must be a valid W3C Datetime and reflect the last
significant content change (main content, structured data, links, not
copyright/boilerplate edits). Google only honours <lastmod> when consistently
and verifiably accurate, so warn when values are suspiciously uniform or newer
than the page's real content.<priority> and <changefreq> are ignored by Google| 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:
http://www.google.com/schemas/sitemap-image/1.1): only two valid
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:video> with <video:thumbnail_loc>,
<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.<news:news> per file (not 50,000); include only
articles from the last 2 days; required <news:publication>/<news:name>/
<news:language>/<news:publication_date>/<news:title>; submit/discover through
Search Console or robots.txt/sitemap index; use Publisher Center only for
publication management where relevant. When the news: namespace is detected, override the generic
50k check with the 1,000 cap.../seo-plan/assets/ directory✅ Integration pages (with real setup docs) ✅ Template/tool pages (with downloadable content) ✅ Glossary pages (200+ word definitions) ✅ Product pages (unique specs, reviews) ✅ User profile pages (user-generated content)
❌ Location pages with only city name swapped ❌ "Best [tool] for [industry]" without industry-specific value ❌ "[Competitor] alternative" without real comparison data ❌ AI-generated pages without human review and unique value
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/page</loc>
<lastmod>2026-02-07</lastmod>
</url>
</urlset>
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-pages.xml</loc>
<lastmod>2026-02-07</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-posts.xml</loc>
<lastmod>2026-02-07</lastmod>
</sitemap>
</sitemapindex>
sitemap_discovery.py and report "not found" only
when its found list is empty after declared and common candidates are checkedVALIDATION-REPORT.md: analysis resultssitemap.xml (or split files with index)STRUCTURE.md: site architecture documentationNot using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.