seo-aeo-audit — 审计搜索 + 答案引擎可见性,并交付执行计划
核心任务:审视一个真实的网站,用证据证明其存在的问题,并返回一份优先级排序的变更计划,覆盖经典搜索引擎(Google、Yandex、Bing)和答案引擎(AI 概览 / AI 模式、ChatGPT、Perplexity、Claude、Copilot、Gemini、Alice AI)。
此技能不负责:撰写内容、构建页面、购买链接。它止步于经核验的诊断和可执行的计划。
不可妥协的原则
- 有证据则陈述,无证据则沉默。每个发现都必须包含:观测内容、位置(
URL、文件:行号、报告名称)、观测值及日期。永远不要报告你未在该网站上验证过的发现。“最佳实践说”不是证据。 - 为每条建议标注证据等级(详见 references/evidence-tiers.md):
CONFIRMED(经引擎记录或在本站重现)·STUDY(已发表的跨站点数据)·FIELD(单案例报告)·HYPOTHESIS。绝不能让一个HYPOTHESIS的优先级高于CONFIRMED的阻断器。 - 先诊断,再开处方。计划中的修复措施必须有其根本原因。“添加结构化数据”不是一个诊断。
- 拒绝神话清单。参见下方“神话守卫”——推荐这些浪费客户预算,属于缺陷而非锦上添花。
- 绝不推荐欺骗性策略。伪装、虚构的共识网络、评论操纵、竞争对手打压滥用以及点击信号伪造,不得出现在计划中。它们仅出现在此技能的 references/threats-and-defense.md 中,作为 检测和防御 的对象。
- 说明你未能检查的内容。缺少 GSC 登录信息是报告中的缺口,而非沉默的省略。
- 绝不要将测量值与假设值混为一谈。当一个交付物同时包含两者时(外链建设 CSV 通常如此),一个
source列将它们分开,未测量行的数量单元格保持空白,而非零。0被解读为“已测量,无需求”;空白被解读为“无人检查过”。这种区别对于他人凭预算执行的工作至关重要。 - 了解每个仪器的盲点,并在输出中说明。规则 1 和 7 约束你所写的内容;但它们无法看到在你使用前工具就已混合或省略的数据。有两种情况经常出现。静态抓取无法看到 CMS 通过 JavaScript 注入的 JSON-LD,因此“未找到结构化数据”在任何 Yoast/RankMath/AIOSEO 站点上都可能是一个虚假发现——
scripts/page_audit.py会在每个结构化数据清单旁边打印此警告,且只有在渲染检查后才能报告缺失。GA4 的同意模式建模会将观测到的行为和估算行为合并到一个数字中——参见 references/measurement.md J1 了解三个激活条件、可见指示器以及仅观测数据的回退方案。此规则普遍适用:在将某个仪器的沉默作为一个发现之前,必须先确定该仪器从技术上可能观测到该事物。
第 0 步 — 检测模式,不问两次
先检查,再行动。按顺序:
- 读取
docs/seo/(或用户指定的路径)。如果存在之前的审计,本次运行为重新审计:对比其差异,并首先说明发生了什么变化。 - 确定你可以访问的资源:线上站点、预演 URL、
robots.txt、sitemap.xml、Search Console / Bing Webmaster / 分析系统、爬取导出文件(Screaming Frog、Sitebulb)、服务器日志、任何已连接的 MCP 工具(Ahrefs、GSC、分析系统、爬虫 MCP,或用于批量竞争和需求数据而无需为每个供应商单独付费的 Prowl MCP)。 测试访问权限,不要假设它可用。 一个已连接的服务并不意味着它能工作:API 的层级会限制端点,且令牌的权限范围通常比仪表盘显示的要窄。在你围绕它制定计划之前,先对每个数据源进行一次探针调用,并记录返回结果——“已连接但返回Insufficient plan”本身就是一个供下次审计使用的发现。 - 仅当答案会改变工作范围时,才与用户一起确定范围:整个站点、一个模板/部分、一个问题(“为什么五月流量下降了”),或一个外链建设提取——面向承包商的目标、关键词和锚文本。后者是交付物而非诊断:当这是任务时,请阅读 references/linkbuilding.md。它可以在有或没有 Search Console 的情况下工作。
- 用三行报告状态——可用输入、缺少的输入、范围——然后开始。每次运行结束时建议一个下一步行动。
scripts/preflight.py 执行步骤 2 中可自动化的部分。它会报告失败时命中了哪个独立的关卡——Search Console、GSC API 和 PageSpeed 会因不同原因返回 403。阅读 references/preflight.md 了解它具体探测了哪些内容以及哪些内容留给你处理(Bing/Yandex、分析系统、服务器日志、爬取导出文件和每个 MCP 工具)。绿色预检通过并不意味着该步骤已完成。
# Claude Code 插件:${CLAUDE_PLUGIN_ROOT} 在技能内容内展开。
SKILL_DIR="${CLAUDE_PLUGIN_ROOT}/skills/seo-aeo-audit"
# 任何其他渠道:加载此技能时命名的基础目录——此 SKILL.md 文件所在的目录。
# 在使用前确认:
ls "$SKILL_DIR/scripts/preflight.py"
此处的 No such file or directory 不是缺少功能,也不是安静地继续执行的理由。它意味着六个仪器不可访问,因此它们本应做的所有检查都会降到证据阶梯的最底层——而发现的层级决定了其证据等级上限。在三行状态中说明这一点;一个悄然变为手动审计的审计,其结论的价值已经改变(不可妥协的原则 #6)。
python3 "$SKILL_DIR/scripts/preflight.py" --site sc-domain:example.com --origin https://example.com
访问规则:默认只读。未经本会话明确批准,绝不提交表单、请求索引、撤销链接或更改线上属性;这些均为面向外部的操作。
第 1 步 — 先建立基线,再发表意见
记录(含日期),以便后续每个声称都能与之对比衡量:
- 过去 12 个月内按国家和设备划分的自然点击/展示量/平均排名(GSC + Bing),若存在下降或平台期窗口,记录之;
- 按模板划分的已索引 URL 数量与已发布 URL 数量(
site:是粗略检测,GSC Pages 报告才是准确数字); - 收入或转化排名前 20 的页面及其当前排名;
- AI 可见性基线:对每个可访问的引擎运行 references/aeo-geo.md 中的品牌和类别提示集,并逐字记录回答;
- 哪些 AI 爬虫实际抓取了网站(服务器日志;通过正向确认反向 DNS 过滤伪装者),以及哪些 AI 来源出现在分析系统中;
- 更新时间线:在形成任何关于原因的假设之前,将曲线的每个变化与 references/algorithm-updates.md 进行日期对齐。
当完全没有第一方数据访问权限时,在三行状态中说明,并回退到第三方索引可以建立的内容:该域名今日排名情况、相对于一定规模的竞争对手其链接档案的大小、以及其目标短语是否具有可测量的需求(references/prowl-mcp.md)。该基线上限为 STUDY,无法回答“为什么这个页面未被索引”——但它足以区分冷启动和流量下滑,而这两者需要完全相反的计划。
如果网站声称流量下降,首先区分报告故障和排名故障:冻结的 GSC 报告会将点击量固定在一个日期,而真实的流量下降会产生新的、不断减少的数据点。在诊断算法原因之前,交叉验证 GA4 会话、服务器日志和独立排名跟踪。
第 2 步 — 十个轨道
执行所有范围内的轨道。每个轨道都有其参考文件,包含具体的检查项、2026年至今的陷阱以及需要捕获的证据。
| # | 轨道 | 回答的问题 | 参考文件 |
|---|---|---|---|
| A | 访问与索引经济学 | 机器人能否抓取、渲染并负担得起?爬虫预算在哪里被消耗? | technical-checks.md |
| B | 规范化与重复内容 | 哪个 URL 是规范版本,引擎是否同意——包括 hreflang? | technical-checks.md |
| C | 架构与链接权益 | 核心页面是否获得了权威度、深度和抓取频率? | architecture-and-equity.md |
| D | 意图与SERP匹配 | 每个页面是否匹配SERP,页面之间是否存在关键词自相残杀? | intent-and-content.md + onpage-checks.md |
| E | 内容价值 | 是否存在AI无法复制的排名理由? | intent-and-content.md + ranking-model.md |
| F | 可提取性与AEO/GEO | 答案引擎能否检索、读取并引用它? | aeo-geo.md |
| G | 实体与品牌共识 | 模型是否一致地知道并提及该品牌? | entity-and-brand.md |
| H | 体验、转化与归因 | 任务在此处完成还是被退回?是否转化并被测量? | experience-signals.md + demand-and-conversion.md |
| I | 风险与威胁 | 惩罚、劫持、注入、恶意举报。 | threats-and-defense.md |
| J | 测量 | 是否有人能够判断该计划是否有效? | measurement.md |
Google Discover 不属于这十个轨道中的任何一个,也不是轨道 A 的一部分。 它有自己独立的排名流程、独立的门控机制(两个元标签,没有它们卡片根本不会渲染)和独立的新鲜度曲线。因此,一个 Discover 是主要流量来源的网站,需要将 references/discover.md 作为第 11 个点来运行——而一个 Discover 不是主要来源的网站则可以完全跳过它。在决定前检查 GSC Discover 报告:该参考文件之前只能从本文件底部的列表访问,这意味着按顺序处理轨道的代理永远不会打开它。
在任何流量下降诊断之前,运行 references/algorithm-updates.md 中的日期对齐和更新响应协议——“一次核心更新打击了我们”不是一个发现,并且一半有记录的 GSC 故障与算法更新发布同时发生。
每个轨道有两个部分:诊断工作(什么地方错了以及为什么)和一个用于完整性的机械扫描——轨道 A/B 参见 technical-checks.md §A3,轨道 D/E 参见 onpage-checks.md。先运行诊断;然后扫描捕获那些乏味的故障,并且只有那些有可观察影响的扫描项目才会被提升到发现表中。
顺序很重要。 一个轨道 A 的阻断器(站点不可抓取、预渲染源中有 noindex、人工操作)会使所有其他发现都变得无意义——人工操作是一个二进制倍增器:在你移除它之前,你做的任何改进都不算数。在花费时间处理 F/G 之前,先执行 A → B → C。
证据阶梯——完整路由详见 references/tooling.md;它按 证据强度 而非便利性排序:服务器日志 → Search Console / Bing / Yandex → 全量爬取 → 现场性能数据 → 第三方索引 → 手动抓取和 DevTools。对每个检查使用你能实际达到的最高梯级,并在报告中说明某个发现依赖于哪个梯级。一个只有公开数据、没有站点访问权限的审计是有效的工作,但其索引和查询方面的发现是推断而非观察,因此会得到相应的等级划分。
六个捆绑脚本——preflight.py、gsc_pull.py、page_audit.py、url_inspection.py、sitemap_audit.py、psi_pull.py——收集每个轨道的机械部分。阅读 references/scripts.md 了解其调用方法、参数、配额和每个脚本的限制。
四个决定发现是否真实的陷阱:
page_audit.py的结构化数据清单只读取服务端渲染的 HTML。当 CMS 通过 JavaScript 注入 JSON-LD 时,一个空的清单不是缺失标记的证据(不可妥协的原则 #8)。--format json输出一个数组,每个页面一个对象,即使只有一个 URL:索引data[0]。- 一个被
--max-bytes截断的响应会丢弃所有基于计数的发现,而不是将片段作为测量值发布。 - 每个发出的发现都携带一个证据等级,同时也携带一个严重性等级,只有证据等级进入排序公式。 严重性表示一个发现有多响亮;证据等级则支撑它。
url_inspection.py向索引查询而非从抓取中推断,这是使发现达到CONFIRMED级别的唯一方式——每个属性每天 2000 次、每分钟 600 次调用限制,因此对每个模板的一个 URL 以及发现实际涉及的页面进行采样。
第 3 步 — 分类
给每个发现打分,然后排序。不要呈现未排序的列表。
优先级 = (影响 × 置信度) / 努力程度
- 影响 1–5:收入页面被阻断 = 5;模板级别的泄漏 = 4;单个信息页面 = 1。在基线允许的情况下,以流量或收入术语进行估算。
- 置信度:CONFIRMED 1.0 · STUDY 0.7 · FIELD 0.4 · HYPOTHESIS 0.2。
- 努力程度 1–5,以工程人天计,计入发布流程,而非仅编辑工作。
将输出分为四个桶,按此顺序:
- 阻断器 — 索引问题、惩罚、劫持、收入页面不可达。
- 泄漏点 — 爬虫预算、权益、关键词自相残杀、阅读预算浪费。
- 增益 — 意图匹配、信息增益、可提取性、实体共识。
- 实验 — 任何低于 CONFIRMED 且值得进行拆分测试而非全面推广的建议。根据 references/experiments.md 设计它们;永远不要将 HYPOTHESIS 级别的建议全面部署。
步骤 4 — 交付物
当所有分析完成、发现被分类后,生成以下内容:
- 变更计划 — 一份简洁、按优先级排序的表格或列表,包含每个发现、其证据等级、影响、努力程度以及建议的修复措施。以组(阻断器、泄漏点等)排列,每组内按优先级排序。
- 外链建设简报 — 针对承包商或内部团队的关键词和锚文本目标,导出为 CSV。
神话守卫
以下是 SEO 行业中常见但通常无效或有害的实践。此技能将在计划中主动拒绝它们,如果被建议,将发出警告:
- 过度优化元描述/标题标签,超出自然书写范围
- 仅基于精确匹配域名链接建设
- “内容为王”而无视上下文和意图
- 相信 PageRank 传递是线性的或可精确预测
- 过度使用结构化数据而缺少实际价值
- 将“核心算法更新”作为所有流量下降的万灵丹
- 推荐购买链接而不考虑可扩展性或风险
依赖项与设置
- 技能目录:
$SKILL_DIR应指向此 SKILL.md 文件所在的目录。 - Python 脚本:
scripts/下的脚本需要 Python 3.8 或更高版本。详见references/scripts.md。 - MCP 工具:对于高级需求数据(特别是外链建设简报),建议使用 Prowl MCP。
- 外部 API:Search Console API、Bing Webmaster API、PageSpeed Insights API。在
references/preflight.md中记录了预期的错误消息。
贡献
请贡献!分叉此仓库,进行更改,并提交拉取请求。请确保更新了参考文件(位于 references/ 下),并且通过运行示例审计(例如,使用 scripts/preflight.py)来测试你添加的任何新检查。
许可证
MIT