SEO 内容规划 Agent
本页说明 SEO 内容规划 Agent 如何调研公开 SERP 与竞争内容,对照规划库中的已覆盖主题生成选题清单与 content brief。读完本页,你能理解这个场景为什么以 Web Agent 为核心、规划状态为什么放在规划库或 CMS 而不是 Memory,以及什么时候才需要交互式确认。
适用场景
Growth 或 content 团队需要基于公开 SERP、竞品内容和站点自身的规划状态安排下一批内容。SERP 与竞品内容随时在变,人工汇总时容易漏掉已覆盖的主题,也难以持续跟踪竞争内容的变化;选题决策需要每条都有数据或页面来源支撑,否则内容团队无从判断优先级。
典型触发时机:
- 新一季内容日历规划启动,需要基于关键词空白产出选题清单。
- 某组关键词流量下滑,需要调研竞品内容并评估更新优先级。
- 站点进入新主题领域,需要梳理关键词空白和已覆盖主题的边界。
工程挑战
- SERP 数据强时效:排名与内容形态每周在变,采集时间不带上,规划就建立在过期样本上;跨关键词组比较时,各组数据还必须来自相近的时间窗才有可比性。
- 规划状态属于系统而不是记忆:已覆盖主题、内容日历和关键词策略是团队共享、随发布流程更新的结构化状态。把它们放进个人记忆,会和 CMS 的实际发布状态脱节——选题重复或互相冲突就是从这里开始的。
- 证据链:每条选题的优先级依据都要能回溯到具体 SERP 或数据来源,否则内容团队无法判断该不该做,规划评审也无从复核。
模块组合
| 模块 | 角色 | 说明 |
|---|---|---|
| GenAuth | 核心 | 运行时以静默委托签发短时效凭证(所有产品调用必需);本场景默认无需交互式确认,接入登录态或写动作时才升级 interactive。 |
| Web Agent | 核心 | 通过 WebSearch 查询公开 SERP 与竞争内容,逐条保留来源 URL 与采集时间。 |
| GUMem | 不使用 | 关键词策略、已覆盖主题和内容日历是团队共享的规划状态,放在规划库或 CMS 里按版本维护、随发布流程更新;不存在需要跨会话沉淀的个人记忆。 |
何时需要交互式确认
所有产品调用都需要 GenAuth 委托令牌;公开只读场景用静默委托即可。公开 SERP 调研不需要用户逐次确认授权,静默签发的运行时凭证已经提供这个场景需要的约束:凭证短时效、可随时撤销、每次调用都带 grantId 与 auditId 可供追溯。
需要升级为 mode: 'interactive' 交互式确认、让用户在 Qoni Console 明确确认的情况:
- 登录态访问:任务需要进入 Search Console、analytics 或 CMS 后台等登录后才可见的数据——本页示例不涉及;页面表现数据由你的应用自行导出后注入任务。
- 写动作:发布、覆盖或删除 CMS 内容——本场景默认排除,选题清单由内容团队复核后按发布流程执行。
注意:本页示例申请的是产品级委托(products: ['webSearch'])。可查询范围这类细粒度边界由 GenAuth 的 Agent Profile 或策略层配置强制执行,不由任务 prompt 承担。完整语义见 Delegate Token 与缩权。
工作流程
用户选择站点、主题或关键词范围。
应用从规划库或 CMS 读取关键词策略、已覆盖主题和内容日历(带版本),并获取静默运行时凭证。
Web Agent 通过 WebSearch 逐组查询公开 SERP,记录排名页面、内容角度和来源 URL 与采集时间。
检查点:每条 SERP 数据都带来源 URL 与采集时间;跨关键词组比较时确认采集时间窗相近。
Agent 对照已覆盖主题去重、找差距,生成选题清单、content brief 和优先级建议。
检查点:每条选题的优先级依据都应能回溯到具体数据或页面来源;无来源支撑的判断不进交付物。
内容团队复核清单;确认后的选题和日历决策写回规划库或 CMS,作为下一轮规划的输入。
示例代码
下面的示例使用官方 Qoni SDK(@qoniai/qoni)把这个场景接到你的服务端:静默运行时凭证 → 从规划库读取策略与已覆盖主题 → 一次 webSearch.run() 完成 SERP 调研 → 确认后的选题写回规划库。
import { Qoni } from '@qoniai/qoni'
const qoni = new Qoni({
accessKey: process.env.QONI_ACCESS_KEY!,
secretKey: process.env.QONI_SECRET_KEY!,
})
export async function planContent(
userId: string,
siteId: string,
keywordGroups: string[],
) {
// 1. 静默运行时凭证:公开 SERP 调研不涉及站点登录
const { data: grant } = await qoni.delegateToken({
user: { id: userId },
agent: 'seo-content-planner',
products: ['webSearch'],
})
// 2. 任务前:从规划库 / CMS 读取策略与已覆盖主题(不是 Memory)
const plan = await loadPlanningState(siteId)
// 例如 { version: '2026-Q3', strategy: ..., coveredTopics: [...], calendar: [...] }
// 3. 一次 WebSearch 完成 SERP 调研:逐组关键词查询公开结果
const search = await qoni.webSearch.run({
token: grant.token,
prompt: `
Research public SERPs for these keyword groups:
${keywordGroups.join(', ')}.
For each group, list top-ranking pages, content angles, and gaps
versus the covered topics below. Record the source URL and
collection time for every result; keep collection windows
comparable across groups. Do not publish, overwrite, or edit any
CMS content, and never promise ranking outcomes.
Planning state (version ${plan.version}):
${JSON.stringify(plan)}
`,
maxResultsPerQuery: 8,
})
const result = await search.wait()
// 4. 应用侧校验:无来源或缺采集时间的条目丢弃
const topics = parseTopicPlan(result.output).filter(
(t) => t.sourceUrl && t.collectedAt,
)
// 5. 内容团队确认后:选题与日历决策写回规划库(不是 Memory)
// await savePlanningDecisions(siteId, confirmedTopics)
return {
topicPlan: topics,
planVersion: plan.version,
audit: { auditId: grant.auditId, permissionBoundary: grant.grantedScopes },
}
}选题清单的输出结构由任务描述约定:这里约定逐条返回带 sourceUrl 与 collectedAt 的条目,应用侧 parseTopicPlan 负责解析与校验,缺来源或缺采集时间的条目直接丢弃。SDK 顶层只返回通用的 RunResult(runId、status、output、artifacts 等)。
数据与记忆边界
这个场景涉及四类数据,没有一类属于 GUMem:
- 规划状态:关键词策略、已覆盖主题、内容日历——团队共享的结构化状态,放在规划库或 CMS 里按版本维护,任务时注入,确认后的选题决策也写回这里。
- 业务状态:选题清单、content brief 和 SERP 采集样本——归档供规划评审与复核。
- 审计记录:
grantId与auditId构成的委托与行为链——由 GenAuth 维护。 - 用户 Memory:本场景不使用。如果未来要沉淀某个编辑的个人偏好(例如 brief 的写作口吻),那才是 GUMem 的位置;团队共享的规划状态不属于个人记忆。
失败处理
| 情况 | 推荐处理 |
|---|---|
| SERP 结果不稳定或抓取失败 | 按失败处理并记录采集时间,不用不完整的样本得出趋势结论。 |
| 关键词组之间采集时间窗差距过大 | 重新采集对齐时间窗后再比较,不混用新旧样本。 |
| 输出条目缺少来源或采集时间 | 应用侧校验直接丢弃该条目,并在清单中标注丢弃数量。 |
| 需要登录才可见的分析数据 | 本任务不访问;由应用另行导出注入,或另行发起交互式委托。 |
生产注意点
不要自动发布或覆盖 CMS 内容:选题清单由内容团队复核后按发布流程执行。对排名和竞品数据要保留来源与采集时间;SERP 数据有时效性,超过合理时间窗的数据应重新采集而不是直接复用。选题和优先级是基于当前数据的建议,不应向用户承诺排名效果。
下一步
- 阅读 快速开始 跑通 Agent 身份与委托的最短路径。
- 阅读 WebSearch 了解公开 SERP 查询的工作方式。
- 继续查看 Campaign Brief Agent 了解相邻场景。