新词三个来源按 ROI 排序:GSC 已有曝光但未注册的词(需求已验证,最高)、竞品新增词(第 56 篇)、AI 搜索的相关问题。选题日历从注册表的覆盖缺口生成,按 priority×搜索量×是否有 Pillar 支撑排序,每季度产出 8–12 个选题。
注册表驱动的内容增长:用 AI 定期发现新词与生成选题日历
选题不该靠灵感
“这个月写什么?” 如果每个月都要重新想这个问题,说明缺少机制。
注册表提供了这个机制:它记录了所有已规划的词和已建的页面,两者的差集就是待办清单。而新词的持续注入,保证这个清单不会枯竭。
新词来源 → 汇入注册表 → 覆盖度审计(第 46 篇)→ 缺口清单 → 选题日历
↑ ↓
└──────────── 页面上线后更新 ←──────────────┘
一、三个新词来源(按 ROI 排序)
来源 1:GSC 已有曝光但未注册的词(最高 ROI)
这是最容易被忽略的宝库。你的站点已经在某些词上有曝光,但这些词从未被规划过——说明 Google 认为你的内容和这些词相关,只是你没有专门优化。
为什么 ROI 最高:
- 需求已被验证(有真实曝光)
- 相关性已被 Google 确认
- 往往只需优化现有页面,不用新建
筛选条件:
从 GSC 导出 Query 数据,筛选:
- 曝光量 ≥ 20(有实际搜索)
- 排名在 8–40 之间(有戏但没到位)
- 不在 registry.json 里
排名 8–40 是关键区间:排名 1–7 的词说明已经做好了;排名 40+ 的词说明相关性太弱,优化成本高。
来源 2:竞品新增词(第 56 篇)
竞品上季度新增了排名的词,是市场动向的信号。做法见第 56 篇,这里只强调频率:每季度一次,不要更频繁。
来源 3:AI 搜索的相关问题
Perplexity 和 ChatGPT 在回答问题后会给出“相关问题”(Related Questions)。这些是 AI 判断的语义相邻问题,往往包含传统关键词工具挖不到的长尾。
收集方法(手工,每季度 30 分钟):
1. 在 Perplexity 输入你的核心 PKW(如 "centrifugal pump for chemical transfer")
2. 记录回答下方的 Related Questions(通常 3–5 个)
3. 对每个相关问题再问一次,继续收集(做两层即可)
4. 一个 PKW 通常能收集到 10–15 个相关问题
这些问题的用途:
- 直接作为 FAQ 条目(第 41 篇的自包含格式)
- 判断是否值得单独建 Resource Cluster 页
- 补充现有页面的内容缺口
注意:AI 给出的相关问题没有搜索量数据。判断是否值得做,看它是否指向一个你还没覆盖的技术主题。
二、GSC 新词发现脚本
// scripts/discover-new-keywords.mjs
import fs from 'fs/promises';
import { parse } from 'csv-parse/sync';
const registry = JSON.parse(await fs.readFile('registry.json', 'utf8'));
// 注册表中已有的词(包含 keyword 和所有 skw)
const registered = new Set();
for (const row of registry) {
registered.add(row.keyword.toLowerCase().trim());
for (const s of row.skw ?? []) registered.add(s.toLowerCase().trim());
}
// 已排除的词(第 56 篇的排除列表,复用)
let excluded = new Set();
try {
const list = JSON.parse(
await fs.readFile('data/excluded-keywords.json', 'utf8')
);
excluded = new Set(list.map(e => e.keyword.toLowerCase()));
} catch {}
// 读取 GSC 数据
const csv = await fs.readFile('data/gsc-queries.csv', 'utf8');
const rows = parse(csv, { columns: true, skip_empty_lines: true });
const FILTERS = {
minImpressions: 20,
positionRange: [8, 40],
};
const candidates = [];
for (const r of rows) {
const query = (r.Query ?? '').toLowerCase().trim();
if (!query) continue;
if (registered.has(query)) continue;
if (excluded.has(query)) continue;
const impressions = Number(r.Impressions ?? 0);
const position = Number(r.Position ?? 999);
const clicks = Number(r.Clicks ?? 0);
if (impressions < FILTERS.minImpressions) continue;
if (position < FILTERS.positionRange[0] || position > FILTERS.positionRange[1]) continue;
// 机会分:曝光量 ÷ 排名(排名越靠前、曝光越大,分越高)
const opportunityScore = Math.round(impressions / position * 10);
candidates.push({
query,
impressions,
clicks,
ctr: r.CTR,
position,
opportunityScore,
// 记录当前是哪个页面在排这个词(如 GSC 导出含 Page 维度)
currentPage: r.Page ?? null,
});
}
candidates.sort((a, b) => b.opportunityScore - a.opportunityScore);
// 按词形做初步意图推测(复用第 51 篇的规则表思路)
function guessIntent(q) {
if (/manufacturer|supplier|factory|oem|wholesale|buy|price|quote/.test(q))
return 'commercial';
if (/specs|specification|datasheet|dimensions|flow rate|pressure|\bfor\b|\bvs\b/.test(q))
return 'engineering';
if (/what is|how does|how to|why|types of|explained|guide/.test(q))
return 'informational';
return 'unknown';
}
const annotated = candidates.map(c => ({
...c,
guessedIntent: guessIntent(c.query),
}));
console.log(JSON.stringify({
summary: {
gscTotalQueries: rows.length,
registeredKeywords: registered.size,
newCandidates: candidates.length,
filters: FILTERS,
intentDistribution: {
commercial: annotated.filter(c => c.guessedIntent === 'commercial').length,
engineering: annotated.filter(c => c.guessedIntent === 'engineering').length,
informational: annotated.filter(c => c.guessedIntent === 'informational').length,
unknown: annotated.filter(c => c.guessedIntent === 'unknown').length,
},
},
// 交给模型做业务相关性过滤和处置判断
candidates: annotated.slice(0, 80),
}, null, 2));
三、新词处置决策
脚本给出候选词后,每个词有三种处置方式。判断顺序如下:
决策 1:加入现有页面的 SKW(优先)
条件:该词的意图和主题与某个现有页面一致。
示例:
新词:"chemical transfer pump seal type"(曝光 45,排名 18)
当前排这个词的页面:/applications/centrifugal-pump-chemical-transfer/
判断:意图 engineering,主题就是这个页面的内容
处置:加入该页 SKW,并在页面补充一个 H2 专门讲密封选型
必须做的检查(第 45 篇的唯一性约束):
□ 该词不是其他页面的 PKW
□ 该词不在目标页面的 NKW 里
□ 加入后不会与其他页面的 SKW 大量重叠
决策 2:新建页面
条件:该词代表一个独立的搜索意图或技术主题,现有页面都覆盖不了。
示例:
新词:"pump for battery electrolyte transfer"(曝光 32,排名 22)
现有页面:无对应的电池电解液场景页
判断:这是一个独立应用场景(新能源行业)
处置:新建 Application Cluster 页,走第 53 篇的 Content Brief 流程
决策 3:加入排除列表
条件:业务范围外、竞品品牌词、或明确不做的方向。
处置方式同第 56 篇——记录原因和 reconsiderIf 字段。
四、选题日历生成
有了新词和覆盖缺口,生成季度选题日历。
排序公式
选题优先级分 =
priority × 30 (注册表业务优先级,1–5)
+ 搜索量归一化 × 25 (月搜索量 / 最大搜索量 × 100)
+ 意图权重 × 20 (commercial=100, engineering=80, informational=50)
+ Pillar 支撑 × 15 (有对应 Pillar 已上线=100,否则=0)
+ 数据就绪度 × 10 (applications.yaml 已有该场景数据=100,否则=0)
为什么“Pillar 支撑”占权重:一个 Cluster 页如果没有对应的 Pillar 已上线,它的权重无处汇聚,效果会打折。应该先建 Pillar 再建 Cluster。
为什么“数据就绪度”占权重:如果 applications.yaml 里已有该场景的完整数据(第 28 篇),可以直接走 pSEO 流程(第 54 篇),成本低得多。
生成脚本
// scripts/content-calendar.mjs
import fs from 'fs/promises';
import yaml from 'js-yaml';
const registry = JSON.parse(await fs.readFile('registry.json', 'utf8'));
// 复用第 46 篇的覆盖度审计结果
const coverage = JSON.parse(
await fs.readFile('/tmp/coverage.json', 'utf8')
);
// 已上线的 Pillar
const livePillars = new Set(
coverage.coveredPages.filter(slug => {
const row = registry.find(r => r.page_slug === slug);
return row?.page_type === 'pillar';
})
);
// applications.yaml 里已有数据的场景
let readyScenarios = new Set();
try {
const apps = yaml.load(
await fs.readFile('src/data/applications.yaml', 'utf8')
);
readyScenarios = new Set(
apps.filter(a =>
(a.challenges?.length ?? 0) >= 3 &&
(a.keySelectionCriteria?.length ?? 0) >= 3
).map(a => a.slug)
);
} catch {}
const INTENT_WEIGHT = {
commercial: 100,
engineering: 80,
informational: 50,
};
// 待建页面(来自覆盖度审计的 A 区)
const pending = coverage.missingPages;
const maxVolume = Math.max(
...pending.map(p => p.monthlyVolume ?? 0), 1
);
const scored = pending.map(p => {
const row = registry.find(r => r.page_slug === p.slug);
const category = row?.category;
// 是否有对应 Pillar 已上线
const pillarRow = registry.find(r =>
r.page_type === 'pillar' && r.category === category
);
const hasPillarSupport = pillarRow
? livePillars.has(pillarRow.page_slug)
: false;
// 数据是否就绪(从 slug 匹配场景)
const dataReady = [...readyScenarios].some(s => p.slug.includes(s));
const score = Math.round(
(p.priority ?? 3) * 30
+ ((p.monthlyVolume ?? 0) / maxVolume * 100) * 0.25
+ (INTENT_WEIGHT[p.intent] ?? 50) * 0.20
+ (hasPillarSupport ? 100 : 0) * 0.15
+ (dataReady ? 100 : 0) * 0.10
);
return {
...p,
hasPillarSupport,
dataReady,
// 建议的生产方式
productionMethod: dataReady && p.pageType === 'cluster-app'
? 'pSEO 批量生成(第 54 篇)'
: 'Content Brief + 人工写作(第 53 篇)',
score,
};
});
scored.sort((a, b) => b.score - a.score);
// 按季度产能切分(假设每季度能产出 8–12 篇)
const QUARTERLY_CAPACITY = 10;
console.log(JSON.stringify({
summary: {
totalPending: pending.length,
quarterlyCapacity: QUARTERLY_CAPACITY,
estimatedQuarters: Math.ceil(pending.length / QUARTERLY_CAPACITY),
pSeoEligible: scored.filter(s =>
s.productionMethod.startsWith('pSEO')
).length,
},
// 本季度选题
thisQuarter: scored.slice(0, QUARTERLY_CAPACITY),
// 后续队列
backlog: scored.slice(QUARTERLY_CAPACITY),
// 被 Pillar 缺失阻塞的选题(应先建 Pillar)
blockedByMissingPillar: scored.filter(s => !s.hasPillarSupport),
}, null, 2));
五、Skill 说明书
# Skill:注册表驱动的内容增长
## 何时使用
- 每季度做内容规划时
- 注册表覆盖率已达标,需要发现新增长点
## 输入
- `registry.json`
- GSC Query 导出 CSV(近 90 天)
- 可选:第 56 篇的竞品差距分析结果
- 可选:手工收集的 AI 搜索相关问题清单
## 执行步骤
### Step 1:运行新词发现脚本
执行 `npm run seo:discover`
### Step 2:业务相关性过滤(你来判断)
同第 56 篇的过滤规则。剔除的词写入排除列表。
### Step 3:逐词做处置决策(你来判断)
对每个保留的候选词,按第三节的三种决策判断。
**决策 1(加入现有页面)的额外要求**:
必须同时给出该页面需要补充什么内容。
只把词加进 SKW 而不改页面内容,排名不会提升。
示例输出:
新词:chemical transfer pump seal type(曝光 45,排名 18) 决策:加入 /applications/centrifugal-pump-chemical-transfer/ 的 SKW 需补充内容: 新增 H2 “Seal Selection for Chemical Service”
- 机械密封 vs 磁力驱动的适用条件(含具体介质举例)
- 密封面材料选择(碳化硅 / 碳石墨 / 陶瓷)
- 引用 API 682 密封选型标准 预估工时:1.5 小时 唯一性检查:✅ 该词非其他页面 PKW,不在本页 NKW
### Step 4:生成选题日历
执行 `node scripts/content-calendar.mjs`
### Step 5:审核并调整日历(你来判断)
脚本的排序是机械的,需要人工调整:
**必须检查的两点**:
1. `blockedByMissingPillar` 里的选题
→ 如果某个 Pillar 还没建,应把 Pillar 提到本季度最前
2. `pSeoEligible` 的选题
→ 数据就绪的场景页可以批量做,一次性排 3–5 个
(但要遵守第 54 篇的批次质量门槛)
**可以调整的情况**:
- 业务重点变化(如新产品线上市,相关选题提前)
- 竞品动作(竞品刚发布某场景内容,可以跟进做更好的)
- 季节性(某些应用有采购季节性)
### Step 6:输出季度内容计划
## 输出格式
Q4 2026 内容计划
新词发现汇总
GSC 候选词:[N] 个(曝光≥20,排名 8–40) 业务相关性过滤后:[N] 个 处置分布:
- 加入现有页面 SKW:[N] 个
- 新建页面:[N] 个
- 加入排除列表:[N] 个
优先级 1:优化现有页面([N] 项)
1. /applications/centrifugal-pump-chemical-transfer/
新增词:chemical transfer pump seal type(曝光 45,排名 18) 需补充内容:[具体的 H2 和内容点] 预估工时:1.5 小时 预期效果:该词排名 18 → 10 以内
优先级 2:新建页面(本季度 [N] 篇)
1. /products/magnetic-drive-pumps/(Pillar)
- 优先级分:87
- 为什么排第一:3 个 Cluster 选题都在等这个 Pillar
- 生产方式:Content Brief + 人工写作
- 预估工时:6 小时
2–4. 磁力泵相关 Application 页 × 3
- 优先级分:72–78
- 生产方式:pSEO 批量生成(数据已就绪)
- 预估工时:3 小时(含审核)
- 依赖:需在选题 1 完成后进行
待办队列(后续季度,[N] 项)
[列出 Top 10 及优先级分]
被阻塞的选题([N] 项)
以下选题缺少对应 Pillar 支撑,建议先建 Pillar:
- /applications/gear-pump-food-processing/ → 需先建 /products/gear-pumps/
AI 搜索相关问题(本季度收集)
从 Perplexity 收集的 [N] 个相关问题:
- 可直接作为 FAQ 补充到现有页面:[N] 个(列出)
- 值得新建页面:[N] 个(已并入上方选题)
## 禁止行为
- 本季度选题不要超过 10 个(超出产能的计划等于没计划)
- 决策 1(加入现有页面)必须给出具体的内容补充要求
- 不要在 Pillar 未上线时安排大量 Cluster 页
- 新词加入注册表前必须过第 45 篇的唯一性检查
六、季度运营节奏
把这一篇和第 63 篇的自动化结合,形成完整的季度循环:
季度首日(自动化,第 63 篇)
→ GitHub Actions 生成健康度报告骨架
第 1 周(人工,2–3 小时)
→ 手动导出 GSC 数据
→ 跑新词发现脚本(本篇)
→ 跑竞品差距分析(第 56 篇,每季度一次)
→ 业务相关性过滤 + 处置决策
→ 补完健康度报告的人工部分(第 50 篇)
第 1 周末
→ 生成选题日历,确定本季度 8–12 个选题
→ 处理健康度报告的 Top 5 行动项
第 2–12 周(执行)
→ 按日历产出内容
→ 每篇走 Content Brief(第 53 篇)或 pSEO(第 54 篇)
→ 每次新建页面前跑 npm run seo:lint
第 12 周
→ 回顾:计划完成率、各页面上线后的表现
→ 准备下季度循环
这个循环的关键:新词发现和选题决策集中在季度初的一周内做完,剩下 11 周专注执行。不要每周都在重新规划——那会消耗掉本该用于产出的时间。
→ 全系列 AI Skills 工具箱汇总:Prompt 合集与使用指南
RELATED / 相关推荐
接着读这些
按同一分类、系列与标签为你挑选。
AI Skill:Cannibalization 诊断——同站竞争页面识别
注册表审计查的是规划层面的冲突,Cannibalization 诊断查的是已发布内容的实际竞争。这个 Skill 用 GSC 数据找出同一查询下多个页面轮流排名的证据,再用页面正文比对确认原因,最后给出合并、差异化或降权的处置决策。
AI Skill:页面覆盖度审计——找出注册表中无对应页面的词
注册表里躺着一批词,但对应的页面还没建——这是最容易被遗忘的增长机会。这个 Skill 用脚本做注册表与实际路由的差集比对,模型负责按业务价值排序并输出可执行的建页清单。
AI Skill:关键词聚类与商业/工程/知识意图分类
把第 02 篇手工做的意图分类和聚类固化成可复用 Skill:脚本负责词形规则的确定性判定和聚类的机械合并,模型负责规则覆盖不到的模糊词和 SERP 意图判断,输出可直接导入注册表的 CSV。