切换主题

关键词聚类自动化:用 AI 把搜索词整理成系列、文章和内链结构

Easton editorial illustration: one large rounded CLUSTER MAP board with grouped query chips and visible intent separation

"Google Search Central:创建有用、可靠、以用户为先的内容"

手里有一张 keywords.csv,300 行 query,覆盖 Astro、Docker、Cloudflare 这些主题。AI 初分出了 42 个 cluster,但人工检查时发现 cluster #1 同时放着 astro seo 和 astro vs next.js for seo——前者是教程意图,后者是对比意图。混在一起,写出来的文章很难同时满足两种需求。

关键词聚类的问题就在这里:AI 容易把语义相近但意图不同的词合并,进而增加内容 cannibalization 风险,让多篇近似文章互相竞争。更麻烦的是,看着一堆“关键词组”,仍然不知道哪些该写成新文、哪些应该补旧文、哪些只适合 FAQ 或内链。

下面的流程从 GSC query、候选题卡片和站内库存整理成合并表开始,归一化去重,AI 初分保留人工审核,最后把每个 cluster 映射到具体动作(新文/旧文刷新/FAQ/内链/discard)。重点是数据源、去重逻辑、聚类方法对比、AI prompt 示例、cluster map 表格、动作判断框架和内链结构设计。

一、关键词聚类流程入口:数据源清单

聚类的输入不是“AI 猜词”,而是自有 query/page 数据、候选题卡片和站内库存。这三样东西组合起来,才能判断哪些词值得写、哪些已经有旧文承接、哪些是社区真实问题。

数据源清单如下:

数据源字段获取方式注意事项
GSC query/page 数据query, page, clicks, impressions, CTR, positionSearch Console UI / Search Analytics APIAPI rowLimit 默认 1,000、单次最大 25,000;受内部限制影响,不保证返回全部行,只返回 top rows
候选题卡片标题, 意图, 来源(Reddit/GitHub/竞品), 证据选题调研 Agent 输出需人工审核来源质量
站内库存文章标题, URL, 系列, 发布日期, 流量, 关键词排名站内数据库 / CMS标记已有旧文和系列归属
quickWins 指标低 CTR 高 impression 关键词, 旧文刷新机会GSC quickWins 分析用于旧文刷新动作判断

步骤块:

  1. 导出 GSC query/page 数据;Performance report 默认展示近三个月,也可以按任务调整日期范围
  2. 合并选题调研 Agent 输出的候选题卡片
  3. 提取站内库存:已有文章、系列、流量表现
  4. 标记 quickWins:低 CTR 高 impression 关键词、旧文刷新机会
  5. 输出合并表:每行包含 query、意图初判、来源、已有旧文匹配、quickWins 标记

二、关键词归一化:去重、标准化、意图初判

合并表里会有大量重复、相似、拼写变体。如果不处理,AI 初分时会把这些当成不同词,拆成多个 cluster,造成过度拆分。

去重逻辑清单:

  • 完全重复:astro seo vs astro seo → 保留一条
  • 拼写变体:docker host.docker.internal vs docker host-gateway vs docker 127.0.0.1 → 标记为同一意图候选,等待人工确认
  • 同义词:cloudflare pricing vs cloudflare 价格 vs cloudflare cost → 标记为同一意图
  • 实体词形变化:astro blog vs astro blogs → 标记为同一意图

标准化规则:

  • 统一术语:nextjs → next.js,cloudflare workers → Cloudflare Workers
  • 统一大小写:Astro vs astro → astro
  • 统一标点:astro, seo vs astro seo → astro seo

意图初判标记:

  • 信息型:how to, what is, guide, tutorial
  • 导航型:品牌名、产品名、特定 URL
  • 对比型:vs, compare, alternative
  • 交易型:pricing, cost, buy, download

步骤块:

  1. 对合并表进行完全重复去重
  2. 识别拼写变体和同义词,标记为同一意图候选
  3. 标准化术语、大小写、标点
  4. 为每个 query 标记意图初判(信息型/导航型/对比型/交易型)
  5. 输出归一化表:每行包含 query、normalized_query、intent_tag、source、old_post_match

三、聚类方法选择:三种方法对比判断表

选择聚类方法时,要平衡成本、准确度和风险。三种主流方法各有适用场景。

方法成本准确度适用场景风险
SERP-based高(需要大量 SERP 查询,可能触发反爬)高(基于真实搜索结果,适合辅助判断是否合并页面)内容已上线、需要判断页面重合、有 SERP API 预算成本高、SERP 波动影响稳定性
Semantic低(只需 embedding API 调用)中(可能忽略真实搜索意图,误合并不同意图)早期主题地图、预算有限、快速初分可能误合并语义相近但意图不同的词
Hybrid中(语义初分 + SERP/GSC 校验 + 人工审核)高(兼顾成本和准确度)持续内容运营、有 GSC 数据、有人工审核时间需要人工审核投入

