# Site Keyword Research

> 整站关键词研究与深度挖掘。输入一个网站域名或URL，自动完成：首页主题分析 → 递归式关键词树扩展（Google联想词多级分叉）→ 去重合并 → 关键词分层 → 10词SERP详细分析 → 3词定方向，最终输出完整 Markdown 报告。 触发条件：用户说"分析网站关键词"、"关键词研究"、"keyword research"、"挖掘某网站的关键词"、或提供一个URL说"分析这个网站的SEO关键词机会"。

- Skill: `kennyzir/site-keyword-research` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add kennyzir/site-keyword-research`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kennyzir/site-keyword-research/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: kennyzir (https://skillmd.com/u/kennyzir)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/kennyzir/site-keyword-research

---


# Site Keyword Research Skill

输入一个网站域名，输出完整的关键词研究与竞争度分析报告。**核心改进：递归式关键词树扩展——不是一次扩展就停，而是持续分叉挖掘，直到词库收敛。**

---

## 核心工作流

```
阶段一：递归关键词树扩展（不限次数，直到词库收敛）
    → 种子词 → Google搜索 → 提取 Related Searches + PASF + 问题词
    → 每个新词 → 再搜索 → 再提取 → 持续分叉
    → 直到：不再发现新词 或 词库达到上限（100个）

阶段二：去重合并 → 分层筛选（20词）
    → 去重、去无关词
    → 选20个最有价值的词进详细分析

阶段三：10词SERP详细分析 → 3词定方向
    → 竞争度打分
    → 给出最重要的3个词 + 具体操作建议
```

**关键词来源标注规范（强制）：**

| 标签 | 含义 | 可信度 |
|------|------|-------|
| `[PASF]` | 来自 Google「People Also Search For」的真实搜索推荐 | ⭐⭐⭐⭐⭐ |
| `[RS]` | 来自 Google Related Searches 联想词 | ⭐⭐⭐⭐ |
| `[Q]` | 来自 Google 搜索结果中的「People Also Ask」问题 | ⭐⭐⭐⭐ |
| `[AI-主题]` | AI 根据站点主题扩展生成，需人工验证 | ⭐⭐⭐ |
| `[竞品]` | 从 SERP 结果中竞品内容提取 | ⭐⭐⭐⭐ |

---

## 输入参数

执行 skill 时需要提供以下参数：

| 参数 | 说明 | 默认值 |
|------|------|-------|
| `domain` | 要分析的网站域名（如 `example.com`） | 必填，从用户输入提取 |
| `output_dir` | 报告输出目录 | 可选，默认为当前目录 |

**域名格式支持：**
- `https://example.com` → 自动提取 domain
- `example.com` → 直接使用
- `www.example.com` → 提取 domain

---

## 第一阶段：递归关键词树扩展（核心改进）

### 1.1 站点主题分析

使用 `web_fetch` 抓取首页（maxChars: 2000），识别：
- 站点类型（产品工具/内容媒体/电商/SAAS/论坛）
- 核心主题（2-4个主题词，作为种子词根）
- 目标用户群体
- 主要功能/服务

同时抓取首页 HTML 标题、meta description。

### 1.2 种子词确定

根据站点分析，确定 3-5 个种子关键词（作为树的根节点）：
- 核心产品/服务词
- 核心场景/用途词
- 核心用户需求词

### 1.3 递归扩展算法（关键词树构建）

**这是本 skill 的核心改进——不是一次扩展就停，而是持续分叉。**

```
扩展规则：
每次取队首关键词出列 → Google搜索 → 提取三类词 → 入库 → 新词继续入队
直到队列空（词库收敛）或达到上限（100个唯一词）
```

**搜索格式：**
```
https://www.google.com/search?q=<URL编码关键词>&hl=en
```

