audit — 季度爬取
analysis 看到的是仓库;audit 看到的是访问者和爬虫看到的内容:真实的 HTML、实际的状态码、重定向、以及服务端返回的站点地图。它发现的一切要么变成 fix 技能可以机械执行的待办事项,要么列入所有者列表——那些不该由技能处理的事务(导航、布局、定价和法律页面、托管)。它从不编辑文章,也从不创建 PR。
脚本:${CLAUDE_PLUGIN_ROOT}/scripts/{crawl,inventory,sitecheck}.js。设置 P=${CLAUDE_PLUGIN_ROOT}。
参数:--origin <url>(默认值:seo/brand.json 中的 https://<domain>,否则使用 Preview 行的主机)--max <n> 页面(500),--external <n> 要检查的外部链接(200),--cwv(向 PageSpeed Insights 请求首页和集群枢纽页;需要能访问 googleapis.com,PAGESPEED_API_KEY 可选),--no-items(仅报告,不写入待办事项),--dry-run(爬取并报告,不提交任何内容)。
0. 前置条件
产品仓库根目录;git status --porcelain 为空;处于默认分支;存在 seo/strategy.md 和 ## SEO agent 块。先执行 node $P/scripts/inventory.js --root .,以便爬虫能将路径映射到文件和种类。不需要 gh。
1. 爬取
PREV=$(ls seo/data/crawl/*.json 2>/dev/null | sort | tail -1)
node $P/scripts/crawl.js --root . --origin <origin> --max <n> --external <n> [--cwv] --save seo/data/crawl ${PREV:+--diff $PREV} --quiet
读取 JSON:summary(页面、按代码分类的发现、truncated),findings[](code、severity fix|report、path、file、msg、to),sitemap(count、error、missing),external[],cwv[],diff(自上次审计以来的 new、resolved)。顶层出现 error 键或 sitemap.error → 说明情况并停止;站点宕机是所有者的问题,不是待办事项。truncated: true → 说明爬取已达到 --max 限制以及哪些路径仍在队列中。
然后还要执行 node $P/scripts/sitecheck.js --root .:它能看到源码(Blade 参数、路由、框架)——这些是 HTML 源码隐藏的内容,两者结合起来才是完整视图。
2. 分类
按以下顺序分为三类:
fix项 — 对于severity: fix的发现(代码为title、description、canonical、alt、link、sitemap),且该页面的库存条目具有file且种类为指南、文章或工具。每页面一个条目,格式与analysis§1c 完全相同,仅有两处不同:- evidence: audit <date>: <n> findings以及每行fixes:以(audit <date>)结尾,以便fix知道要针对线上站点而非 sitecheck 进行确认:
如果一个页面已有开放的/已认领的/正在审核的### [B-nnn] fix: <path> - type: fix - target: <path> - score: <n> (potential <p> × ease 10 × fit <f>) ← potential 3,或来自最新 seo/data/gsc 快照的页面 gsc_potential;fit 来自集群优先级 - evidence: audit <date>: <n> findings - status: open - fixes: link: internal link /old-path redirects to /new-path: link the final URL (audit <date>) description: no meta description (audit <date>)fix项 → 将新的fixes:行追加到其中(跳过已存在的、具有相同 code +to的行)。如果一个页面被一个开放的refresh项拥有 → 标记为owned by B-nnn,不创建 fix 项。如果 sitecheck 也报告了相同的发现(相同页面、相同代码),则只列出一次,来自审计,并带有(audit <date>)标签。link项 — 文章页面的orphan发现:每个集群一个link项($P/skills/analysis/SKILL.md§1c 格式,- links:行/hub → /orphan (orphan, audit <date>));如果集群已有开放的link项,则追加配对。没有集群的孤页(没有匹配的枢纽页)归入所有者列表。- 所有者列表 — 其余所有内容:
broken-external、redirect-chain、duplicate-title/duplicate-description、noindex-in-sitemap、sitemap-404、thin、h1、mixed-content、slow、server-error、非文章页面(首页、定价页、法律页面、布局)上的所有发现、sitemap.missing以及 CWV 行。按代码分组,最严重的在前,每种代码最多 3 个示例路径;如果库存中有文件名则注明。文章页面上的thin是刷新信号,不是修复项:说明是刷新信号并交由analysis处理。
如果使用了 --no-items → 仅执行第 3 类,并统计本应创建的条目数量。
3. 提交
除非使用 --dry-run:运行 git add seo/data/crawl/<date>.json seo/backlog.md 并在默认分支上提交 seo: audit <date> — <pages> pages, <findings> findings, <k> fix items, <m> link items(直接提交计划文件);如果分支有上游则推送。不创建 PR。
4. 报告(不超过 15 行)
audit <date>: <pages> pages crawled (<html> html, <truncated?>), <findings> findings (<fixable> fixable);站点地图<count>个 URL,<missing>个缺失或失败- 按代码分类的发现,每行一个,包含计数
- 与
<previous>的差异:<new>个新增,<resolved>个已解决(如果新增 ≤ 5 个则列出名称) - 条目:
fixID 及路径;linkID 及集群;owned by/already open备注 - 所有者列表:不超过 8 行,最严重的在前(导航中的 5xx 或重定向链排在长描述之前)
- 使用
--cwv时的 CWV 表格:路径、LCP、CLS、INP、性能、来源 - 下一步:
fix将在周五执行这些条目(或立即执行/seo-agent:fix);下次审计将在 3 个月后进行
硬性规则
- 对站点只读:使用
seo-agent-audit用户代理进行 GET/HEAD 请求,单个来源,--max个页面,请求间有--delay延迟;绝不提交表单,绝不登录,绝不爬取其他主机 - 绝不编辑文章、布局或站点地图;绝不创建 PR;仅写入
seo/data/crawl/和seo/backlog.md - 待办事项仅针对
fix技能可以编辑的文章页面;其余归所有者处理 - 确定性:所有发现均来自
crawl.js;不通过人工阅读 HTML 添加任何发现 thin绝不是修复项