Install
openclaw skills install seo-keyword-researchKeyword research and analysis skill for any website. Performs systematic keyword discovery, competitive gap analysis, intent classification, difficulty scori...
openclaw skills install seo-keyword-researchMust load the web-access skill and follow its instructions.
Extract the domain from the URL the user provides (e.g. example.com), then read the profile file:
~/.claude/skills/keyword-research/data/{domain}.json
If the user did not provide a URL, ask for the target site URL first, extract the domain, then check for a profile.
Only ask for fields not yet stored in the profile:
| Field | Description | First run | Later runs |
|---|---|---|---|
url | Full site URL | Required | Skip if known |
business | One-line business description | Required | Skip if known |
region | Target region (e.g. Singapore) | Required | Skip if known |
language | Target language(s) (e.g. English, Chinese) | Required | Skip if known |
competitors | Competitor site list | Optional | Skip if known; user can update anytime |
tools.gsc | GSC access | Ask first time GSC is needed | Skip if known |
tools.ahrefs | Ahrefs account tier | Ask first time | Skip if known; "none" skips all Ahrefs steps |
tools.semrush | Semrush account tier | Ask first time | Skip if known; "none" skips all Semrush steps |
tools.gkp | Has Google Ads account (GKP) | Ask first time | If false, use Ahrefs free keyword tools instead |
focus | Focus of this analysis | Ask every time (tasks vary) | Ask every time |
After each run (or whenever new info is added), write back to the profile file immediately so the next session starts with complete data.
Profile format (JSON):
{
"url": "https://www.sunriselink.sg",
"business": "MOM-licensed domestic helper agency in Singapore, helping families hire maids from Indonesia, Myanmar, Philippines",
"region": "Singapore",
"language": ["English", "Chinese"],
"competitors": ["nationmaid.com.sg", "universal.com.sg", "firstmaid.com.sg"],
"tools": {
"gsc": true,
"ahrefs": "none",
"semrush": "free",
"gkp": true
},
"updated": "2026-04-15 10:05:23"
}
Valid values for tools.ahrefs and tools.semrush:
"paid" — Paid account; full feature access"free" — Free account; limited features (see skip rules)"none" — No account; skip all steps for that toolIf the profile directory does not exist, create it first: mkdir -p ~/.claude/skills/keyword-research/data/
Ahrefs:
| Account tier | Step 2B behavior | Step 3 behavior |
|---|---|---|
"paid" | Use Site Explorer + Content Gap (full competitor gap analysis) | Use Keywords Explorer |
"free" | Skip Site Explorer/Content Gap; use site: search to infer competitor content structure | Use ahrefs.com/keyword-generator (no login) |
"none" | Skip all Ahrefs; do not open any Ahrefs page | Same as left |
Semrush:
| Account tier | Step 2B behavior | Step 3 behavior |
|---|---|---|
"paid" | Use Keyword Gap (full competitor gap analysis) | Use Keyword Magic Tool (unlimited queries) |
"free" | Skip Keyword Gap; use Keyword Magic Tool (10 queries/day cap—watch usage) | Use Keyword Magic Tool (mind the cap) |
"none" | Skip all Semrush; do not open any Semrush page | Same as left |
Other tools:
tools.gkp: false → In Step 3D use Ahrefs free keyword tools instead; do not push signing up for Adstools.gsc: false → Skip Step 1 entirely; start from Step 2The user may say at any time e.g. "I upgraded Ahrefs to paid" — update tools.ahrefs from "free" to "paid" and save.
Goal: Find queries that already get impressions but are underutilized—the fastest wins.
Actions (via CDP automation):
Navigate directly to this URL (replace domain) to enable the 28-day window and Position column in one step:
https://search.google.com/search-console/performance/search-analytics?resource_id=sc-domain%3A{domain}&num_of_days=28&metrics=CLICKS%2CIMPRESSIONS%2CCTR%2CPOSITION
⚠️ Use 28 days, not the default 3 months: If the site has not been SEO-optimized for long, a 3-month average mixes in a lot of pre-optimization low-rank data and skews conclusions badly (in practice ~4× difference).
Then set rows-per-page to 500 and extract all data in one pass (steps in references/gsc-operations.md).
Priority filters:
Hit a login wall: Tell the user to log into GSC in Chrome with a property-verified account, then continue. If there is no GSC data (new site), skip to Step 2.
Note: GSC only shows queries the site has already appeared for. Fully uncovered queries are invisible here; discover them in Steps 2–3.
CDP playbook: See references/gsc-operations.md.
Goal: Find queries competitors rank for where the target site has no presence—the highest-value uncovered opportunities.
A. Identify competitors (if the user did not provide any):
B. Competitor analysis (paid Ahrefs/Semrush):
B. Competitor analysis (free alternatives):
site:competitor.com → infer content structure and topic coverageHit a paywall: Ask if the user has an account; if not, use the free path or ask for screenshots/copied data.
Goal: From seed terms, systematically mine long-tail, question, and local variants.
A. Google Autocomplete (free, closest to real search behavior):
[term], [term] how, [term] what, [term] whybest [term], [term] vs, [term] cost, [term] near memaid _ singaporeB. AnswerThePublic (3 free searches/day):
C. AlsoAsked (3 free runs):
D. Google Keyword Planner (free; needs Google Ads):
Google Ads login required: Ads accounts are free to create; no need to run ads. Guide signup if needed, then use Planner.
Classify collected queries by intent; rank by difficulty and conversion potential.
Intent taxonomy (every query gets one code):
| Code | Intent type | Typical signals | Content angle |
|---|---|---|---|
| I | Informational | how/what/why/guide/tips | Blog posts, FAQ |
| C | Commercial investigation | best/vs/compare/review/top | Comparison pages, listicles |
| T | Transactional | buy/hire/contact/book/price | Service pages, landing pages |
| N | Navigational | brand, site name | Brand defense, homepage |
Priority score:
Priority score = intent fit (1–5) × conversion potential (1–5) ÷ competition difficulty (1–5)
Prioritize: queries with score ≥ 10.
Methodology and sources: references/methodology.md.
Full tool playbook: references/tools.md.
GSC CDP guide (including pitfalls): references/gsc-operations.md.
## Keyword research report — [Site name]
Date: YYYY-MM-DD | Region: XX | Language(s): XX
### 1. GSC optimization opportunities (existing queries)
| Keyword | Current rank | Impressions | CTR | Recommendation |
|--------|---------|-------|-------|---------|
### 2. Competitor gap keywords (highest value)
| Keyword | Intent | Monthly volume | KD | Competitor has / we lack | Priority score |
|--------|-----|---------|-----|--------------|---------|
### 3. Uncovered long-tail keywords
| Keyword | Intent | Monthly volume | KD | Content recommendation |
|--------|-----|---------|-----|-----------|
### 4. Priority action list (Top 10)
Sort by priority score descending; each row: suggested action (new page / optimize existing / blog) + suggested target URL