1 · Fetch
A shared fetch_pages.py crawls the site once and stores the raw HTML and response facts in a single page_cache.json, an audit-agnostic snapshot of what the site actually served.
This collection documents Claude Agent Skills built for specific SEO tasks. Each skill packages instructions, inputs, and guardrails so the same job is done consistently every time, instead of relying on one-off prompts.
Every skill follows the same four-stage pipeline. Separating fetching the site from extracting what each audit needs from judging it from explaining it is the single most important design idea in the collection, it keeps results reproducible and ties every finding back to an observed fact.
A shared fetch_pages.py crawls the site once and stores the raw HTML and response facts in a single page_cache.json, an audit-agnostic snapshot of what the site actually served.
A pure extractor reads that cache with --from-cache, parses only the fields this audit needs, and writes a plain, reviewable inventory.json. A full audit fetches once and extracts many times instead of crawling per area.
A second pure script reads the inventory, applies checks and thresholds, assigns severities, and writes audit_report.json. It makes no network calls, so you can re-run it, tweak thresholds, or diff two runs without re-crawling.
Claude turns the findings into a human-readable report with prioritized fixes, and can export it to a Word .docx or a flat findings.csv for sharing with clients and teams.
Every skill is a self-contained folder built to the same shape, so once you understand one you understand them all.
fetch_pages.py crawler for the page-cache skills, and the shared md_to_docx.py and findings_to_csv.py converters so every skill can hand back a Word document or a flat CSV of findings.Every finding is assigned one of four levels, applied consistently across all skills, so each report leads with what matters most.
| Severity | Meaning | Examples |
|---|---|---|
| High | Actively harms indexing or ranking, or breaks the page. Fix first. | Missing title, sitemap URL 404s, Disallow: /, broken canonical |
| Medium | A real SEO quality problem, but not an emergency. | Title too long, page canonicalizes elsewhere, slow LCP proxy |
| Low | Hygiene and polish. | Invalid changefreq, generic filename, future lastmod |
| Info | Worth a look, not counted as an issue. | Title / H1 divergence, intentional patterns |
Every URL you submit to search engines, in a sitemap, an internal link, a canonical, should be a final, canonical, indexable 200 page. Anything that redirects, 404s, is noindexed, is blocked, or canonicalizes elsewhere breaks that contract and gets flagged. Many checks are applications of this one idea.
The Python scripts depend on nothing but the Python standard library, no pip install, no virtualenv. If you have Python 3.8+, they run. HTML, XML, HTTP, and gzip are all handled with built-in modules.
The report is produced as Markdown, then md_to_docx.py converts it to a .docx and findings_to_csv.py flattens the findings to a .csv, both with no dependencies. The .docx conversion runs after Claude's judgment, so prioritized fixes and rewritten titles are preserved; the document is the report reformatted, not re-derived from the JSON.
Every skill lives in the claude-seo-skills npm package. Install all of them into your global Claude skills directory (~/.claude/skills/) with a single command:
npx claude-seo-skills install sitemap-audit robots-txt-auditnpx claude-seo-skills install --projectnpx claude-seo-skills listThe audit scripts need Python 3.8+, with no pip install required, every script uses only the Python standard library. You can also copy any skill folder into your Claude skills directory by hand; Claude invokes a skill automatically when a request matches its description. Full instructions are in the repository README below.
The README from the Claude-SEO-Skills repository is below, covering the skill architecture, the full list of available skills, and how to install them. To see what the skills produce, browse the sample reports in examples/; to understand the design behind every skill, read docs/CONVENTIONS.md.
A collection of Claude skills for SEO tasks. Each folder under skills/ is a self-contained, fully functional Claude skill.
Each skill performs a real technical-SEO audit — crawling a site (or scanning local HTML), checking it against documented rules, and producing a prioritized, paste-ready report. They're built to be read and learned from as much as run: the rationale behind every check lives in each skill's references/audit-checks.md.
examples/ — illustrative sample reports.docs/CONVENTIONS.md — the design behind every skill.pip install required — every script uses only the Python standard library. (The one optional dependency, brotli, is used if present and skipped if not.)npx installer below. Claude itself runs the skills; you don't need Node to use them once installed.Every skill folder follows the standard Claude skill structure:
skill-name/
├── SKILL.md # YAML frontmatter (name, description) + workflow
├── references/
│ ├── audit-checks.md # every check: definition, why it matters, fix
│ └── report-template.md # the exact Markdown structure of the output
└── scripts/
├── fetch_pages.py # shared: crawl once → page_cache.json (crawl skills)
├── extract_*.py / collect_*.py # the extractor → inventory.json (reads --from-cache)
├── audit_*.py # the auditor → audit_report.json
├── md_to_docx.py # shared: render the report as a .docx
└── findings_to_csv.py # shared: flatten audit_report.json → findings.csv
All skills share one pipeline — fetch → extract → audit → report — and a four-level severity model (High / Medium / Low / Info). The page-based audits crawl the site once into a shared page_cache.json (via fetch_pages.py) and each extractor reads from it with --from-cache, so a full audit fetches once instead of crawling per area; each extractor also keeps a standalone mode (live URL, --local, --url-list). See docs/CONVENTIONS.md for the full design and a guide to adding your own skill.
Every skill can hand back its report as a Word document, not just Markdown. Ask for "a Word doc", "a .docx", or "a shareable report" and the skill writes the report and converts it with its bundled scripts/md_to_docx.py:
python3 scripts/md_to_docx.py report.md --output report.docx
Like everything else here, the converter is standard-library only — a .docx is just a ZIP of OOXML, so no pip install is needed. It renders headings, tables, lists, links, bold/italic, and code blocks. The export happens after the report is written, so the .docx keeps the prioritized fixes and rewritten values Claude produced — it's the report reformatted, not a raw dump of the findings JSON.
When you want the data rather than the write-up — to filter, sort, or triage in Sheets or Excel — every skill also bundles scripts/findings_to_csv.py, which flattens the audit's audit_report.json into a CSV with one row per finding:
python3 scripts/findings_to_csv.py audit_report.json --output findings.csv
Also standard-library only. It prepends check and severity columns and joins list fields (like the pages sharing a duplicate value) with ; . This one is a direct dump of the structured findings, so it complements the .docx: the Word doc for stakeholders, the CSV for working the issue list.
| Skill | Description |
|---|---|
full-seo-audit | Orchestrator. Runs every individual audit below and consolidates the findings into one prioritized, cross-area report — ranked by impact, not by which audit found the issue. Use for a complete / comprehensive technical-SEO review. |
| Skill | Description |
|---|---|
canonical-tag-audit | Audit a website's rel="canonical" tags: missing canonicals, multiple/conflicting canonicals, canonicals pointing at non-200/redirecting/noindexed URLs, relative or cross-host canonicals, https-to-http downgrades, and Link-header/HTML conflicts. |
content-quality-audit | Audit a website's content quality: thin content, exact-duplicate body text, near-duplicate (templated) pages via MinHash similarity, low text-to-HTML ratio, and missing H1s. |
core-web-vitals-audit | Audit a website's Core Web Vitals and page-experience signals (LCP, CLS, INP, TTFB): optionally pulls real field data from Google PageSpeed Insights (CrUX), and always collects browserless lab proxies — render-blocking CSS/JS, page weight, image dimension and lazy-loading hygiene, TTFB, text compression, DOM size, request counts, and third-party origins. |
external-link-audit | Audit a website's external (outbound) links: broken links, redirected targets, insecure HTTP links, affiliate rel="sponsored" compliance, unsafe target="_blank" usage, and sitewide outbound link patterns. |
heading-structure-audit | Audit a website's heading hierarchy (H1–H6): missing or multiple H1s, skipped heading levels, empty headings, headings that don't start at H1, overly long headings, and duplicate headings. |
image-seo-audit | Audit a website's images for SEO and Core Web Vitals: missing or empty alt text, missing width/height (layout shift), no lazy loading, oversized files, legacy formats, generic filenames, and broken image URLs. |
internal-link-audit | Audit a website's internal linking structure: broken links, orphan pages, redirect chains, click depth, anchor text quality, and link equity distribution. |
keyword-cannibalization-audit | Audit a website for keyword cannibalization: pages with duplicate title targets, clusters of pages whose title/H1/keyword signatures overlap, and pages sharing the same primary keyword phrase — with a recommended page hierarchy. |
llms-txt-audit | Audit a website's /llms.txt for AI/LLM discoverability (per llmstxt.org): a missing or HTML-served file, missing required H1 title or summary blockquote, broken/redirecting/blocked links, links missing descriptions, malformed list items, wrong-host or relative URLs, duplicate links, wrong content type, and whether a companion /llms-full.txt exists. |
meta-data-audit | Audit a website's title tags and meta descriptions: missing, duplicate, too-long, too-short, or multiple tags, generic or boilerplate titles, and keyword stuffing. |
mixed-content-audit | Audit an HTTPS website for mixed content: active mixed content (http scripts/styles/iframes browsers block), insecure form actions, passive mixed content (http images/media), legacy protocol-relative URLs, and pages still served over http. |
open-graph-audit | Audit a website's Open Graph and Twitter Card metadata: missing og:title/description/image/url, broken or non-image or relative og:image, og:url mismatching the canonical, missing twitter:card, over-length social titles/descriptions, and reused default images. |
pagination-audit | Audit a website's pagination: paginated pages canonicalizing to page 1 (hiding deep content), noindexed component pages, paginated pages missing a self-canonical, broken or inconsistent rel=next/prev, and redundant ?page=1 first pages. |
redirect-audit | Audit a website's redirects: resolves the full redirect chain for every URL to find chains and loops, redirects that end in 404s/errors, temporary (302) redirects used for permanent moves, HTTPS-to-HTTP downgrades, client-side meta-refresh and JavaScript redirects, dropped query strings, and canonicals pointing at redirecting URLs. |
robots-txt-audit | Audit a website's robots.txt: a redirected or HTML-served file, a 5xx read as "block everything", a sitewide Disallow: /, syntax errors, render-blocking CSS/JS, missing or unreachable Sitemap: directives, a missing default User-agent: * group, unsupported directives (noindex, crawl-delay) Google ignores, files over the 500 KiB limit, and BOM/duplicate/empty-rule issues. |
schema-markup-audit | Audit a website's structured data: extract JSON-LD, Microdata, and RDFa, validate against schema.org and Google rich result requirements, and find missing, invalid, or incomplete markup. |
site-architecture-audit | Audit a website's architecture: hostname and protocol canonicalization, robots.txt, XML sitemap parity, crawl and index directive conflicts, URL structure quality, click-depth distribution, and directory taxonomy. |
sitemap-audit | Audit a website's XML sitemaps: discovers sitemaps from robots.txt, follows sitemap index files, and validates every listed URL for non-200 status, redirects, noindex/robots-blocked URLs, canonicalized-away URLs, wrong host/protocol, duplicates, oversized sitemaps (over 50,000 URLs or 50MB), parse errors, and lastmod/priority/changefreq hygiene. |
soft-404-audit | Audit a website for soft 404s: error pages served with a 200 status, a server that returns 200 for every unknown URL, thin pages matching the site's error template, and empty/near-empty pages. |
Install all skills into your global Claude skills directory (~/.claude/skills/):
npx claude-seo-skills install
Other options:
# Install only specific skills
npx claude-seo-skills install sitemap-audit robots-txt-audit
# Install into the current project's ./.claude/skills instead of the global dir
npx claude-seo-skills install --project
# Install into a custom directory, overwriting anything already there
npx claude-seo-skills install --dir ~/my-skills --force
# List available skills
npx claude-seo-skills list
Or install the CLI globally:
npm install -g claude-seo-skills
claude-seo-skills install
You can also copy a skill folder into your Claude skills directory (e.g., ~/.claude/skills/ for Claude Code) or upload it where skills are supported. Claude will invoke the skill automatically when a request matches its description.