**反爬策略（必须执行）：**
每次打开搜索页后，等待 **3-5 秒** 再执行 snapshot，给 JS 渲染足够时间：
```javascript
browser(action=open, url="https://www.google.com/search?q=...&hl=en")
browser(action=wait, timeMs=4000)  // 等待 JS 渲染
browser(action=snapshot, compact=true)
```

连续搜索时，两次搜索之间随机等待 **2-4 秒**，避免固定频率触发反爬：
```javascript
browser(action=wait, timeMs=2000 + Math.random() * 2000)
```

如果遇到 CAPTCHA 验证页面：
1. 等待 5 秒后刷新页面重试
2. 最多重试 2 次
3. 如果仍然失败，记录「CAPTCHA 拦截」标注，改用 `web_search` 补充数据，并在报告中说明 SERP 数据为推算值

**每次搜索必须提取以下内容：**

#### A. Related Searches（RS）- 联想词
从搜索结果页底部「Related Searches」区域提取所有联想词，每个标注 `[RS]`。

#### B. People Also Search For（PASF）- 推荐词
从 SERP 中「People Also Search For」区域提取推荐词，每个标注 `[PASF]`。

#### C. People Also Ask（PAA）- 问题词
从 SERP 中「People Also Ask」区域提取问题，每个标注 `[Q]`。

**提取方法：**
- 用 `browser(action=open, url="...")` 打开搜索页
- `browser(action=snapshot, compact=true)` 获取 DOM
- 搜索 `Related Searches`、`People Also Search For`、`People Also Ask` 区块
- 每个区块内的词/问题逐一提取

**递归扩展流程图：**

```
种子词队列：[seed1, seed2, seed3]
已收集词库：[]

第1轮：
  出列 seed1 → 搜索 → 得到 [rs1, rs2, pasf1, q1]
  入库：[rs1[RS], rs2[RS], pas1[PASF], q1[Q]]
  新词入队：[rs1, rs2, pasf1, q1, seed2, seed3]

第2轮：
  出列 rs1 → 搜索 → 得到 [rs1a, pasf1a, q1a]
  入库：[rs1a[RS], pasf1a[PASF], q1a[Q]]
  新词入队：[rs2, pasf1, q1, seed2, seed3, rs1a, pasf1a, q1a]

第3轮：
  出列 rs2 → 搜索 → ...
  ...持续直到队列空或达到100词上限
```

### 1.4 去重与过滤规则

每次入库前执行去重：

**必须去重：**
- 完全相同的词（大小写不敏感）
- 复数形式与原形视为同义词（保留一个）
- 与站点主题完全无关的词

**词库上限：**
- 目标：收集 **80-100 个唯一关键词**
- 实际执行中如果达到 100 个，停止扩展，进入分层
- 如果队列提前耗尽（词库收敛），也停止扩展

### 1.5 AI 辅助扩展（补充手段，不是主力）

在递归扩展完成后，如果词库不足 50 个，用 AI 补充扩展：

基于已收集的 `[PASF]` 和 `[RS]` 词，识别词根模式，生成更多变体：

**模式举例：**
- `{词根} + generator / maker / creator`
- `{词根} + free / online / AI`
- `how to {词根} / {词根} tutorial / {词根} for beginners`
- `best {词根} / {词根} alternatives / {词根} vs`

每个生成的词标注 `[AI-主题]`，需入库参与后续分层。

### 1.6 候选词收集结果记录

最终词库格式（每个词必须标注来源和深度）：

```
{关键词}  [来源标签|扩展深度]
例：
oracle card generator  [RS|depth=1]      — 从种子词第1轮扩展
emotional tarot reading  [PASF|depth=2]  — 从第2轮词扩展而来
how to use oracle cards  [Q|depth=1]      — 从种子词第1轮扩展
ai oracle card generator  [AI-主题]       — AI补充生成
```

**扩展深度说明：**
- `depth=1`：直接从种子词一次扩展而来，最相关
- `depth=2`：从 depth=1 的词再扩展，相关性稍弱但覆盖更广
- `depth=3+`：多级扩展，可能发现意外的低竞争词

