Install
openclaw skills install seo-keyword-researchKeyword research and analysis skill for any website. Performs systematic keyword discovery, competitive gap analysis, intent classification, difficulty scoring, and priority ranking. Use when the user wants to find new keyword opportunities, analyze which keywords competitors rank for, audit existing keyword coverage, build a keyword map, or plan content around search demand. Works for any domain, language, or niche.
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