# 🔎 SEO 内容优化模块 — Writing Triadic v2.9.1

> 从 v2.8 的"基础规则注入"升级为独立 SEO 模块。覆盖关键词策略、搜索意图匹配、标题优化、结构分析、可读性评分、内链策略六大子系统。
> v2.9.1 与 Reader 自适应评分契约对齐：SEO 作为 10 分维度启用时，总分仍保持 100 分。

---

## 一、触发条件

SEO 模块在以下条件**全部满足**时激活：

1. 当前模板属于 **SEO 适用类型**：
   - #1 技术文档
   - #2 博客文章
   - #5 商业/产品文案
   - #11 产品说明书/教程指南
   - #15 产品评测
2. 用户未明确说"不需要 SEO"或"不用管搜索排名"
3. 写作目标包含"公开发布"意图（发布到网站/公众号/知乎/掘金等公开平台）

**跳过条件**：个人日记、内部汇报、朋友圈文案、私密文档、小说/散文。

---

## 二、工作流

```
Phase 1.6: SEO 分析 (Creator)
├── Step 1: 核心关键词提取 (基于需求分析.md + 写作计划.md)
├── Step 2: 搜索意图分类 (信息型/交易型/导航型/商业调查型)
├── Step 3: 关键词密度预设 (目标密度 1.5-2.5%)
├── Step 4: 标题优化方案 (2-3 个候选标题 + 评分)
├── Step 5: 注入 Phase 2 写作规则.md「## 🔎 SEO 约束」
├── Step 6: Phase 3 Executor 自动遵循 SEO 约束生成初稿
└── Step 7: Phase 4 Reader 按自适应 100 分权重启用 SEO 维度
```

---

## 三、核心算法与规则

### 3.1 关键词提取算法

从 `需求分析.md` 中提取：

| 输入 | 提取方式 |
|------|----------|
| 核心主题 | 用户原话中的核心名词短语 |
| 目标受众 | 受众描述中的场景词（如"Java 开发者"→ 关键词: Java） |
| 写作目的 | 目的动词的名词化（如"教人搭建"→ 关键词: 搭建教程） |
| 平台信息 | 平台 + 内容格式（如"掘金博客"→ 长尾词: 掘金教程） |

**提取规则**：
1. **主关键词 (Primary KW)**：1 个，最能概括主题的 2-4 字短语
2. **次级关键词 (Secondary KW)**：2-3 个，主题的侧面或子话题
3. **长尾关键词 (Long-tail KW)**：1-2 个，自然问句或场景化短语

**示例**：
```
用户需求: "写一篇 Spring Boot 微服务拆分的教程，发到掘金"
→ 主关键词: Spring Boot 微服务
→ 次级关键词: 单体拆分, 微服务架构
→ 长尾关键词: Spring Boot 微服务拆分实战, 单体转微服务指南
```

### 3.2 关键词密度计算

**公式**：
```
关键词密度 = (关键词出现次数 / 总词数) × 100%
目标密度: 1.5% - 2.5%（每千字 15-25 次）
长尾关键词密度: 0.5% - 1.0%（每千字 5-10 次）
```

**密度检测注入 Phase 2 写作规则**：
```markdown
## 🔎 SEO 关键词约束 (自动注入)
- 主关键词「XXX」密度目标: 1.5-2.5% (≈每千字 15-25 次)
- 次级关键词「YYY」密度目标: 0.8-1.5% (≈每千字 8-15 次)
- 长尾关键词「ZZZ」密度目标: 0.5-1.0% (≈每千字 5-10 次, 至少出现在 1 个 H2 中)
- ⚠️ 禁止关键词堆砌 (keyword stuffing): 连续 3 句话含同一关键词 → 不通过
```

### 3.3 搜索意图分类