---

## 第二阶段：分层筛选（20词）

### 2.1 关键词相关性初筛

**保留标准（同时满足）：**
- 与站点核心主题高度相关
- 搜索意图明确
- 不涉及品牌词（除非该品牌是对手）

**剔除标准（满足任一即剔除）：**
- 完全无关领域（如医疗、法律等专业领域）
- 过于泛泛
- 无实际搜索信号（Google 没有推荐）

### 2.2 分层（四层模型）

| 层级 | 定义 | 目标数量 | 策略 |
|------|------|---------|------|
| **核心词** | 高搜索量，主赛道 | 1-3个 | 品牌期/长期目标 |
| **中尾词** | 中等搜索量，明确意图 | 3-5个 | 3-6个月内容建设 |
| **长尾词** | 低搜索量，精准需求 | 8-12个 | 立即行动，快速见效 |
| **问题词** | 问句形式，信息需求 | 5-8个 | 博客内容，覆盖漏斗顶端 |

### 2.3 最终20词筛选标准

从词库中选 20 个进入 SERP 分析：

**优先保留：**
1. 有 `[PASF]` 或 `[RS]` 来源（Google 真实推荐）
2. 包含高意图修饰词（free、best、generator、alternative、how to）
3. 搜索意图是 Transactional 或 Commercial Investigation
4. 扩展深度浅的词优先（depth=1 > depth=2 > depth=3+）

---

## 第三阶段：10词SERP详细分析

### 3.1 SERP 分析执行

对筛选出的 20 个词，快速扫描 SERP，挑选 10 个最有商业价值的做详细分析。

**快速扫描维度：**
- 广告主密度（0/少/多）
- 现有结果类型（工具/博客/论坛/目录）
- Featured Snippet 情况

**优先分析：**
- Transactional 意图词（商业价值最高）
- 有 `[PASF]` 来源的词（Google 推荐=真实需求）
- 扩展深度浅的词

### 3.2 详细分析维度

对每个入选词，打开 SERP：

```
https://www.google.com/search?q=<URL编码关键词>&hl=en
```

用 `snapshot compact=true` 抓取，记录：

| 分析维度 | 记录内容 |
|---------|---------|
| 广告主数量 | 0 / 1-3 / 4-6 / 6+ |
| 广告主类型 | 列出主要广告主 |
| Featured Snippet | 有 / 无 |
| 视频结果 | 有 / 无（数量） |
| 前10域名 + 类型 | 工具/博客/目录/论坛/官方 |
| 前10内容深度 | 薄页(<200字) / 中等 / 深度(1000+字) |
| 高权重站数量 | Wikipedia/Quora/Amazon/大型媒体 |
| PASF 推荐词 | 列出 Google 推荐的关联搜索词 |

### 3.3 竞争度打分

| 维度 | 1分 | 2分 | 3分 | 4分 | 5分 |
|------|-----|-----|-----|-----|-----|
| 广告主 | 0 | 1-2 | 3-5 | 6-8 | 8个以上 |
| 高权重站 | 0 | 1 | 2-3 | 4-5 | 5个以上 |
| Featured Snippet | 无 | — | 1个 | — | 2个以上 |
| 视频结果 | 无 | — | 1-2个 | — | 3个以上 |
| 内容深度 | 全薄页 | 多数薄 | 混合 | 多数深 | 全深度 |

**总分 5-10 → 🟢 低竞争（立即行动）**
**总分 11-17 → 🟡 中竞争（可切入）**
**总分 18-25 → 🔴 高竞争（观望/迂回）**

---

## 第四阶段：Top 3 词定方向

### 4.1 选词标准

综合以下选出最重要的 3 个词：

1. **竞争度低**（分数 ≤ 10）
2. **Transaction 意图强**（商业转化价值高）
3. **Google 推荐词优先**（[PASF] 来源）
4. **扩展深度浅**（depth=1 或 depth=2）

### 4.2 策略报告格式