推荐流程:

  • 小团队 / 早期:Semantic 初分 + GSC/page 校验 + 人工合并高风险 cluster
  • 中大型团队 / 已上线内容:Hybrid(语义初分 + SERP/GSC 校验 + 人工审核)
  • 预算充足 + 需要判断页面是否合并:SERP-based + 人工审核

我目前用的是 Hybrid:先用语义相似度初分,然后用 GSC page 数据校验(看哪些 query 已经有旧文承接),最后人工审核意图冲突。

四、AI 辅助聚类执行流程:prompt 示例、cluster map 表格

把归一化后的关键词交给 AI 初分,关键是 prompt 要明确输出字段和意图标记。下面是我用的 prompt 示例。

AI prompt 示例:

你是一个 SEO 内容规划师,以下是一组归一化后的关键词,请按搜索意图将它们分成多个 cluster,并为每个 cluster 提供:
1. primary_intent(主要搜索意图)
2. canonical_page(建议合并到的目标页面类型:new article / old post refresh / FAQ / discard)
3. suggested_action(建议动作)
4. internal_link_targets(应该链接到哪些已有文章或系列)
5. risk_notes(风险提示:是否可能 cannibalization、是否需要人工审核)

关键词列表:
- astro seo
- astro vs next js for seo
- cloudflare pricing
- docker host.docker.internal
- docker host-gateway
...

输出格式:
JSON 数组,每个 cluster 包含:
{
  "cluster_id": 1,
  "keywords": ["astro seo", ...],
  "primary_intent": "信息型 - 教程",
  "canonical_page": "new article",
  "suggested_action": "新建 Astro SEO 教程文章",
  "internal_link_targets": ["astro-guide 系列", "cloudflare-bindui 系列"],
  "risk_notes": "需要人工审核:astro vs next js for seo 是对比意图,不应合并"
}

cluster map 表格示例:

cluster_idkeywordsprimary_intentcanonical_pagesuggested_actioninternal_link_targetsrisk_notes
1astro seo, astro blog seo信息型 - 教程new article新建 Astro SEO 教程astro-guide 系列, cloudflare-bindui 系列无
2astro vs next js for seo对比型new article新建 Astro vs Next.js SEO 对比文astro-guide 系列, nextjs-blog-series无
3cloudflare pricing, cloudflare cost, cloudflare 价格交易型old post refresh刷新已有 Cloudflare 价格文章cloudflare-bindui 系列已有旧文 /cloudflare-pricing,建议刷新
4docker host.docker.internal, docker host-gateway, docker 127.0.0.1信息型 - 配置FAQ在 Docker 系列文章中补充 FAQdocker-practice 系列同意图变体,合并到 FAQ

人工审核清单:

  • 意图不同:同一 cluster 中包含教程意图和对比意图 → 拆分
  • 同主题已有旧文:cluster 映射到“新建文章”,但站内已有相关旧文 → 改为“旧文刷新”或“FAQ 补充”
  • 过度拆分:一个意图被拆成多个 cluster → 合并
  • 过度合并:不同意图的词被 AI 合并 → 拆分

步骤块:

  1. 将归一化表导入 AI 聚类工具(Claude / ChatGPT / 自建脚本)
  2. 使用上述 prompt 进行初分
  3. 输出 cluster map 表格
  4. 人工审核:检查意图冲突、旧文匹配、过度拆分/合并
  5. 修正 cluster map,标记高风险 cluster

五、聚类结果映射决策框架:动作判断表

聚类完成后,每个 cluster 要映射到具体动作,而不是停留在“关键词组”。下面这张表是我用的判断框架。

判断维度新文系列支柱页旧文刷新FAQ 补充内链优化discard
query 数量多(5+)多(5+)少(1-3)少(1-3)少(1-3)单个
意图变化度高高低低低低
已有旧文匹配无无有有有有
竞争强度高高中中低低
站点主题匹配高高高中中低
原创增量空间高高低低低无
示例astro seo 教程astro 系列cloudflare pricingdocker host.docker.internal相关文章内链品牌名变体

动作定义:

  • 新文:创建新文章,覆盖 cluster 中所有同意图 query
  • 系列支柱页:创建系列 hub 页面,链接到系列内其他文章
  • 旧文刷新:在已有旧文中补充内容,覆盖新 query
  • FAQ 补充:在已有文章中补充 FAQ
  • 内链优化:在相关文章中添加内链,指向 canonical 页面
  • discard:不创建内容,标记为低价值或非目标用户

