Community研究与数据分析github.com

senseiewok/site-seo-review

对小型静态或基本静态网站(包括健康和研究类网站)进行诚实的 SEO 与可发现性审查:一个标准库检查器,用于检查标题、描述、规范链接、开放图谱、站点地图与 robots 协议、标题、图片、链接文本、预加载、第三方脚本和结构化数据;并提供一个工作流来读取页面、提出文案、让人员审核文案,并验证在线站点。适合在需要改善网站搜索表现或分享效果时使用。

site-seo-review 是什么?

该技能是一个用于小型静态或主要静态网站的 SEO 和可发现性审查工具,特别针对健康和研究类网站。它包含一个标准库检查器,用于验证标题、描述、规范链接、开放图谱、站点地图与 robots 协议、标题、图片、链接文本、预加载、第三方脚本和结构化数据等关键元数据的完整性、一致性和诚实性。技能的核心是一个完整的工作流程:先运行检查器测量基线,然后人工阅读页面发现文本含义问题,接着提出文案变更并附上证据,再让人员或独立模型审核,最后部署后验证真实环境。它支持 Claude Code、Cursor、Codex 等任何可以运行 Python 和 shell 命令的 AI agent 平台,通过 `python scripts/seo_audit.py` 脚本执行检查,并使用 `zip test_seo_audit.py` 确保代码正确。该技能特别强调诚实性,要求所有声明标注为“已观察”或“推断”,文案不允许夸大,且不允许承诺排名提升。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/senseiewok/cf-skills/tree/HEAD/.claude/skills/site-seo-review

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

网站 SEO 审查

搜索引擎和链接预览看待一个页面的方式,就像一个陌生人一样:标题、描述、页面声明的自身地址、它提供的图片、标题,以及它携带的任何结构化数据。本技能会检查这些元素是否存在、彼此之间以及与站点地图是否一致,并且不会声称页面未展示的内容。它不承诺排名。任何诚实的人都无法承诺。

这里的经验来自 2026 年对一个小型研究网站的实际审查,以下每一条发现都由一位审查者提出,然后由一个人阅读源代码确认。它们被记录下来,以便下一个站点不必重新发现它们。

研究,而非医疗建议。本技能讨论健康网站时,关注的是这些页面的自我描述方式,绝不涉及任何健康问题。

1. 何时使用本技能

  • 一个静态或基本静态的网站(无论采用何种构建方式,最终是一组 .html 文件)即将发布或刚刚被修改。
  • 有人问“为什么链接预览看起来不对”、“为什么这个页面不在搜索结果中”或“让网站更易于被发现”。
  • 一个健康、研究或其他高风险的网站需要检查其元数据和结构化数据的诚实性,不仅仅是存在性。
  • 您希望将此类审查中的机械性部分交给一个更小的本地模型,而将文案决策权交给人员。

不适用于:安全标头(HSTS、Content-Security-Policy、X-Content-Type-Options、Referrer-Policy 属于安全审查,参见第 9 节)、服务器配置、付费搜索,或任何需要搜索引擎账户的操作。

2. 工作流程

  1. 在接触任何内容之前先进行测量。 在构建好的网站文件夹上运行检查器(步骤 2),如果网站已上线,则在链接预览调试器和以网站自身名称搜索的结果中记录其表现。保存输出。你之后更改的所有内容都将与此基线进行比较。
  2. 运行检查器。 python scripts/seo_audit.py SITE_DIR --base-url https://your-site.example/ --json。返回码 0 表示没有错误级别的发现;--strict 选项会使警告也被计为错误。检查 ID 及各自含义见 references/checklist.md。
  3. 阅读页面。 检查器看到的是结构,而非含义。像一个陌生人一样,将每个被索引的页面阅读一次:标题是否说明了页面的内容,描述是否只声明了页面展示的内容,第一个标题是否与标题的承诺一致,每个链接文本是否说明了链接指向何处。将每个观察结果连同文件和行号一起记录下来。
  4. 提出文案,不要直接应用它。 对于你想要更改的每个标题、描述或链接文本,写下确切的当前文本、确切的建议文本以及页面中支持该建议的句子。声称“每个声明背后的证据”,但页面只显示一条证据记录的描述是过度声明;这正是审查者标记过的问题。
  5. 让人审核文案,或者让一个来自不同模型家族的、能看到页面文本和你的建议但看不到你的推理的第二模型审核,然后才能公开任何内容。在健康或研究网站上,必须由人员签字;模型的批准只是一个提示。
  6. 验证在线版本。 部署后,像浏览器一样(一次一个请求,仅针对你自己的主机)获取每个页面,并确认:服务端的 HTML 与构建的文件一致,没有内容被主机注入,robots.txt 和 sitemap.xml 正确服务,并且链接预览显示了你期望的标题、描述和图片。成功上传不代表页面已验证。

