/seo-indexability
Audit a page's indexability and site health — canonical presence/validity (self vs cross-domain vs chain, canonical to redirect/404, the lethal canonical+noindex pair), robots meta and X-Robots-Tag noindex/nofollow, duplicate clusters, pagination signals, plus redirect
$ npx -y skills add Hainrixz/claude-seo-ai --skill seo-indexability --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/seo-indexability
Context preview
The summary Claude sees to decide when to auto-load this skill.
Audit a page's indexability and site health — canonical presence/validity (self vs cross-domain vs chain, canonical to redirect/404, the lethal canonical+noindex pair), robots meta and X-Robots-Tag noindex/nofollow, duplicate clusters, pagination signals, plus redirect
SKILL.md
seo-indexability.SKILL.mdname: seo-indexability
description: Audit a page's indexability and site health — canonical presence/validity (self vs cross-domain vs chain, canonical to redirect/404, the lethal canonical+noindex pair), robots meta and X-Robots-Tag noindex/nofollow, duplicate clusters, pagination signals, plus redirect chains/loops, 4xx/5xx and soft-404 internal links, mixed content, HTTP-to-HTTPS enforcement, orphan pages and click-depth — and generate self-referential canonical / noindex-removal fixes. Module M2 (covers M3 site health). Feeds the Search SEO score.
allowed-tools: Read, Grep, Glob, WebFetch, Bash
seo-indexability (M2)
If a page can't be crawled, indexed, or canonicalized correctly, every other signal is wasted — this is the floor under the Search score. Schema-side context: `references/schema-tier1.md`.
Audits
Working from the PageSnapshot (`rendered_dom` if present, else `raw_html`) plus response headers: 1. **Canonical**: exactly one `<link rel="canonical">`; absolute HTTPS URL; classify self-referential vs cross-domain vs chained (canonical points to a URL that itself canonicalizes elsewhere). Flag canonical that resolves to a redirect or 4xx. 2. **Canonical + noindex**: the lethal combination on the *same* URL (a noindex page used as a canonical target, or a canonicalized page also carrying noindex) — contradictory signals that drop the page. 3. **Robots directives**: `<meta name="robots">` and the `X-Robots-Tag` header for `noindex`/`nofollow`/`none`; reconcile header vs meta (header wins). 4. **Duplicate clusters**: near-identical title/H1/body across URLs with no consolidating canonical. 5. **Pagination**: paginated series signals (self-canonical per page; do not canonicalize page 2+ to page 1 — that delists deep items). 6. **Site health (covers M3)**: redirect chains/loops (>1 hop = warn, >3 hops or loop = fail), internal links returning 4xx/5xx, soft-404 (200 status on an empty/"not found" page), mixed content (HTTP subresources on HTTPS), HTTP-to-HTTPS enforcement, orphan pages (no internal inlinks), and click-depth from the homepage.
Fixes
- **AUTO** (`fixable: auto`): inject a single self-referential absolute-HTTPS `<link rel="canonical">` when absent; remove an accidental `noindex` on a page the user has confirmed should be indexed. Both are deterministic, additive/removal-only diffs for `fix`.
- **ADVISORY** (`fixable: advisory`): redirect chains/loops, status codes, HTTP-to-HTTPS, and mixed-content origin fixes live in server/CDN config — the tool never writes these; it reports the exact change.
- **PROPOSED** (`fixable: proposed`): duplicate-cluster consolidation (which URL is canonical is an editorial call) — draft a per-cluster canonical plan for the user to accept.
- Never fabricate which URL "should" win or whether a page is intentionally noindexed — ask the user or leave a clearly-marked TODO placeholder.
Verification
- `dom_assert`: parse the rendered DOM for canonical/robots presence and value.
- `header_check`: fetch headers to read `X-Robots-Tag` and follow the redirect chain (status + `Location` per hop).
- When the required data tier is unavailable (no live fetch / no crawl graph for orphan & depth), status is `needs_api` — never a false `pass`.
Findings
Findings conform to `schema/finding.schema.json`. Each carries `evidence.observed` quoting the page/header and a runnable `verification.reproduce`. Examples:
- `M2.canonical.noindex_conflict` — page is both canonical target and `noindex` (status `fail`, severity 4, `fixable: proposed`, axis `search`, confidence `established`).
- `M2.canonical.missing` — no `<link rel="canonical">` on an indexable page (status `warn`→`fail` if duplicates exist, severity 4, `fixable: auto`, axis `search`, confidence `established`).
- `M2.redirect.chain` — internal link traverses >1 hop before 200 (status `warn`, severity 4, `fixable: advisory`, axis `search`, confidence `established`).
- `M2.robots.unintended_noindex` — `X-Robots-Tag: noindex` on a page the user wants indexed (status `fail`, severity 4, `fixable: auto`, axis `search`, confidence `established`).
Honesty
- A canonical is a *hint*, not a directive — Google may pick a different canonical; report it as strong consolidation, not a guarantee.
- `rel=next/prev` is no longer used by Google for pagination; don't recommend adding it as a ranking tactic — keep self-canonical per page instead.
- Click-depth and orphan status correlate with crawl priority but are not a documented ranking factor — flag as `directional`, never as an established score cap.
Read more
name: seo-indexability description: Audit a page's indexability and site health — canonical presence/validity (self vs cross-domain vs chain, canonical to redirect/404, the lethal canonical+noindex pair), robots meta and X-Robots-Tag noindex/nofollow, duplicate clusters, pagination signals, plus redirect chains/loops, 4xx/5xx and soft-404 internal links, mixed content, HTTP-to-HTTPS enforcement, orphan pages and click-depth — and generate self-referential canonical / noindex-removal fixes. Module M2 (covers M3 site health). Feeds the Search SEO score. allowed-tools: Read, Grep, Glob, WebFetch, Bash
seo-indexability (M2)
If a page can't be crawled, indexed, or canonicalized correctly, every other signal is wasted — this is the floor under the Search score. Schema-side context: `references/schema-tier1.md`.
Audits
Working from the PageSnapshot (`rendered_dom` if present, else `raw_html`) plus response headers: 1. **Canonical**: exactly one `<link rel="canonical">`; absolute HTTPS URL; classify self-referential vs cross-domain vs chained (canonical points to a URL that itself canonicalizes elsewhere). Flag canonical that resolves to a redirect or 4xx. 2. **Canonical + noindex**: the lethal combination on the *same* URL (a noindex page used as a canonical target, or a canonicalized page also carrying noindex) — contradictory signals that drop the page. 3. **Robots directives**: `<meta name="robots">` and the `X-Robots-Tag` header for `noindex`/`nofollow`/`none`; reconcile header vs meta (header wins). 4. **Duplicate clusters**: near-identical title/H1/body across URLs with no consolidating canonical. 5. **Pagination**: paginated series signals (self-canonical per page; do not canonicalize page 2+ to page 1 — that delists deep items). 6. **Site health (covers M3)**: redirect chains/loops (>1 hop = warn, >3 hops or loop = fail), internal links returning 4xx/5xx, soft-404 (200 status on an empty/"not found" page), mixed content (HTTP subresources on HTTPS), HTTP-to-HTTPS enforcement, orphan pages (no internal inlinks), and click-depth from the homepage.
Fixes
- **AUTO** (`fixable: auto`): inject a single self-referential absolute-HTTPS `<link rel="canonical">` when absent; remove an accidental `noindex` on a page the user has confirmed should be indexed. Both are deterministic, additive/removal-only diffs for `fix`.
- **ADVISORY** (`fixable: advisory`): redirect chains/loops, status codes, HTTP-to-HTTPS, and mixed-content origin fixes live in server/CDN config — the tool never writes these; it reports the exact change.
- **PROPOSED** (`fixable: proposed`): duplicate-cluster consolidation (which URL is canonical is an editorial call) — draft a per-cluster canonical plan for the user to accept.
- Never fabricate which URL "should" win or whether a page is intentionally noindexed — ask the user or leave a clearly-marked TODO placeholder.
Verification
- `dom_assert`: parse the rendered DOM for canonical/robots presence and value.
- `header_check`: fetch headers to read `X-Robots-Tag` and follow the redirect chain (status + `Location` per hop).
- When the required data tier is unavailable (no live fetch / no crawl graph for orphan & depth), status is `needs_api` — never a false `pass`.
Findings
Findings conform to `schema/finding.schema.json`. Each carries `evidence.observed` quoting the page/header and a runnable `verification.reproduce`. Examples:
- `M2.canonical.noindex_conflict` — page is both canonical target and `noindex` (status `fail`, severity 4, `fixable: proposed`, axis `search`, confidence `established`).
- `M2.canonical.missing` — no `<link rel="canonical">` on an indexable page (status `warn`→`fail` if duplicates exist, severity 4, `fixable: auto`, axis `search`, confidence `established`).
- `M2.redirect.chain` — internal link traverses >1 hop before 200 (status `warn`, severity 4, `fixable: advisory`, axis `search`, confidence `established`).
- `M2.robots.unintended_noindex` — `X-Robots-Tag: noindex` on a page the user wants indexed (status `fail`, severity 4, `fixable: auto`, axis `search`, confidence `established`).
Honesty
- A canonical is a *hint*, not a directive — Google may pick a different canonical; report it as strong consolidation, not a guarantee.
- `rel=next/prev` is no longer used by Google for pagination; don't recommend adding it as a ranking tactic — keep self-canonical per page instead.
- Click-depth and orphan status correlate with crawl priority but are not a documented ranking factor — flag as `directional`, never as an established score cap.
The SEO + AI-search (GEO/AEO) optimization toolkit for Claude Code — two-score audit + opt-in fixer. Built for 2026-2027.
Repo: Hainrixz/claude-seo-ai
Other skills on claude-seo-ai.
- /audit
Audit a website or web codebase for SEO and AI-search (GEO/AEO) — produces two independent 0-100 scores (Search SEO + AI Visibility) plus a prioritized, evidence-backed report. Read-only; never writes files. Use when the user asks to audit, analyze, check, or score a site's SEO,
Open skill - /fix
Opt-in fixer (the /claude-seo-ai:fix command). Applies the safe, deterministic SEO/AI-search fixes from an audit to the user's code — meta viewport/charset/lang, JSON-LD, robots.txt AI directives, hreflang, sitemaps, OG/Twitter cards, image dimensions, canonical, llms.txt.
Open skill - /geo
Analyze and score only a page's AI-search visibility (GEO/AEO) — answer extractability, fact density, AI-crawler access, entity linking, and llms.txt — and report an AI Visibility score with a citability breakdown. Read-only. Use for "will AI engines cite this?", GEO/AEO, or
Open skill - /score
Recompute and display the two scores (Search SEO + AI Visibility) from the most recent audit's findings, without re-crawling. Use to re-show or refresh the scores after an audit, or to score a saved findings JSON file.
Open skill - /seo-ai-crawlers
Audit AI crawler access and citability for a page — confirm retrieval/citation bots (OAI-SearchBot, Claude-SearchBot, PerplexityBot) are allowed and the Googlebot vs Google-Extended split is correct, classify training vs search/retrieval vs user-fetch user-agents, check the page
Open skill - /seo-core-web-vitals
Audit Core Web Vitals & page performance — measure LCP, INP, and CLS against p75 field thresholds, diagnose render-blocking resources, unoptimized images, and layout-shift sources, and produce prioritized, advisory-only remediation guidance. Module M15. Feeds the Search SEO
Open skill