对每个 Top 3 词，给出：

```
关键词：{词}  [来源标签|扩展深度]

分层：{核心词/中尾词/长尾词/问题词}

竞争度：{分数}分 / {低中高三档}

机会描述：
{一句话说明为什么这个机会现在存在，以及为什么 Google 推荐这个词}

推荐动作（具体到操作）：
- 第一步：做什么
- 第二步：做什么
- 第三步（如需要）：做什么

落地页建议：
- 标题：{建议标题}
- 核心卖点：{3个核心卖点}
- CTA：{建议的 Call to Action}
- 覆盖长尾：{建议同时覆盖的关联长尾词}

外链机会：
{对应的外链建设策略}
```

---

## 输出规范

### Markdown 报告（主要内容输出到这里）

报告自动保存到文件，文件名格式：
```
{output_dir}/{domain}-keyword-research-{YYYY-MM-DD}.md
```

如果 `output_dir` 未指定，默认保存到执行目录。

**报告结构：**

```
# {域名} 关键词研究报告 — YYYY-MM-DD

## 第一章：站点定位分析
## 第二章：递归关键词树扩展记录
## 第三章：完整候选词库（全部词，含来源+扩展深度）
## 第四章：关键词分层矩阵（20词）
## 第五章：10词SERP详细分析
## 第六章：综合机会矩阵（20词横向对比）
## 第七章：Top 3 关键词定方向
## 第八章：外链策略建议
## 第九章：数据说明与后续建议
```

### 聊天回复（摘要形式）

```
✅ 关键词研究报告已生成

**站点：** {domain}
**递归扩展深度：** {N}轮
**候选词总数：** {N}个
**分析词数：** {M}个
**竞争度概况：** 🟢低竞{N1}个 / 🟡中竞{N2}个 / 🔴高竞{N3}个

📄 完整报告：{filename}

🥇 Top 3 关键词：
1. {词1} — {一句话机会描述}
2. {词2} — {一句话机会描述}
3. {词3} — {一句话机会描述}

💡 低竞争词发现：{1-2个特别值得关注的低竞争词简述}
```

---

## 关键原则

- **递归扩展必须执行到底**：不允许只扩一轮就停，必须持续到词库收敛或达到上限
- **每个词必须标注来源和扩展深度**：不标注的词视为 `[AI-主题]`
- **PASF 词优先分析**：Google 推荐 = 真实用户需求，最有价值的信号
- **20词 → 10词筛选**：20词进分层，10词做详细 SERP 分析，不要跳过
- **Top 3 必须有具体操作建议**：不能只给词不给动作
- **扩展深度浅的词优先**：depth=1 最相关，depth=3+ 可能发现意外机会但可信度稍低

---

## 错误处理

| 场景 | 处理 |
|------|------|
| web_fetch 403/404 | 跳过，用已知主题信息继续分析 |
| 站点是全新站（DA≈0）| 标注"新站，竞品内容质量差距是核心机会指标" |
| Google 弹出验证 | 必须用 browser retry（等5秒刷新 / 最多重试2次），禁止降级到 web_search；如果 browser 完全失败，标注「搜索数据获取失败，关键词来源基于官网分析+AI扩展，可信度降低」，不得使用 AI 猜测真实搜索量数据 |
| web_search 全部失败 | 标注「搜索数据获取失败，关键词来源基于官网分析+AI扩展，可信度降低」，不得使用 AI 猜测真实搜索量数据；报告中必须明确标注每个关键词的来源标签，无 [PASF]/[RS] 标签的词单独列出 |
| 队列提前耗尽（词库收敛） | 记录收敛轮次，进入分层分析 |
| SERP 无法抓取（地理位置限制）| 标注"竞争度为推算值，建议在美国节点复查 PASF 数据" |

---

## 参考文件

- 完整报告模板：`references/output-template.md`
- 单关键词竞争度分析：`keyword-competition-analysis/SKILL.md`