步骤块:

  1. 根据判断维度为每个 cluster 评分
  2. 根据评分映射到动作
  3. 输出动作列表:cluster_id → suggested_action
  4. 人工复核高风险动作(新文、系列支柱页)

表中的 query 数量只是示例信号,不是机械阈值。最终动作仍要结合搜索意图、站内库存、原创增量和维护成本判断。

六、内链结构设计:双向链接、canonical 指向

cluster 之间的关系要变成可执行的内链,不只是“相关阅读”。下面是我用的内链清单。

内链结构设计原则:

  • pillar/cluster 双向链接:pillar 页面链接到所有 cluster 页面,cluster 页面链接回 pillar 页面
  • anchor text 描述性:使用描述性 anchor text,避免“点击这里”
  • 链接指向 canonical URL:避免指向重复或近似页面,链接应指向 canonical 页面
  • 避免孤立文章:每篇文章至少安排一条上下文相关的入链,并按站点规模和读者路径补充更多入口
  • cluster map 中的 internal_link_targets 字段:记录应该链接到哪些已有文章或系列

内链清单:

cluster_idpillar_pagecluster_pagesinternal_link_targetsanchor_text 建议
1Astro SEO 完全指南astro seo 教程, astro blog seoastro-guide 系列, cloudflare-bindui 系列“Astro SEO 优化”, “Cloudflare 性能优化”
2-astro vs next.js for seoastro-guide 系列, nextjs-blog-series“Astro vs Next.js 对比”
3-cloudflare pricingcloudflare-bindui 系列“Cloudflare 价格解析”

步骤块:

  1. 识别 pillar 页面和 cluster 页面
  2. 设计双向链接结构
  3. 为每个内链设计描述性 anchor text
  4. 检查是否有孤立文章
  5. 输出内链清单,导入内容任务表

Google 当前把 redirect 和 rel="canonical" 视为较强 canonical 信号,把 sitemap inclusion 视为较弱信号;这些信号可以叠加,但 Google 仍会自行选择 canonical。站内链接应一致指向你希望作为 canonical 的 URL。

七、风险边界与质量红线:避免批量页面生成器

关键词聚类不能变成批量页面生成器,否则很容易偏离 people-first 内容原则。

风险边界清单:

  • 不是每个关键词变体一页:同意图 query 应合并到一个页面或一个 canonical 目标,不应拆成多个近似页面
  • cluster 必须有原创增量判断:每个 cluster 都要回到读者问题、站点主题和原创增量,不能只是重写已有内容
  • 合并同意图 query 到 canonical:对重复或非常相似页面,可以用 redirect、rel="canonical" 和 sitemap 等信号表达偏好,但它们的强度不同,也不能保证 Google 必然采用
  • 避免 search engine-first 内容:内容优先服务用户,而不是主要为了操纵排名
  • 降低 cannibalization 风险:过去为近似关键词建立大量单页,可能让多个页面竞争同一搜索意图
  • 标记高风险 cluster:在 cluster map 中用 risk_notes 字段标记需要人工审核的 cluster

质量红线:

  • 同主题已有旧文时,优先旧文刷新或 FAQ 补充,避免新建近似页面
  • 聚类输出必须附带原创增量和站点主题匹配判断
  • 内链生成时优先指向 canonical 文章,避免指向重复或近似页面

八、示例演示:astro seo、cloudflare pricing、docker

通过三个场景理解整个流程。

示例 1:astro seo vs astro vs next.js for seo(意图不同,必须拆分)

  • 原始 query:astro seo, astro vs next.js for seo, astro blog seo
  • 归一化:astro seo, astro vs next js for seo, astro blog seo
  • AI 初分:cluster_id=1, keywords=[astro seo, astro vs next js for seo, astro blog seo]
  • 人工审核:astro seo 是教程意图,astro vs next js for seo 是对比意图,必须拆分
  • 最终 cluster map:
    • cluster_id=1: [astro seo, astro blog seo] → 新建 Astro SEO 教程文章
    • cluster_id=2: [astro vs next js for seo] → 新建 Astro vs Next.js SEO 对比文

示例 2:cloudflare pricing(已有旧文,刷新而非新建)

  • 原始 query:cloudflare pricing, cloudflare cost, cloudflare 价格
  • 归一化:cloudflare pricing, cloudflare pricing, cloudflare pricing
  • AI 初分:cluster_id=3, keywords=[cloudflare pricing, cloudflare pricing, cloudflare pricing]
  • 站内库存匹配:已有旧文 /cloudflare-pricing
  • 最终 cluster map:
    • cluster_id=3: [cloudflare pricing, cloudflare cost, cloudflare 价格] → 旧文刷新 /cloudflare-pricing