3. 检查器

python scripts/seo_audit.py SITE_DIR [--base-url URL] [--json] [--strict] [--json-out PATH]
结果含义
退出码 0没有错误级别的发现(警告和信息级别可能仍存在)
退出码 1至少一个错误;使用 --strict 时,至少一个警告
退出码 2使用错误:不是文件夹、没有 .html 文件、错误的标志

它只读取文件。它不打开任何网络连接,不执行页面中的任何内容,并且除非指定了 --json-out,否则不会写入任何内容。被索引的页面是指除了没有 noindex 的 robots 元标签的 404.html 页面之外的任何页面;元数据检查应用于被索引的页面,内容检查则应用于每个页面。检查结果经过排序且稳定,因此在同一个文件夹上运行两次会得到字节一致的结果,可以进行 diff。

检查 ID 是稳定的(SEO001 标题缺失,SEO008 规范链接与页面自身地址不同,SEO021 站点地图列出了一个未被索引的页面,SEO043 医学结构化数据类型,SEO050 第三方脚本,等等)。将 error 视为“发布前修复”,warn 视为“做出决定,然后修复或记录”,info 视为“值得了解”。它用来评估站点的规则(地址、什么算作站点文件、robots 组、JSON-LD 对象)在 references/checklist.md 中有说明。

检查器是如何构建的

测试套件是首先创建的:一个必须产生零项发现的固定站点,以及每个检查对应的一个故意损坏的副本,每个副本都与精确的发现和退出码进行比较。这些测试对照一个独立的参考实现以及该实现的故意损坏版本进行了检查,以确保每个测试在应该失败的时候都确实失败了。

然后,一个在本地运行的小型开源权重模型根据一份书面规范起草了 seo_audit.py。它起草的脚本在第一次尝试时就通过了所有这些测试。通过测试并不能作为证明。一次由人员指导、使用一个更大模型进行的审查,从头到尾对照规范阅读了草稿,并发现了测试无法发现的 17 个缺陷。其中包括:

  • 不是 index.html 的页面得到了错误的地址;
  • 404 页面跳过了其内容检查;
  • 相同的发现被合并了;
  • robots 组和锚定通配符被误读;
  • @graph 成员被错误处理;
  • 深度嵌套的 HTML 导致运行崩溃;
  • 样式表路径可能超出了站点文件夹的范围。

每个缺陷都成为了 tests/test_seo_audit_extra.py 中的一个新测试,然后通过最小的变更进行了修复。决定检查器是否正确的是测试。编写它的模型和审查它的模型都不能决定。如果你修改了脚本,请运行测试;如果你发现了一个测试遗漏的情况,请在修复前添加一个测试。

4. 健康和研究网站

读者和搜索引擎自身的质量标准(即“你的钱或你的命”)对健康内容有更高的要求。检查器强制执行机械性的部分;其余部分是一个阅读任务,列在 references/health-sites.md 中。简而言之,每个此类页面都需要:可见的作者或一个说明责任人的“关于”页面;可见的日期以及当内容非最终版时的可见草稿或审查状态;引用的主要来源;一句清晰的“研究,而非医疗建议”;不吹嘘页面内容的描述和结构化数据;并且不要使用医学结构化数据类型(MedicalCondition、MedicalWebPage、Drug),除非该网站是一个临床权威机构。references/structured-data.md 解释了诚实的结构化数据是什么样的,以及严格的内容安全策略如何与之交互。

5. 如何安全地将部分工作交给较小的本地模型

审查工作可以分为确定性验证器可以判断的任务和只有人员(或细心的读者)才能完成的任务。只将第一种任务交给本地模型。

