CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

blog-cannibalization

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 a free local mode (file analysis) and a paid DataForSEO API mode that runs only after the user approves the call count. Outputs a severity-scored report with merge or differentiate recommendations. Use when the user says "cannibalization", "keyword overlap", "competing pages". Not a site audit (blog-audit) or cluster planning (blog-cluster); it changes no files or redirects.

Quality

84%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

71%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-sequenced, largely executable instruction set with good safety gates (spend approval, credential hygiene, untrusted-content warnings) and clean error-handling fallbacks. Its main structural weakness is progressive disclosure: the body leans on a main reference and a sibling-skill layout that are absent from this bundle, leaving both the orchestration pointer and the API-mode wrapper dangling.

Suggestions

Bundle the referenced orchestration-details.md (or any files the body depends on, e.g. the DataForSEO CLI wrapper in scripts/) so the 'main reference' and sibling-root pointers resolve, or remove those pointer lines from the body.

Move the API-mode endpoint payloads, recommendation deep-dives (MERGE/DIFFERENTIATE/CANONICAL/NOINDEX), and severity formulas into a one-level-deep references/ file linked from a short overview section, keeping SKILL.md as the navigable summary.

Flesh out Local Mode Steps 4-5 with the same specificity as Steps 1-3 (what signals map to which severity level and how recommendations are chosen) — the local heuristic exists but is not connected to the Step 4 flow.

DimensionReasoningScore

Conciseness

The body is operational throughout — glob patterns, env var names, a deterministic extraction method, and endpoint payloads — and does not explain concepts Claude already knows (no SEO 101 padding). Minor trimmable content keeps it below the top anchor: inline time-sensitive dates ('checked 2026-10-12', twice) sit outside any 'old patterns'/'deprecated' section, and the opening paragraph on ${CLAUDE_SKILL_DIR} resolution is denser than needed. It is clearly above anchor 3, where noticeable unnecessary explanation would be present.

4 / 5

Actionability

Mostly executable guidance: copy-paste-ready endpoint JSON bodies with required parameters, a severity formula with defined variables, skip patterns, credential env vars, and per-error fallback behavior. It is not fully self-contained: API mode 'requires ... a dedicated local CLI wrapper' that is not bundled and has no implementation or invocation instructions (only the SKIPPED fallback), and the local-mode keyword extraction relies on judgment where a precise procedure or script would exist. That places it between anchors 4 and 5, closer to 4.

4 / 5

Workflow Clarity

Both modes have numbered, clearly sequenced steps, and there is a real pre-flight checkpoint — the spend-approval gate ('count the URLs ... Proceed only after the user approves that count, never exceed it') plus retry-once-then-fallback error handling. Minor gaps keep it below 5: Step 4 ('assess severity and generate a recommendation') and Step 5 are underspecified, and API-mode step 1 leaves URL collection vague ('from the user (or sitemap)'). The skill is read-only reporting, so the destructive/batch validation cap does not apply.

4 / 5

Progressive Disclosure

The bundle contains no references/, scripts/, or assets/ directories at all, yet the body's opening directs the reader to 'Read the main reference `orchestration-details.md`' — a dangling reference to a file that does not exist, with the only other paths (${CLAUDE_SKILL_DIR}/../blog/references, etc.) pointing outside the skill. The single-file body also inlines detail (full API endpoint payloads, five recommendation deep-dives) that a well-structured bundle would split into one-level-deep reference files. It has real section structure, so it sits at anchor 3 rather than 2, but the broken/missing reference and monolithic placement of API detail prevent a higher score.

3 / 5

Total

15

/

20

Passed

Description

92%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: concrete capabilities, explicit third-person triggers, and explicit disambiguation from sibling skills. The only gap is that the trigger list omits several natural synonyms and phrasings users might say when they need this skill.

DimensionReasoningScore

Specificity

Lists multiple specific concrete actions — 'extracting primary keywords from titles and headings, clustering semantically similar targets, and flagging posts competing for the same search intent' — plus mode/cost constraints and output form ('Outputs a severity-scored report with merge or differentiate recommendations'). Third-person voice is used throughout, so no voice penalty applies; coverage is comprehensive with no vague filler.

5 / 5

Completeness

Clearly answers both 'what' (detect, cluster, flag, severity-scored report) and 'when' with an explicit trigger clause: 'Use when the user says "cannibalization", "keyword overlap", "competing pages"'. Concrete trigger phrases and mode/cost caveats make both halves explicit, matching the top anchor exactly.

5 / 5

Trigger Term Quality

Natural trigger phrases users would actually say are present ('cannibalization', 'keyword overlap', 'competing pages'), which is good keyword coverage. It falls short of the top anchor because common variations and synonyms are missing, e.g. 'competing keywords', 'duplicate content', 'keyword competition', or 'multiple pages ranking for the same keyword'.

4 / 5

Distinctiveness Conflict Risk

Clear niche (keyword cannibalization across blog posts) with explicit negative boundaries — 'Not a site audit (blog-audit) or cluster planning (blog-cluster); it changes no files or redirects' — which sharply reduces mis-trigger risk against sibling SEO skills. Distinct, unlikely-to-collide trigger terms match the top anchor.

5 / 5

Total

19

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository

AgriciDaniel/claude-blog

Path

skills/blog-cannibalization/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.