# Keyword Cannibalization Audit

> Audit a website for keyword cannibalization — multiple pages competing for the same search query. Crawls pages and compares titles, H1s, and body keywords to find pages with duplicate title targets, clusters of pages whose keyword signatures overlap, and pages sharing the same primary keyword phrase. Use when the user asks to audit, check, or fix keyword cannibalization, pages competing for the s…

- **Type:** Skill
- **Install:** `agentstack add skill-jakelabate-claude-seo-skills-keyword-cannibalization-audit`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [JakeLabate](https://agentstack.voostack.com/s/jakelabate)
- **Installs:** 0
- **Category:** [Search](https://agentstack.voostack.com/c/search)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [JakeLabate](https://github.com/JakeLabate)
- **Source:** https://github.com/JakeLabate/Claude-SEO-Skills/tree/main/skills/keyword-cannibalization-audit
- **Website:** https://www.jakelabate.com/claude-seo-skills/

## Install

```sh
agentstack add skill-jakelabate-claude-seo-skills-keyword-cannibalization-audit
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Keyword Cannibalization Audit

Audit a website for pages that compete with each other for the same query, and
produce an actionable report. Findings are *candidates to confirm* — some overlap
is legitimate; this skill surfaces the clusters and recommends a hierarchy.

## When to use this skill

Use this skill when the user asks to:

- Audit or fix keyword cannibalization
- Find pages competing for the same keyword / query
- Decide which page should rank for a topic and what to do with the rest
- Review overlapping or competing content

## Inputs to collect

1. **Site URL or URL list** — a live site root to crawl (auto-seeds from
   `/sitemap.xml`), or a text file with `--url-list`.
2. **Scope** — pages to crawl (default 500, `--max-pages`).
3. **Brand suffix** — e.g. `"| Acme Co"` so brand words don't inflate title
   similarity (`--brand-suffix`).
4. **Overlap threshold** — Jaccard similarity to flag competing pages (default
   0.6, `--overlap`).

## Workflow

### Step 1: Crawl and capture target signals

Use `scripts/extract_targets.py`:

```bash
python3 scripts/extract_targets.py https://example.com --max-pages 500 --output target_inventory.json
# already crawled once (e.g. in a full SEO audit)? skip the crawl and reuse the shared cache:
# python3 scripts/fetch_pages.py https://example.com --output page_cache.json
# python3 scripts/extract_targets.py --from-cache page_cache.json --output target_inventory.json
```

For each page it records title, H1, meta description, noindex, word count, and the
top body keywords by frequency.

### Step 2: Run the audit checks

```bash
python3 scripts/audit_cannibalization.py target_inventory.json --brand-suffix "| Acme Co" --overlap 0.6 --output audit_report.json
```

### Step 3: Evaluate the audit checks

Evaluate each check in `references/audit-checks.md`. Core checks:

| Check | Severity |
|---|---|
| Duplicate title target | High |
| Overlapping target cluster (keyword signatures) | Medium |
| Shared primary keyword (title bigram) | Low |

### Step 4: Produce the report

Write a report following `references/report-template.md`: summary, duplicate title
targets first, then overlapping clusters (largest first) each with a recommended
hierarchy, and a prioritized action list.

### Step 5: Recommend fixes

- For each cluster, name **one primary page** and a role for every other page:
  differentiate to a distinct sub-query, merge, or 301/canonicalize into the
  primary.
- **Frame as hierarchy, not deletion** — supporting pages that target distinct
  intents and link up to the primary are healthy.
- **Always recommend confirming with Search Console** query data before
  consolidating: this audit infers competition from on-page signals.
- Related angles: `meta-data-audit` (duplicate titles) and
  `content-quality-audit` (duplicate bodies).
- Base every grouping on observed signatures; never invent rankings.

## Optional: export the report

### As a Word document (.docx)

If the user wants the report as a `.docx` (for example, to share with stakeholders or attach to a ticket), save the Markdown report to a file and convert it:

```bash
python3 scripts/md_to_docx.py report.md --output report.docx
```

`scripts/md_to_docx.py` uses only the Python standard library (no `pip install`) and renders headings, tables, lists, links, bold/italic, and code blocks. Offer this whenever a user asks for a Word doc, a `.docx`, or a shareable/downloadable report.

### As a CSV of findings (.csv)

If the user wants the raw findings as a spreadsheet (for filtering, sorting, or triage in Sheets or Excel), convert the audit's `audit_report.json` directly:

```bash
python3 scripts/findings_to_csv.py audit_report.json --output findings.csv
```

`scripts/findings_to_csv.py` is also standard-library only. It writes one row per finding, with `check` and `severity` columns prepended and list fields (e.g. the pages sharing a duplicate value) joined with `; `. Unlike the `.docx`, which reformats the written report, the CSV is a direct dump of the structured findings — offer it whenever a user wants the data itself, a spreadsheet, or to slice findings by check or severity.

## Resources

- `scripts/md_to_docx.py` — convert the Markdown report into a Word (.docx) document (standard library only)
- `scripts/findings_to_csv.py` — flatten the audit findings JSON into a CSV, one row per finding (standard library only)
- `references/audit-checks.md` — full definitions, thresholds, and rationale
- `references/report-template.md` — report output structure
- `scripts/extract_targets.py` — crawl and capture keyword-target signals
- `scripts/audit_cannibalization.py` — run cannibalization audit checks

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [JakeLabate](https://github.com/JakeLabate)
- **Source:** [JakeLabate/Claude-SEO-Skills](https://github.com/JakeLabate/Claude-SEO-Skills)
- **License:** MIT
- **Homepage:** https://www.jakelabate.com/claude-seo-skills/

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-jakelabate-claude-seo-skills-keyword-cannibalization-audit
- Seller: https://agentstack.voostack.com/s/jakelabate
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
