| name | blog-cannibalization |
| description | Detect keyword cannibalization across blog posts by extracting primary keywords from titles and headings, clustering semantically similar targets, and flagging posts competing for the same search intent. Supports local-only mode (grep-based) and DataForSEO API mode (Page Intersection endpoint at ~$0.01/call). Outputs severity-scored report with merge or differentiate recommendations. Use when user says "cannibalization", "keyword overlap", "competing pages", "duplicate keywords", "cannibalize".
|
| user-invokable | true |
| argument-hint | [directory] [--api] |
| license | MIT |
| id | blog-cannibalization |
| domain | content |
| invoked_by | ["blog-reviewer"] |
| depends_on | [] |
Blog Cannibalization - Keyword Overlap Detection
Detect when multiple blog posts compete for the same search keywords. Two modes:
local-only analysis (default) and DataForSEO API mode for SERP-level data.
Two Modes
| Mode | Flag | Cost | Data Source |
|---|
| Local | (default) | Free | File content analysis via Grep/Read |
| API | --api | ~$0.01/call | DataForSEO Page Intersection + Ranked Keywords |
Local mode works without any API keys. API mode requires DataForSEO credentials
set as environment variables: DATAFORSEO_LOGIN and DATAFORSEO_PASSWORD.
Local Mode Workflow
Step 1: Scan Blog Files
Use Glob to find all content files in the target directory:
- Patterns:
**/*.md, **/*.mdx, **/*.html
- Skip files in
node_modules/, .git/, drafts/
Step 2: Extract Primary Keywords
For each file, read and extract keyword signals from:
- Title tag or H1 heading (highest weight)
- H2 headings (medium weight)
- First paragraph (supporting signal)
- Meta description if present in frontmatter
Primary keyword extraction method:
- Tokenize title and H1 into 1-gram, 2-gram, and 3-gram phrases
- Score each phrase by frequency across title + H2s + first paragraph
- Select the top-scoring 2-3 word phrase as the primary keyword
- Record secondary keywords from H2 headings
Step 3: Cluster by Similarity
Group posts into clusters using these matching rules (in priority order):
- Exact match - identical primary keyword across 2+ posts
- Stem match - same root word (e.g., "optimize" vs "optimization")
- Semantic overlap - Antigravity determines that two keywords target the same
search intent (e.g., "best CRM software" vs "top CRM tools 2026")
- Subset match - one keyword contains another (e.g., "email marketing"
vs "email marketing for startups")