示例 3:docker host.docker.internal(技术关键词,归一化后合并)

  • 原始 query:docker host.docker.internal, docker host-gateway, docker 127.0.0.1
  • 归一化:标记为可能相同配置意图的候选组
  • AI 初分:cluster_id=4, keywords=[docker host.docker.internal, docker host-gateway, docker 127.0.0.1]
  • 站内库存匹配:已有 Docker 系列文章
  • 最终 cluster map:
    • cluster_id=4: [docker host.docker.internal, docker host-gateway, docker 127.0.0.1] → 人工确认意图后,作为 FAQ 或小节补充到 Docker 系列文章

九、下一步与延伸阅读

聚类完成后,下一步是把 cluster map 落进内容任务表,设计字段、评分、状态机和发布计划。这部分会在系列后续文章“内容任务表设计:字段、评分、状态机与发布计划”中详细讲。

如果你想知道如何从 cluster map 生成可写大纲,可以看系列后续文章“AI 大纲生成:从 cluster map 到可写大纲的自动化流程”。批量生成内链的细节,会在“自动内链系统:批量生成相关文章链接与避坑指南”中展开。

旧文刷新策略也有专文:“GSC 旧文刷新策略:从 quickWins 到内容更新”。

已发布的相关文章:

把关键词整理成可执行内容地图

从多源输入到 cluster map、动作映射和内链清单的最小流程。

⏱️ 预计耗时: 60 分钟

  1. 1

    步骤 1: 合并三类输入

    把 GSC query/page、候选题卡片和站内文章库存放入同一张表,并保留来源、旧文匹配和 quickWins 标记。
  2. 2

    步骤 2: 归一化关键词

    处理重复、拼写变体、同义词、大小写和标点,为每条 query 标注信息型、导航型、对比型或交易型意图。
  3. 3

    步骤 3: 运行语义初分

    让 AI 按意图生成 cluster,并为每组输出 primary_intent、canonical_page、suggested_action、internal_link_targets 和 risk_notes。
  4. 4

    步骤 4: 校验高风险 cluster

    用 GSC page、必要的 SERP 结果和人工判断检查教程与对比意图混合、旧文冲突、过度合并和过度拆分。
  5. 5

    步骤 5: 映射唯一主动作

    把每个 cluster 分配到新文、系列支柱页、旧文刷新、FAQ、内链优化或 discard,并记录判断依据。
  6. 6

    步骤 6: 输出内链清单

    确定 pillar 与 cluster 的双向链接、canonical 目标和描述性锚文本,再检查孤立文章和重复页面风险。

常见问题

关键词聚类是把相似词放一起,还是按搜索意图分组?
应按搜索意图分组,而不是只看语义相似度。主关键词和同意图的长尾变体可以由同一页承接;教程、对比、导航或交易意图不同时,通常应该拆分。
一个关键词应该单独写一篇,还是放进已有文章的 H2 或 FAQ?
要看意图变化、已有旧文匹配、站点主题和原创增量。意图变化小且已有页面承接时,优先旧文刷新、H2、FAQ 或内链;形成独立问题且没有合适页面时,再考虑新文。
GSC query、Reddit 问法、GitHub issue 和竞品标题能放在同一张聚类表吗?
可以,但必须保留来源并分层使用。GSC 是站点已有搜索需求,社区问法适合补充问题表达,竞品标题只作为竞争情报;它们都要先去重、标准化和人工审核。
AI 为什么容易把语义相近但意图不同的词合并错?
语义相似模型擅长识别实体和表达接近,却不一定知道用户期望的页面类型。例如 `astro seo` 偏教程,而 `astro vs next.js for seo` 偏对比,因此需要意图字段、GSC/SERP 校验和人工复核。
SERP-based、semantic 和 hybrid clustering 怎么选?
早期或预算有限时可用 semantic 初分,再以 GSC page 和人工审核校正;已有内容和稳定运营数据时更适合 hybrid;需要用搜索结果重合度判断合并或拆页,并有查询预算时再增加 SERP-based 校验。
同一主题已经有旧文时,应该新建页面还是更新旧文?
先检查旧文是否能自然承接同一意图。能承接时优先刷新正文、补 FAQ 或优化内链;只有目标意图和页面任务明显不同,且有足够原创增量时才新建。重复或非常相似页面的 canonical 选择仍由 Google 综合信号判断。
关键词聚类会不会变成低价值的批量页面生成?
会有这种风险,所以 cluster 输出必须包含读者问题、站点匹配、原创增量和人工审核。不要为每个关键词变体建一页,也不要把 AI 聚类结果直接当成批量发布指令。

13 分钟阅读 · 发布于: 2026年11月13日

评论

使用 GitHub 账号登录后即可评论

Easton BlogEaston Blog