Some checks failed
Verify Skills / verify-skills (push) Has been cancelled
Adopt: directory keeps its NN- ordering prefix; skill `name:` is the clean form without it (dir 16-seo-schema-validator → name: seo-schema-validator). Nicer to invoke, matches the original desktop/SKILL.md names, still globally unique. - 71 root SKILL.md: name: NN-foo → name: foo (flat skills + reference-curator suite). Plugins (mac-optimizer/multi-agent-guide/dintel-bootstrap) already clean; 95 already clean. - scripts/migrate_skill_root.py: derive name = dirname minus NN- prefix (skill_name()). - CLAUDE.md + SKILL-MIGRATION-GUIDE.md: document the dir-prefix / clean-name convention. verify_skills.py: 0 name collisions across all renamed skills. (The ~/.claude/skills symlinks were re-pointed to the clean names separately — filesystem only.) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.6 KiB
6.6 KiB
name, description
| name | description |
|---|---|
| seo-keyword-strategy | Keyword strategy and research for SEO campaigns. Triggers: keyword research, keyword analysis, keyword gap, search volume, keyword clustering, intent classification, 키워드 전략, 키워드 분석, 키워드 리서치, 검색량 분석, 키워드 클러스터링. |
SEO Keyword Strategy & Research
Purpose
Expand seed keywords, classify search intent, cluster topics, and identify competitor keyword gaps for comprehensive keyword strategy development.
Core Capabilities
- Keyword Expansion - Matching terms, related terms, search suggestions
- Korean Market - Suffix expansion, Naver autocomplete, Korean intent patterns
- Intent Classification - Informational, navigational, commercial, transactional
- Topic Clustering - Group keywords into semantic clusters
- Gap Analysis - Find competitor keywords missing from target site
Data Source Selection
This skill can pull keyword data from multiple backends. Pick one per task — don't fan out to every backend by default (cost + rate limits).
| Backend | Best for | Notes |
|---|---|---|
Semrush MCP (mcp__semrush__*) |
Default for keyword volume, related/matching terms, organic competitor pulls | Call pattern: keyword_research → get_report_schema → execute_report. database="us" default; "kr" for Korean market. |
Ahrefs MCP (mcp__ahrefs__*) |
Ahrefs DR/UR weighting; first-party gsc-keywords (only Ahrefs integrates GSC inside its MCP) |
keywords-explorer-overview, -matching-terms, -related-terms, -search-suggestions, -volume-by-country, gsc-keywords. |
OurSEO Agent CLI (our keywords *) |
DataForSEO under the hood — cheapest per call, batch-friendly, Korean-aware via --location 2410 |
Claude Code only (needs Bash). Wrap calls: our keywords volume, ideas, for-site, intent, difficulty. |
OurSEO Agent MCP (mcp__ourseo__*) |
Claude Desktop equivalent for crawl-derived keywords + Knowledge Graph entity expansion | search_knowledge_graph for entity seeding; crawl_website to extract on-page keyword inventory from the target site itself. |
DataForSEO MCP (mcp__dfs-mcp__*) |
Direct fallback when our CLI isn't available |
Same data as our keywords *. |
GSC (via our research search-console or Ahrefs gsc-*) |
First-party queries the site actually ranks for — ground truth, not estimates | Use to validate/prune Semrush or Ahrefs lists with real impressions/CTR. |
How to pick
Apply these in order; stop at the first match:
- User named a backend explicitly in the prompt → use it.
- User preference memory — read
feedback_seo_tool_preferences.md; honor the task-type default there. - Task needs a capability only one backend has (e.g.,
gsc-keywordsfirst-party data, ormcp__ourseo__search_knowledge_graphentity expansion) → use that backend. - Default by market:
- English-market or unspecified → Semrush MCP with
database="us". - Korean market → OurSEO CLI
our keywords <subcmd> --location 2410 --language ko(Claude Code), or Semrush MCP withdatabase="kr"(Claude Desktop).
- English-market or unspecified → Semrush MCP with
- Still ambiguous on a non-trivial task → ask once via
AskUserQuestionlisting the top 2–3 candidates.
Backend call patterns
Semrush MCP (default):
mcp__semrush__keyword_research(query="<seed>", database="us")
mcp__semrush__get_report_schema(report_id="...")
mcp__semrush__execute_report(report_id="...", params={...})
OurSEO CLI (Korean default, Claude Code):
our keywords volume "<keyword>" --location 2410 --language ko
our keywords ideas "<keyword>" --location 2410 --limit 50
our keywords for-site <competitor.com> --location 2410 --limit 100
our keywords intent "<kw1>" "<kw2>" "<kw3>"
our keywords difficulty "<kw1>" "<kw2>"
Ahrefs MCP (when user requests, or for GSC first-party):
mcp__ahrefs__keywords-explorer-overview(keyword="<seed>", country="us")
mcp__ahrefs__keywords-explorer-matching-terms(keyword="<seed>", country="us")
mcp__ahrefs__keywords-explorer-volume-by-country(keyword="<seed>")
mcp__ahrefs__gsc-keywords(...)
OurSEO Agent MCP (Claude Desktop, KG/entity expansion):
mcp__ourseo__search_knowledge_graph(query="<brand or entity>")
mcp__ourseo__crawl_website(url="<target>", max_pages=50)
Common parameters across backends
| Concept | Semrush | Ahrefs | DataForSEO / our CLI |
|---|---|---|---|
| Korean market | database="kr" |
country="kr" |
--location 2410 |
| US market | database="us" |
country="us" |
--location 2840 |
| Japan | database="jp" |
country="jp" |
--location 2392 |
| Language | (database-bound) | (country-bound) | --language ko/en/ja |
Workflow
1. Seed Keyword Expansion
- Determine backend via Data Source Selection above.
- Fetch search volume for the seed.
- Expand via the chosen backend's "related" / "ideas" / "matching-terms" endpoint.
- Apply Korean suffix expansion if Korean market (regardless of backend).
- Deduplicate and merge.
2. Intent Classification & Clustering
- Classify each keyword by search intent (informational / navigational / commercial / transactional).
- Group keywords into topic clusters.
- Identify pillar topics and supporting terms.
- Calculate cluster-level metrics (total volume, avg KD).
3. Gap Analysis
- Pull organic keywords for target via chosen backend.
- Pull organic keywords for competitors (parallel).
- Identify keywords present in competitors but missing from target.
- Score opportunities by volume/difficulty ratio.
- Prioritize by intent alignment with business goals.
Output Format
## Keyword Strategy Report: [seed keyword]
### Overview
- Data source: [Semrush | Ahrefs | OurSEO CLI | OurSEO MCP | GSC]
- Market: [database/location code]
- Total keywords discovered: [count]
- Topic clusters: [count]
- Total search volume: [sum]
### Top Clusters
| Cluster | Keywords | Total Volume | Avg KD |
|---|---|---|---|
| ... | ... | ... | ... |
### Top Opportunities
| Keyword | Volume | KD | Intent | Cluster |
|---|---|---|---|---|
| ... | ... | ... | ... | ... |
### Keyword Gaps (vs competitors)
| Keyword | Volume | Competitor Position | Opportunity Score |
|---|---|---|---|
| ... | ... | ... | ... |
Always record the chosen data source in the Overview so future audits can compare apples to apples.
Notion Output (Required)
All audit reports MUST be saved to OurDigital SEO Audit Log:
- Database ID:
2c8581e5-8a1e-8035-880b-e38cefc2f3ef - Properties: Issue (title), Site (url), Category, Priority, Found Date, Audit ID
- Language: Korean with English technical terms
- Audit ID Format: KW-YYYYMMDD-NNN