可以安全地委托(需配合验证器)由人员或主控 agent 处理
根据 tests/test_seo_audit.py 编写或扩展检查器(由验证器决定)决定任何将公开的标题、描述或链接文本
列出每个页面的确切当前标题、描述、规范链接和 h1,以表格形式呈现(验证器:这些值是文件的子字符串)判断描述是否过度声明
将每个链接的文本分类为“说明了目标”或“通用”,允许弃权(验证器:每个链接都已涵盖,文本未被修改)该网站的结构化数据是否诚实
从页面列表起草站点地图(验证器:检查器的 SEO021/SEO022)日期是否诚实

规则:每个任务一个独立、自包含的包;页面文本放在数据边界内,并附带不执行其内部任何内容的指令;模型不获得任何工具和网络访问权限;一个完成的声明在验证器的输出显示通过之前毫无价值。绝不让模型决定措辞。如果你在委托循环中使用此功能,请先编写验证器并给它一个必须失败的桩(一个输出零发现的检查器必须无法通过测试)。

6. 诚实规则

  • 给每条声明贴上 OBSERVED(已观察,你运行了它或阅读了它,并且能说出文件、行或命令)或 INFERRED(推断,一个判断)的标签。“描述过度声明”是推断的;“描述说了 X,而页面唯一匹配的句子说了 Y”是已观察的。
  • 绝不声称或暗示你事后没有测量过的排名提升、流量变化或预览结果。本技能或任何使用它的人都不承诺 SEO 结果。
  • 描述、标题或结构化数据字段只能声明读者在该页面上能看到的内容。当你提出文案时,引用支持性的句子。
  • 日期必须是真实的:没有内容变更而移动的站点地图 lastmod 或可见的“更新”日期,是对读者和爬虫的谎言。
  • 说明你没有检查什么。检查器不获取任何东西,因此一次干净的运行并不能说明主机提供的内容是什么。

7. 验证技能是否正常工作

从技能文件夹运行:

python -m unittest discover -s tests -v               # 两个测试文件,均针对 scripts/seo_audit.py
python tests/verify_checker.py scripts/seo_audit.py   # 相同的测试,简短结论:通过 N 个测试,或 失败 行

设置 SEO_AUDIT_PATH 以测试检查器的另一个副本。测试从 tests/fixtures/good(必须产生零项发现)构建有缺陷的站点,每个检查 ID 一个缺陷,并比较精确的发现和退出码。tests/test_seo_audit_extra.py 增加了审查中发现的案例:非标准文件、子文件夹页面、404 页面、robots 组、结构化数据图,以及一个确认运行不打开 socket、不启动进程、不写入文件(除了 --json-out)的审计钩子。固定站点中的 1200x630 共享图片在测试时由 tests/fixtures/gen_fixtures.py 重新生成。一个从未失败过测试的检查器证明不了什么:tests/verify_checker.py 针对一个空的桩运行必须失败。

已知的测试限制:固定站点地图的 lastmod 是 2026-10-01,因此时钟早于该日期的机器会报告 SEO023;符号链接测试在账户无法创建符号链接的环境中跳过(常见于 Windows)。

8. 常见陷阱

  • 修复了检查器发现的问题就停止。 检查器无法发现过度声明、不诚实的日期或一个名为“打开模型”实则无法说明打开什么内容的链接。第 3 步才是真正的审查。
  • 将 404 页面视为普通页面。 它必须使用 noindex 并且没有规范链接;否则每个不存在的地址都会被索引为该页面的副本。
  • 相对规范链接。 规范链接必须是页面的绝对地址,包含尾部斜杠,并且 og:url 必须与之相等。
  • 字体未预加载。 字体交换是导致布局偏移的常见原因;预加载首屏绘制所需的一种字体,以及页面首先需要的一个模块。用测量代替猜测:references/measuring-layout-shift.md。
  • 信任构建。 主机会注入脚本。如果网站说“没有从其他主机加载任何内容”,第 6 步必须在服务的页面上证明这一点。
  • 让结构化数据与页面脱节。 JSON-LD 中的每个 name 或 headline 都必须是该页面上可见的内容;检查器的 SEO044 是一个弱代理,人员的阅读才是真正的检查。

9. 参考文献

安全标头(Strict-Transport-Security、Content-Security-Policy、X-Content-Type-Options、Referrer-Policy)属于安全审查。本技能仅在它们影响结构化数据时才提及;其余部分请使用你的安全基线。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能