Keyword Volume & Clustering

Keyword research

by aaron-he-zhu · Apache-2.0 license · ★ 2,858 on GitHub · v20.1.0

Keyword research cover

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.

---
name: keyword-research
slug: keyword-research
displayName: "Keyword Research · 关键词研究"
summary: "关键词研究/内容选题"
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. 关键词研究/内容选题'
version: "20.1.0"
license: Apache-2.0
compatibility: "Claude Code and compatible agent-skill hosts"
homepage: "https://github.com/aaron-he-zhu/aaron-marketing-skills"
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 搜什么词."
argument-hint: "<topic or seed keyword> [market/language]"
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"}}
---

# Keyword Research

Discovers, scores, and clusters keywords for SEO and GEO planning.

Overview

Discovers, scores, and clusters keywords for SEO and GEO planning.

Manual install (npx, ZIP)
Claude Codenpx skills add aaron-he-zhu/aaron-marketing-skills --skill keyword-research -g -a claude-code
Claude Code (degit)npx degit aaron-he-zhu/aaron-marketing-skills/seo-geo/survey/keyword-research#main ~/.claude/skills/keyword-research-aaron-he-zhu
Claude.ai / desktopZip the folder and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md8.5 KB
Read SKILL.md here
aaron-he-zhu/main1 file shown
SKILL.md
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, and memory/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 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.
  • 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]:

  1. Scope — clarify product, audience, business goal, DR, geography, and language.
  2. Discover — seed from core, problem, solution, audience, and industry terms.
  3. Variations — expand with modifiers and long-tail patterns.
  4. Classify — tag by intent (informational, navigational, commercial, transactional).
  5. Score — assign difficulty (1-100) and compute Opportunity = (Volume × Intent Value) / Difficulty, with Intent Value 1 / 1 / 2 / 3.
  6. GEO-Check — flag AI-answer-friendly queries such as questions, definitions, comparisons, lists, and how-tos.
  7. Cluster — group keywords into pillar + cluster topic hubs.
  8. 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

Next Best Skill

Primary: competitor-analysis. Also: content-gap-analysis and serp-analysis.

