关于 compare
compare 是用于比较 SEO 审计结果、URL、预发布与生产站点或竞品的 Claude SEO 技能,也可生成结构化内容差距矩阵,并将产物保存在用户项目之外。
主要功能
- 01比较基线、预发布和竞品审计
- 02根据搜索结果构建内容差距矩阵
- 03报告评分、类别和页面覆盖变化
- 04将产物保存在插件数据目录
适用场景
- 01将预发布站点与生产站点对比
- 02查看自上次审计后的变化
- 03将站点与多个竞品比较
- 04查找页面相对搜索结果缺少的主题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hainrixz/ claude-seo-ai --skill compare安装后在 Claude Code 中输入/compare确认已加载。
详细介绍
/claude-seo-ai:compare
四种比较,一个脚本。只读:所有内容都写入 ${CLAUDE_PLUGIN_DATA}/runs(比较结果写入 <root>/compare/<a>__<b>/compare.json),绝不会写入用户的项目。
$ARGUMENTS 决定比较方式:
| 用户提供的内容 | 执行 |
|---|---|
| 两个 URL / 运行引用 | compare.mjs <refA> <refB> — 相同主机名为基线,看起来像暂存环境的主机名为暂存环境,两个站点则为竞争对手 |
| 三到五个引用 | compare.mjs <refA> <refB> <refC> … — 竞争对手矩阵(最多 5 个) |
| “自上次审计以来” | compare.mjs --baseline latest --against <url|run> |
| 暂存环境与生产环境 | compare.mjs --prod <ref> --staging <ref>(当主机名看起来没有关联时,添加 --map staging.example.com=example.com) |
| “排名 X 的页面有什么是我没有的” | 使用下方的内容差距流程 |
<ref> 可以是运行目录、report.json、latest[:<host>]、baseline[:<host>] 或 URL。
流程 A — 基线、暂存环境、竞争对手
- 为每一方获取一次运行结果。 已经是运行结果的引用(
latest、latest:example.com、路径)无需处理。对于尚无运行结果的 URL,先对其进行审计,以便用户看到采集过程并可要求抓取更多页面:node "${CLAUDE_PLUGIN_ROOT}/scripts/audit.mjs" <url> --pages 3 --checks deterministic --render static --out "${CLAUDE_PLUGIN_DATA}/runs"(如果跳过此步骤,compare.mjs会使用完全相同的设置自行审计该 URL。) - 进行比较:
node "${CLAUDE_PLUGIN_ROOT}/scripts/compare.mjs" --baseline <refA> --against <refB> --out "${CLAUDE_PLUGIN_DATA}/runs"实用标志:--mode auto|baseline|staging|competitor|gap·--map <from-host>=<to-host>(可重复)·--no-host-normalize(保留www.和原始主机名)·--format md(同时写入compare.md)·--data(打印完整文档)·--fail-on-regression(退出码为 3)·--set-baseline(将较新的运行结果设为基线)。 - 读取
compare.json(stdout 摘要会指出其路径),并按以下顺序呈现:- 结论 —
improved/regressed/mixed/unchanged,包括两项分数的变化值及其等级。绝不要混合这两个维度。 - 发生变化的类别,按变化幅度从大到小排列。某个类别在一方未启用时,其
delta: null— 应说明“未测量 ”,绝不要说“0”。 - 发现项:先列出
regressed和new(这些是出现问题的内容),再列出fixed和improved,最后列出unchanged的数量。引用from → to状态及各项所在位置。 - 覆盖范围变化,单独列出,并说明这些变化不是结果:
needs_api/manual_review状态变化,以及另一轮运行从未访问过的位置,意味着两轮运行测量的是不同内容。 - 结构性差距(
gaps):schema 类型、agentic/discovery 端点、AI 爬虫策略、标题主题重合度、答案块、实体链接、字数、渲染模式、hreflang。当gaps.available为 false 时,应说明哪一方没有页面快照,而不是显示零值。 - 发生变化的页面,按规范化路径列出,以及
only_a/only_b路径。带有coverage_change: true的页面行表示变化的是覆盖范围,而不是分数 — 两轮运行中有一轮未对其评分(例如第二次请求时返回了 429 或 404)。请将这些页面从page_coverage.changes中单独列出。 - 页面覆盖范围(
page_coverage):当same_pages为 false 时,两项汇总的平均值来自不同的页面集,轴向分数变化不计入结论,且警告会说明这一点。应明确指出这一点,不要将轴向变化描述为站点发生了变化。 - 在竞争对手模式下,没有发现项差异(
findings: null):请展示分数/类别表、存在情况矩阵以及“对象与集合中最佳对象”的差距,并说明为什么某个站点上的发现并不等同于另一个站点上的同一事实。
- 结论 —
- 提供后续步骤:使用
--set-baseline将本次运行设为后续比较的参考,使用/claude-seo-ai:fix <target>处理退化项,并在 CI 中使用--fail-on-regression。
流程 B — 内容差距
- 找到对比集。 使用
WebSearch搜索查询,保留排名前 3–5 的自然搜索结果 URL,且这些 URL 不得属于主题页面所在的主机。跳过聚合网站、交易平台以及不属于用户目标页面类型的榜单文章,并告知用户跳过了哪些 URL 以及原因——对比集是整个方法的基础,因此必须明确展示。 - 为每个页面生成快照(无需审计;差距矩阵关注的是结构):
node "${CLAUDE_PLUGIN_ROOT}/scripts/snapshot.mjs" <url> --run gap-<slug> --render static --out "${CLAUDE_PLUGIN_DATA}/runs"对主题页面执行相同操作,除非它已经有一个运行记录(latest:<host>)。 - 构建矩阵:
node "${CLAUDE_PLUGIN_ROOT}/scripts/compare.mjs" --mode gap --subject <ref> --set <ref,ref,ref> --query "<the query>" --out "${CLAUDE_PLUGIN_DATA}/runs" - 先展示矩阵,再进行说明。 确定性指标包括:至少出现在两个对比页面、但未出现在主题页面中的标题主题;Schema 类型;首字母大写的术语(作为专有名词的代理指标,并非提取出的实体);Agentic/发现端点;字数;每 100 字中的实质性数字;疑问式标题及其中有多少包含直接答案。为每一项标注支持该项的页面数量。然后进行定性解读——该对比集将哪些内容视为基本要求、主题页面可以补充什么——并将每一项标记为方向性。
- 提议将差距列表整理成大纲,或制定
/claude-seo-ai:fix计划。切勿在此处写入用户的项目。
诚信原则
- 对比是两项测量,不是排名。 分数描述的是已抓取页面的结构。分数更高并不意味着某个网站会排在另一个网站之前。
WebSearch只是在某个时刻使用的一个搜索引擎。 对比集是某个搜索结果页的快照,不是排名跟踪,也不代表任何样本。每次展示差距矩阵时都要说明这一点;如果用户问“那这能提升排名吗?”,也要再次说明。- 未测量不等于通过。
needs_api和manual_review状态变更记录在coverage_changes中,按设计不会计入fixed/regressed——应按此呈现,绝不能将另一次运行未访问的页面描述为已修复。停止返回 2xx 的页面也属于同一类情况:它会从汇总中移除,列入page_coverage,绝不能报告为分数提升。 - 标注覆盖情况。 当任一侧的
coverage为deterministic时,要说明模型判断模块未经过评估;若设置了coverage_warning,要读出其内容。对于暂定区间(state: "partial"),要在同一句中报告其覆盖率百分比。 - 方向性内容始终保持方向性。 每项差距都是页面间的结构性差异,因此置信度应标记为
directional——绝不能将其升级为“这会提升排名”。 - 用用户的语言(EN/ES)回复。此处不会写入用户的项目:运行产物和对比结果均保存在
${CLAUDE_PLUGIN_DATA}下。
评论
支持 Markdown