| 意图类型 | 特征 | 标题策略 | 内容策略 |
|----------|------|----------|----------|
| **信息型** (Informational) | "怎么" / "如何" / "是什么" / "教程" | 教程式标题: "如何做X: 一份完整指南" | 结构化步骤 + FAQ |
| **交易型** (Transactional) | "推荐" / "哪个好" / "对比" / "购买" | 对比式标题: "2026 年 X 大 Y 横向对比" | 对比表 + 购买建议 |
| **导航型** (Navigational) | 品牌名/产品名/工具名 | 速查式标题: "XX 完全指南/文档" | 快速入口 + 概览 |
| **商业调查型** (Commercial) | "评测" / "值得买吗" / "性价比" | 评测式标题: "XX 深度评测: 值不值得买?" | 实测数据 + 优缺点 |

**Creator 自动分类**：基于 Phase 1 收集的「目的」字段自动匹配意图类型。

### 3.4 标题优化评分

每个候选标题按 4 维度打分（满分 10）：

| 维度 | 权重 | 评分标准 |
|------|:----:|----------|
| **关键词位置** | 30% | 关键词在标题前 1/3 位置 → 3分；在中间 → 2分；在末尾 → 1分 |
| **情感吸引力** | 25% | 含数字/否定词/情感词 → 2.5分；平铺直叙 → 1分 |
| **长度控制** | 25% | 20-40 字(中文) / 50-60 字符(英文) → 2.5分；超长 → 1分 |
| **点击意愿** | 20% | 含"完整/终极/最佳/2026/实测"等修饰 → 2分；无修饰 → 1分 |

**输出格式**：
```
📊 标题优化评分
| # | 候选标题 | 关键词 | 情感 | 长度 | 点击 | 总分 |
|---|----------|:------:|:----:|:----:|:----:|:----:|
| 1 | Spring Boot 微服务拆分实战：从单体到微服务的完整指南 | 3.0 | 2.0 | 2.5 | 2.0 | 9.5 |
| 2 | 为什么你的 Spring Boot 项目应该拆成微服务？ | 2.5 | 2.5 | 2.5 | 1.5 | 9.0 |
| 3 | 微服务拆分指南 | 2.0 | 1.0 | 2.5 | 1.0 | 6.5 |

✅ 推荐标题 #1
```

### 3.5 标题层级结构分析

**H1-H2-H3 层级规范**：
```
H1 (1个): 文章主标题，含主关键词
├── H2 (3-5个): 章节标题，至少 1 个含长尾关键词
│   ├── H3 (每个 H2 下 0-3个): 子论点
│   └── H3
├── H2
│   └── H3
└── H2 (如 FAQ / 总结)
```

**检查规则**：
- H1 数量 = 1（超过 1 个 → Warning）
- 至少 1 个 H2 包含长尾关键词
- H2 数量 ≥ 3 且 ≤ 7
- 不允许 H3 直接出现在 H1 下（缺少 H2 父级）
- 每 500 字至少 1 个小标题（H2 或 H3）

### 3.6 Meta Description 质量评分

```markdown
## 🔎 Meta Description 约束 (自动注入)
- 长度: 120-160 字符（中文约 60-80 字）
- 必须包含主关键词
- 含 CTA 暗示（"了解如何..." / "点击查看..." / "一文读懂..."）
- 描述文章价值，不是重复标题
- ❌ 禁止: "本文介绍了..." / "这篇文章关于..." / "欢迎阅读..."
```

### 3.7 内容可读性评分

**中文可读性评估维度**：

| 维度 | 理想值 | 检查方式 |
|------|--------|----------|
| 平均句长 | 15-25 字/句 | 太短→破碎；太长→难读 |
| 段落长度 | 3-5 句/段 | 单句段占比 ≤ 30% |
| 被动语态密度 | ≤ 15% | "被"字句占比 |
| 术语密度 | 2-5 个/千字 | 技术文章上限可放宽到 8 个 |
| 连接词密度 | 3-5 个/千字 | 太多→机械化；太少→跳跃 |

**可读性评分注入 Phase 2**：
```markdown
## 📖 可读性目标 (自动注入)
- 目标 Flesch 等效分: [根据模板自动设定]
  - 技术文档: 30-50
  - 博客文章: 60-70
  - 产品文案: 70-80
- 平均句长: ≤ 25 字
- 被动语态: ≤ 15%
```

### 3.8 内链策略

Phase 2 自动查询 MEMORY.md 中历史文章列表，匹配可插入内链的锚文本：