1---
2name: keyword-research
3slug: keyword-research
4displayName: "Keyword Research · 关键词研究"
5summary: "关键词研究/内容选题"
6description: '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. 关键词研究/内容选题'
7version: "20.1.0"
8license: Apache-2.0
9compatibility: "Claude Code and compatible agent-skill hosts"
10homepage: "https://github.com/aaron-he-zhu/aaron-marketing-skills"
11when_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 搜什么词."
12argument-hint: "<topic or seed keyword> [market/language]"
13metadata: {"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 
18Discovers, scores, and clusters keywords for SEO and GEO planning.
19 
20## Quick Start
21 
22```
23Research keywords for [topic/product/service]
24```
25 
26```
27What 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](../competitor-analysis/SKILL.md) 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](../../../references/skill-contract.md).
43 
44## Data Sources
45 
46Optional integrations: ~~SEO tool, ~~search console. Without tools, ask for seed keywords, audience, goals, and any known metrics. See [CONNECTORS.md](../../../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](../../../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 
58When a user requests keyword research, run eight phases and announce each as `[Phase X/8: Name]`:
59 
601. **Scope** — clarify product, audience, business goal, DR, geography, and language.
612. **Discover** — seed from core, problem, solution, audience, and industry terms.
623. **Variations** — expand with modifiers and long-tail patterns.
634. **Classify** — tag by intent (informational, navigational, commercial, transactional).
645. **Score** — assign difficulty (1-100) and compute `Opportunity = (Volume × Intent Value) / Difficulty`, with Intent Value `1 / 1 / 2 / 3`.
656. **GEO-Check** — flag AI-answer-friendly queries such as questions, definitions, comparisons, lists, and how-tos.
667. **Cluster** — group keywords into pillar + cluster topic hubs.
678. **Deliver** — output an Executive Summary, Quick Wins / Growth / GEO opportunities, Topic Clusters, Content Calendar, and Next Steps.
68 
69Label 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 
73When 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 
79Tag 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 
85Work 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](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 
93See [references/example-report.md](references/example-report.md) for a full worked sample.
94 
95## Save Results
96 
97Write path: `memory/research/keyword-research/YYYY-MM-DD-<topic>.md`; promote durable keyword priorities to `memory/hot-cache.md`. See [Skill Contract](../../../references/skill-contract.md) §Save Results Template.
98 
99## Reference Materials
100 
101- [SEO/GEO Evidence and Cycle Control Profile](../../evaluate/performance-monitor/references/evidence-and-cycle-control.md) — query/SERP observations, missingness, page bindings, and index receipts
102- [Instructions Detail](references/instructions-detail.md) — Workflow, scoring, cluster template, advanced usage
103- [Keyword Intent Taxonomy](references/keyword-intent-taxonomy.md) — Intent signals and content mapping
104- [Topic Cluster Templates](references/topic-cluster-templates.md) — Pillar and cluster patterns
105- [Keyword Prioritization Framework](references/keyword-prioritization-framework.md) — Scoring and prioritization rules
106- [Example Report](references/example-report.md) — Worked sample
107 
108## Next Best Skill
109 
110Primary: [competitor-analysis](../competitor-analysis/SKILL.md). Also: [content-gap-analysis](../content-gap-analysis/SKILL.md) and [serp-analysis](../serp-analysis/SKILL.md).
111 
View all files on GitHub →

Details

Version
20.1.0
License
Apache-2.0
Stars on the repo
★ 2,858
Checked
Source
aaron-he-zhu/aaron-marketing-skills ↗
Creator
aaron-he-zhu · 99 listings
View creator

Similar skills

See all →
SkillAgent Browsing AuditorAgriciDaniel/claude-seo · by AgriciDanielAudit and fix agent readiness: the Lighthouse Agentic Browsing fraction, accessibility tree for agents, robots.txt and Content-Signal for AI agents, WAF treatment of agent traffic, llms.txt, Markdown delivery, ai-catalog.json, /.well-known discovery files, and WebMCP tools. Exclude AI citability and brand signals (seo-geo) and commerce protocol depth (seo-ecommerce).★ 17.4k GitHub starsSkillBacklink Profile AnalysisAgriciDaniel/claude-seo · by AgriciDanielBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.★ 17.4k GitHub starsSkillCMS Configuration Helpernowork-studio/notfair-plugin · by nowork-studioConnect a CMS to notfair SEO tools. Guides users through configuring WordPress, Strapi, Contentful, or Ghost — tests the connection, and writes credentials to .env.local. Once set up, seo-analysis automatically cross- references CMS content against Google Search Console data. Use whenever the user says "connect my CMS", "set up WordPress", "configure Strapi", "add Contentful", "connect Ghost", or "CMS setup". Also trigger if the user asks why no CMS data appears in a seo-analysis report.★ 3.9k GitHub starsSkillBacklink Comparison ToolRyze-AI-Adgent/open-seo-mcp-skills · by Ryze-AI-AdgentBacklink profile for any domain — referring domains, authority, anchors, new/lost links, and a side-by-side vs a competitor. Use when asked "check my backlinks", "backlink profile of X", "who links to them", or "link gap vs competitor".★ 3.1k GitHub starsSkillWeb Vitals Auditoraddyosmani/web-quality-skills · by addyosmaniOptimize Core Web Vitals (LCP, INP, CLS) for better page experience using field and lab evidence. Use when asked to "improve Core Web Vitals", "fix LCP", "reduce CLS", "optimize INP", "page experience optimization", or "fix layout shifts".★ 2.8k GitHub starsSkillSEO Publishing Looptsingyuai/growth-lab · by tsingyuaiRun an SEO page observation-action-review loop with persistent Memory by coordinating demand research, page creation, adversarial review, image generation, IndexNow submission, and performance review. Use when taking an SEO page from opportunity discovery through publication, measurement, iteration, or continuing a previous SEO loop from Memory.★ 2k GitHub stars

More from aaron-he-zhu

SkillAd Test Designeraaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "design an A/B test", "set up a creative/landing test", "run an incrementality test", or "is this result statistically and practically material?"; produces a hypothesis, variant matrix, sample-size/duration/power plan, and a documented effect/uncertainty read from own exported results. It applies only a precommitted owner-approved action rule; the statistical helper never chooses a business action. Not for producing variants — use ad-creative-builder; not for reading back one shipped change — use paid-measurement-loop. 广告AB测试设计/实验设计/显著性判定/增效测试★ 2.9k GitHub starsSkillAdvocacy Program Designeraaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "design an employee advocacy program", "set up founder-led sharing", or "build a share kit for the team"; produces an advocacy program blueprint in two modes — participation-driven opt-in (default) or top-down assigned with its coercion and authenticity risks flagged — with a voluntary opt-in roster spec submitted as channel-registry proposal events, share kits with mandatory per-person variation, staggered human posting windows plus anti-pod guardrails (no coordinated identical reshares, no engagement rings), per-person material-connection disclosure lines per FTC and 《互联网广告管理办法》, and a Slack/Teams distribution spec. Not for paid creator campaigns — use campaign-planner. 员工倡导/创始人IP分享/内部分享计划/披露合规★ 2.9k GitHub starsSkillBuyer Belief Mapperaaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "map what our buyers believe", "capture the objections we keep hearing", or "find the switching forces that move the beachhead"; produces a belief map of the beachhead — held beliefs and mental models, the recurring objections and their reframes, and the JTBD four forces (push of the problem, pull of the new, anxiety of switching, habit of the present) — each item sourced from interviews or win-loss notes (User-provided) and labeled Measured / User-provided / Estimated, with any unverified quote or comparative claim marked "[needs source]" and routed to the claims candidates, never adjudicated here. Not for demographic or persona profiling — use audience-mapper; not for the positioning canvas — use positioning-truth-tracer. 受众信念/异议地图/切换四力/流失语言★ 2.9k GitHub starsSkillTarget Audience Profileraaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "analyze my target audience", "build an audience profile for influencer targeting", "research a niche community", or "deep-dive a subculture before partnering with creators"; in audience mode produces demographic/psychographic profiles, a platform-priority matrix, named personas, and an influencer-selection criteria set, and in niche mode produces a community map, culture decode (language/norms/taboos), key-voice tiers, a Brand Fit Score, and a phased entry strategy. Not for finding specific creators to contract — use influencer-discovery; not for scoring a shortlist on Suitability — use fit-scorer. 目标受众画像/人群分析 · 细分社群/亚文化调研★ 2.9k GitHub starsSkillAudience Segment Builderaaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "build audience segments from my customer list", "make value-based / lookalike seed lists", "set up exclusion / suppression segments", or "map audiences to funnel stages across platforms"; turns the user''s OWN customer/CRM/GA4 export into seed audiences, value-based lookalike SEED lists, exclusion/suppression segments, and a cross-platform funnel-stage targeting map, informing the ROAS A (Audience) dimension. Not for building account structure or match types — use campaign-architect; not for organic SERP intent — use keyword-research. 付费广告受众分群/种子人群/排除人群/相似人群种子★ 2.9k GitHub starsSkillBrand Voice Codifieraaron-he-zhu/aaron-marketing-skills · by aaron-he-zhuUse when the user asks to "codify our brand voice", "define naming rules for our products and tiers", or "write the tone-of-voice guide with banned phrases"; produces the brand-level voice canon (register, tone spectrum, banned-phrase list, few-shot examples drawn only from the brand''s own published material) and the naming tax (product / feature / tier naming rules plus approved and banned terms) that seeds the narrative-registry canon and that every channel''s voice adaptation points up to. Not for per-platform voice adaptation — use channel-registry''s voice-dossier; not for finished copy or blog posts — use content-writer; not for the message hierarchy itself — use message-system-architect; not for claim adjudication — use offer-claims-registry. 品牌语气/词汇表/命名税/禁用词/品牌语言规范★ 2.9k GitHub stars