Keyword research skill
Use when the user asks to "find keywords", "挖词", or "搜什么词".
by aaron-he-zhu·Apache-2.0 license·★ 2,858 Stars on the repo·GitHub ↗
npx degit aaron-he-zhu/aaron-marketing-skills/seo-geo/survey/keyword-research#main ~/.claude/skills/keyword-research-aaron-he-zhuChecked ·commit main
Files of Keyword research
Show the full text111 lines
Keyword Research
Discovers, scores, and clusters keywords for SEO and GEO planning.
Quick Start
Research keywords for [topic/product/service]
What keywords is [competitor URL] ranking for that I should target?
Skill Contract
Expected output: a prioritized keyword brief plus the standard handoff summary for memory/research/.
- Reads: topic or seed keyword, target market/language, business goal, site DR, and any user-provided or tool metrics.
- Writes: a user-facing research deliverable and reusable summary.
- Promotes: durable keyword priorities, competitor facts, and pending strategy decisions to
memory/hot-cache.md,memory/open-loops.md, andmemory/research/. - Done when: every shortlisted keyword carries volume + difficulty + intent, each with source ref, observation time/window, market/language, and evidence label; an applicable missing value is
Unknownwith its gap reason, never N/A; keywords are grouped into pillar + cluster hubs; and the deliverable names at least 3 prioritized Quick Win / Growth / GEO opportunities. - Primary next skill: competitor-analysis when the keyword set is ready for market comparison.
Handoff Summary
Emit the standard shape from skill-contract.md §Handoff Summary Format.
Data Sources
Optional integrations: ~~SEO tool, ~~search console. Without tools, ask for seed keywords, audience, goals, and any known metrics. See CONNECTORS.md.
Zero-dependency local helper (no tool needed): python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/suggest.py" "<seed>" --expand harvests free keyword ideas from Google Autocomplete (⚠️ unofficial endpoint). Search volume / difficulty still needs ~~SEO tool or own Search Console data. See scripts/connectors/README.md.
Keyless live-SERP sampling: python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/firecrawl.py" search "<candidate keyword>" --limit 10 (Firecrawl keyless free tier, ~1,000 credits/mo, no key needed) shows who actually ranks for a candidate — feed the top-10 domains and formats into the intent check and the difficulty read as Measured evidence instead of guessing. Volume still needs ~~SEO tool or GSC.
Keyless topic-demand proxy: python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/pageviews.py" "<Topic_Article>" --months 12 returns a topic's real Wikipedia-attention series — Measured direction and seasonality evidence when no volume tool is connected. It is attention, not search volume: use it to rank topics against each other and time them, never to quote a volume number.
Striking-distance shortcut (when ~~search console is connected): before broad discovery, mine your own GSC query data for terms already ranking in positions ~5–20 — page-one tail and page two. These are proven demand a small push can convert, so they are the fastest opportunity set. The Search Analytics API sorts by clicks and has no position filter, so request a high rowLimit and filter the 5–20 window client-side, then attach volume / difficulty / intent to that shortlist. Work this set first; treat its metrics as Measured.
Instructions
When a user requests keyword research, run eight phases and announce each as [Phase X/8: Name]:
- Scope — clarify product, audience, business goal, DR, geography, and language.
- Discover — seed from core, problem, solution, audience, and industry terms.
- Variations — expand with modifiers and long-tail patterns.
- Classify — tag by intent (informational, navigational, commercial, transactional).
- Score — assign difficulty (1-100) and compute
Opportunity = (Volume × Intent Value) / Difficulty, with Intent Value1 / 1 / 2 / 3. - GEO-Check — flag AI-answer-friendly queries such as questions, definitions, comparisons, lists, and how-tos.
- Cluster — group keywords into pillar + cluster topic hubs.
- Deliver — output an Executive Summary, Quick Wins / Growth / GEO opportunities, Topic Clusters, Content Calendar, and Next Steps.
Label every metric Measured (tool/export), User-provided, Calculated, Estimated, Proxy, or Unknown; retain query, locale, language, source ref, observation time, and window per field. Preserve conflicting sources. If an applicable metric is unavailable, mark it Unknown with a missing reason — N/A is only for a genuinely non-applicable field. An attention proxy never becomes search volume, and an Unknown decision-critical input makes the opportunity score NOT_SCORED.
Impact × Confidence lens (optional, layers onto Phase 5)
When you have richer signals than volume/difficulty alone, add a second pass on top of the Opportunity score:
- Impact = volume + CPC + funnel stage + trend direction (how much winning the term is worth).
- Confidence = difficulty + current ranking position + topic authority (how likely you are to win it).
- Priority = Impact × Confidence — surfaces terms that are both valuable and winnable, not just high-volume.
Tag each keyword by funnel stage from its pattern:
- BOFU — commercial/transactional, or contains "pricing", "best", "vs", "services", "agency", "hire", "buy".
- MOFU — informational with buying signals: "how to", "guide", "roi", "case study", "review".
- TOFU — pure informational (definitions, broad questions).
Work BOFU first when revenue is the goal; use TOFU/MOFU for reach and GEO answer coverage. (Impact×Confidence + funnel-stage scoring adapted from an external SEO-ops competitive analysis.)
Quality bar: every recommendation includes at least one specific number. Rewrite generic advice into a concrete keyword + volume + difficulty + reason.
Reference: See references/instructions-detail.md for the full 8-phase templates, expansion patterns, intent table, difficulty tiers, opportunity matrix, GEO indicators, cluster template, actionable-vs-generic examples, and advanced usage.
Example
See references/example-report.md for a full worked sample.
Save Results
Write path: memory/research/keyword-research/YYYY-MM-DD-<topic>.md; promote durable keyword priorities to memory/hot-cache.md. See Skill Contract §Save Results Template.
Reference Materials
- SEO/GEO Evidence and Cycle Control Profile — query/SERP observations, missingness, page bindings, and index receipts
- Instructions Detail — Workflow, scoring, cluster template, advanced usage
- Keyword Intent Taxonomy — Intent signals and content mapping
- Topic Cluster Templates — Pillar and cluster patterns
- Keyword Prioritization Framework — Scoring and prioritization rules
- Example Report — Worked sample
Next Best Skill
Primary: competitor-analysis. Also: content-gap-analysis and serp-analysis.
| 1 | |
| 2 | name keyword-research |
| 3 | slug keyword-research |
| 4 | displayName "Keyword Research · 关键词研究" |
| 5 | summary "关键词研究/内容选题" |
| 6 | description 'Use when the user asks to "find keywords", "挖词", or "搜什么词"; prioritizes search volume, keyword difficulty, intent, and topic clusters from provided or connected data. Not for competitor-relative coverage gaps — use content-gap-analysis. 关键词研究/内容选题' |
| 7 | version "20.1.0" |
| 8 | license Apache-2.0 |
| 9 | compatibility "Claude Code and compatible agent-skill hosts" |
| 10 | homepage "https://github.com/aaron-he-zhu/aaron-marketing-skills" |
| 11 | when_to_use "Use when starting keyword research for a new page, topic, or campaign. Also when the user asks about search volume, keyword difficulty, topic clusters, long-tail keywords, what to write about, 关键词研究, 挖词, 内容选题, or 搜什么词." |
| 12 | argument-hint "<topic or seed keyword> [market/language]" |
| 13 | metadata {"author": "aaron-he-zhu", "version": "20.1.0", "discipline": "seo-geo", "phase": "survey", "geo-relevance": "medium", "hermes": {"tags": ["marketing", "seo-geo", "survey"], "category": "seo-geo"}, "openclaw": {"emoji": "🔍", "homepage": "https://github.com/aaron-he-zhu/aaron-marketing-skills"}} |
| 14 | |
| 15 | |
| 16 | # Keyword Research |
| 17 | |
| 18 | Discovers, scores, and clusters keywords for SEO and GEO planning. |
| 19 | |
| 20 | ## Quick Start |
| 21 | |
| 22 | |
| 23 | Research keywords for [topic/product/service] |
| 24 | |
| 25 | |
| 26 | |
| 27 | What keywords is [competitor URL] ranking for that I should target? |
| 28 | |
| 29 | |
| 30 | ## Skill Contract |
| 31 | |
| 32 | **Expected output**: a prioritized keyword brief plus the standard handoff summary for `memory/research/`. |
| 33 | |
| 34 | **Reads**: topic or seed keyword, target market/language, business goal, site DR, and any user-provided or tool metrics. |
| 35 | **Writes**: a user-facing research deliverable and reusable summary. |
| 36 | **Promotes**: durable keyword priorities, competitor facts, and pending strategy decisions to `memory/hot-cache.md`, `memory/open-loops.md`, and `memory/research/`. |
| 37 | **Done when**: every shortlisted keyword carries volume + difficulty + intent, each with source ref, observation time/window, market/language, and evidence label; an applicable missing value is `Unknown` with its gap reason, never N/A; keywords are grouped into pillar + cluster hubs; and the deliverable names at least 3 prioritized Quick Win / Growth / GEO opportunities. |
| 38 | **Primary next skill**: [competitor-analysis] when the keyword set is ready for market comparison. |
| 39 | |
| 40 | ### Handoff Summary |
| 41 | |
| 42 | > Emit the standard shape from [skill-contract.md §Handoff Summary Format]. |
| 43 | |
| 44 | ## Data Sources |
| 45 | |
| 46 | Optional integrations: ~~SEO tool, ~~search console. Without tools, ask for seed keywords, audience, goals, and any known metrics. See [CONNECTORS.md]. |
| 47 | |
| 48 | **Zero-dependency local helper** (no tool needed): `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/suggest.py" "<seed>" --expand` harvests free keyword ideas from Google Autocomplete (⚠️ unofficial endpoint). Search *volume / difficulty* still needs `~~SEO tool` or own Search Console data. See [scripts/connectors/README.md]. |
| 49 | |
| 50 | **Keyless live-SERP sampling**: `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/firecrawl.py" search "<candidate keyword>" --limit 10` (Firecrawl keyless free tier, ~1,000 credits/mo, no key needed) shows who actually ranks for a candidate — feed the top-10 domains and formats into the intent check and the difficulty read as **Measured** evidence instead of guessing. Volume still needs `~~SEO tool` or GSC. |
| 51 | |
| 52 | **Keyless topic-demand proxy**: `python3 "${CLAUDE_PLUGIN_ROOT}/scripts/connectors/pageviews.py" "<Topic_Article>" --months 12` returns a topic's real Wikipedia-attention series — Measured direction and seasonality evidence when no volume tool is connected. It is *attention, not search volume*: use it to rank topics against each other and time them, never to quote a volume number. |
| 53 | |
| 54 | **Striking-distance shortcut** (when `~~search console` is connected): before broad discovery, mine your own GSC query data for terms already ranking in positions ~5–20 — page-one tail and page two. These are proven demand a small push can convert, so they are the fastest opportunity set. The Search Analytics API sorts by clicks and has **no position filter**, so request a high `rowLimit` and filter the 5–20 window client-side, then attach volume / difficulty / intent to that shortlist. Work this set first; treat its metrics as **Measured**. |
| 55 | |
| 56 | ## Instructions |
| 57 | |
| 58 | When a user requests keyword research, run eight phases and announce each as `[Phase X/8: Name]`: |
| 59 | |
| 60 | **Scope** — clarify product, audience, business goal, DR, geography, and language. |
| 61 | **Discover** — seed from core, problem, solution, audience, and industry terms. |
| 62 | **Variations** — expand with modifiers and long-tail patterns. |
| 63 | **Classify** — tag by intent (informational, navigational, commercial, transactional). |
| 64 | **Score** — assign difficulty (1-100) and compute `Opportunity = (Volume × Intent Value) / Difficulty`, with Intent Value `1 / 1 / 2 / 3`. |
| 65 | **GEO-Check** — flag AI-answer-friendly queries such as questions, definitions, comparisons, lists, and how-tos. |
| 66 | **Cluster** — group keywords into pillar + cluster topic hubs. |
| 67 | **Deliver** — output an Executive Summary, Quick Wins / Growth / GEO opportunities, Topic Clusters, Content Calendar, and Next Steps. |
| 68 | |
| 69 | Label every metric **Measured** (tool/export), **User-provided**, **Calculated**, **Estimated**, **Proxy**, or **Unknown**; retain query, locale, language, source ref, observation time, and window per field. Preserve conflicting sources. If an applicable metric is unavailable, mark it Unknown with a missing reason — N/A is only for a genuinely non-applicable field. An attention proxy never becomes search volume, and an Unknown decision-critical input makes the opportunity score `NOT_SCORED`. |
| 70 | |
| 71 | ### Impact × Confidence lens (optional, layers onto Phase 5) |
| 72 | |
| 73 | When you have richer signals than volume/difficulty alone, add a second pass on top of the `Opportunity` score: |
| 74 | |
| 75 | **Impact** = volume + CPC + funnel stage + trend direction (how much winning the term is worth). |
| 76 | **Confidence** = difficulty + current ranking position + topic authority (how likely you are to win it). |
| 77 | **Priority = Impact × Confidence** — surfaces terms that are both valuable *and* winnable, not just high-volume. |
| 78 | |
| 79 | Tag each keyword by funnel stage from its pattern: |
| 80 | |
| 81 | **BOFU** — commercial/transactional, or contains "pricing", "best", "vs", "services", "agency", "hire", "buy". |
| 82 | **MOFU** — informational with buying signals: "how to", "guide", "roi", "case study", "review". |
| 83 | **TOFU** — pure informational (definitions, broad questions). |
| 84 | |
| 85 | Work BOFU first when revenue is the goal; use TOFU/MOFU for reach and GEO answer coverage. (Impact×Confidence + funnel-stage scoring adapted from an external SEO-ops competitive analysis.) |
| 86 | |
| 87 | **Quality bar**: every recommendation includes at least one specific number. Rewrite generic advice into a concrete keyword + volume + difficulty + reason. |
| 88 | |
| 89 | > **Reference**: See [references/instructions-detail.md] for the full 8-phase templates, expansion patterns, intent table, difficulty tiers, opportunity matrix, GEO indicators, cluster template, actionable-vs-generic examples, and advanced usage. |
| 90 | |
| 91 | ## Example |
| 92 | |
| 93 | See [references/example-report.md] for a full worked sample. |
| 94 | |
| 95 | ## Save Results |
| 96 | |
| 97 | Write path: `memory/research/keyword-research/YYYY-MM-DD-<topic>.md`; promote durable keyword priorities to `memory/hot-cache.md`. See [Skill Contract] §Save Results Template. |
| 98 | |
| 99 | ## Reference Materials |
| 100 | |
| 101 | [SEO/GEO Evidence and Cycle Control Profile] — query/SERP observations, missingness, page bindings, and index receipts |
| 102 | [Instructions Detail] — Workflow, scoring, cluster template, advanced usage |
| 103 | [Keyword Intent Taxonomy] — Intent signals and content mapping |
| 104 | [Topic Cluster Templates] — Pillar and cluster patterns |
| 105 | [Keyword Prioritization Framework] — Scoring and prioritization rules |
| 106 | [Example Report] — Worked sample |
| 107 | |
| 108 | ## Next Best Skill |
| 109 | |
| 110 | Primary: [competitor-analysis]. Also: [content-gap-analysis] and [serp-analysis]. |
| 111 |
Discussion
Alternatives
Browse more free Claude skills or everything in Marketing.