```markdown
## 🔗 内链建议 (自动注入)
以下是你写过的相关文章，可在正文适当位置插入链接：
| 锚文本 | 链接目标 | 插入位置建议 |
|--------|----------|--------------|
| 「Spring Boot 项目结构」 | /posts/spring-boot-structure | 先决条件段 |
| 「MyBatis Plus 配置」 | /posts/mybatis-plus-setup | 操作步骤段 |
```

**注意**：如果 MEMORY.md 无历史文章 → 标注"这是第一篇，暂无内链建议，发布后可回头补。"

---

## 四、SEO 检查清单（Phase 3 交付物）

Executor 生成初稿后，Creator 在审查阶段（Phase 3 末尾）输出 SEO 检查清单：

```markdown
## 🔎 SEO 检查清单

### 标题
- [ ] H1 含主关键词且在前 1/3 位置
- [ ] H1 长度 20-40 字 (中文)
- [ ] 至少 1 个 H2 含长尾关键词
- [ ] H2 数量 3-7 个

### 关键词
- [ ] 主关键词密度 1.5-2.5%
- [ ] 次级关键词各出现 ≥5 次
- [ ] 长尾关键词出现在 ≥1 个 H2 中
- [ ] 无关键词堆砌（连续 3 句含同一关键词）

### Meta 数据
- [ ] Meta Description 120-160 字符
- [ ] Meta Description 含主关键词 + CTA 暗示
- [ ] Meta Description 不是标题的重复

### 结构
- [ ] 首段 150 字内出现主关键词
- [ ] 每 500 字至少 1 个小标题
- [ ] 有 H2 级别的 FAQ 或总结段

### 可读性
- [ ] 平均句长 ≤ 25 字
- [ ] 段落长度 3-5 句
- [ ] 被动语态 ≤ 15%

### 内链
- [ ] 如有相关历史文章，已插入 ≥1 个内链
```

---

## 五、SEO 评分权重

当 Reader 评审时，SEO 维度权重为 10 分，并从基础维度中重新分配权重，保证总分仍为 100 分：

| SEO 子项 | 评分关注点 | 权重 |
|----------|----------|:----:|
| 关键词覆盖 | 主/次/长尾关键词自然覆盖，首段与 H2/H3 承接 | 4 |
| 搜索意图匹配 | 内容是否真正解决信息型/交易型/导航型/商业调查型需求 | 3 |
| 结构与可读性 | 标题层级、Meta、段落、内链是否利于公开阅读 | 3 |

**启用条件**：当模板属于 SEO 适用类型且 `写作规则.md` 含 `## 🔎 SEO 约束` 时，Reader 自动启用 SEO 维度。完整权重表见 [reader-prompt.md](reader-prompt.md)。

**冲突处理**：如果 SEO 规则与用户明确风格偏好冲突，优先用户偏好；Reader 在评分理由中说明 SEO 牺牲点，不额外惩罚。

---

## 六、与 MEMORY.md 的联动

SEO 模块在每次写作结束后，自动更新 MEMORY.md 中的 SEO 档案：

```markdown
### 🔎 SEO 档案 (自动维护)
- 常用主关键词: [列表，按频率降序]
- 标题风格偏好: [评分最高的标题类型]
- 搜索意图分布: [信息型 X次 / 交易型 Y次 / ...]
- 平均健康分: [历次 SEO 检查清单通过率]
```

使进化引擎能够追踪用户的 SEO 偏好演变。

---

## 七、主关键词密度检测速查表（写入写作规则.md 用）

| 目标字数 | 主关键词目标次数 (1.5-2.5%) | 次级关键词目标次数 (0.8-1.5%) |
|:--------:|:---------------------------:|:-----------------------------:|
| 500 字 | 8-13 次 | 4-8 次 |
| 1000 字 | 15-25 次 | 8-15 次 |
| 2000 字 | 30-50 次 | 16-30 次 |
| 3000 字 | 45-75 次 | 24-45 次 |
| 5000 字 | 75-125 次 | 40-75 次 |

**注意**：以上为中文汉字计数。"词"指关键词短语出现的次数，不指单个汉字。
