
# 我们如何评分：23 项检查，以及为什么有些权重更高

百分制的分数是一种主张，而大多数这类主张无从证伪：给你一个数字，背后没有方法，上面没有版本，事后也没法判断是你的网站变了还是工具变了。

我们的分数由五个加权维度下的 23 项检查构成，全部写在一个文件里：`packages/engine/src/scorer.js`。下面说明每一部分衡量什么、值多少分，以及它不能告诉你什么。

## 五个维度

**可访问性 —— 30%，3 项检查。** 机器能不能读到这个页面。没有 JavaScript 时正文是否存在，正文是否出现在 HTML 靠前的位置，页面是否小到可以整份抓下来。这是最重的维度，因为爬虫如果只拿到一个空壳，其余一切都只是装饰。

**AI 可发现性 —— 25%，6 项检查。** AI 客户端能不能进来、进来后找不找得到路：有没有 robots.txt，它是否放行 AI 搜索机器人，有没有站点地图，站点是否响应 `Accept: text/markdown`，有没有 llms.txt，有没有声明 Content-Signal。

**结构化数据 —— 20%，5 项检查。** Schema.org/JSON-LD、Open Graph、meta description、规范 URL，以及 `<html>` 上的 `lang`。这部分告诉机器这个页面*是什么*，而不是它说了什么。

**语义化 HTML —— 15%，5 项检查。** 标题层级、`<article>` 或 `<main>`、语义元素与 div 的比例、真正在描述内容的替代文本、div 的嵌套深度。抽取程序正是靠这些来判断页面的哪些部分才是页面本身。

**内容效率 —— 10%，4 项检查。** 从 HTML 转成 Markdown 的 token 削减比例、内容与噪声之比、页面重量、内联样式。也就是你发出去的东西里有多少是内容。

## 为什么不是每项都一样重

每项检查在权重旁边还带着一个证据等级，而权重正是由这个等级决定的：

- **已证实** —— 模型厂商自己有文档说明，或有实测证明。23 项中的 3 项。
- **合理** —— 推理站得住脚，与抽取流程的工作方式一致，但没有任何厂商确认过。23 项中的 13 项。
- **推测** —— 这个约定确实存在，业界也相信它，但没人证明过有机器人真的在读。23 项中的 7 项。

一路算到最终分数，这意味着 100 分里大约 32 分落在已证实的检查上，51 分在合理的检查上，17 分在推测性的检查上。

已证实的三项是：页面不依赖 JavaScript 就能渲染，robots.txt 放行 AI 搜索机器人，页面带有 Schema.org 标记。第一项是这个领域证据最扎实的信号，因为主流 AI 爬虫没有一个执行 JavaScript。第二项是整张表里唯一真正的闸门：拦住搜索机器人，你在那个助手里就是不存在。

另一端是 llms.txt 和 Content-Signal。它们被大量域名提供着，却没有任何厂商确认读取，Google 还明确表示 llms.txt 没有任何作用。我们仍然给它们打分——没有证据并不等于证明无效——但每项只占其维度的 10%，而不是 llms.txt 当初的 20%。内容效率这个维度从头到尾都是推测：检索流程会在模型看到任何东西之前先跑一遍 Readability 式的抽取，所以精简的 HTML 换来的好处大概比业界想象的少。

这次重新配重就是评分标准的第 2 版。在 v1 里，「无需 JavaScript 即可渲染」只值最终分数的 6%，而从没有任何厂商提过的 token 削减却值 10%：表上证据最扎实的一项，权重反而低于一个猜测。

## 评分标准带着版本号

评分器导出 `RUBRIC_VERSION`，目前是 2。v1 是 2026 年 2 月的初始权重，v2 是 2026 年 7 月按证据做的重新配重。

没有这个号码，分数就无法复现。你跑一次分析，得到 90。半年后再跑，得到 85。是你的网站退步了，还是我们悄悄挪动了球门？一张不写明用什么尺子量的证书，就是一个谁也核不了的数字。

这个错误我们真的上线过。版本号存在于评分器中，也随结果对象一起传递，却从来没有写进数据库——于是排行榜把一堆分数排在一起，却不知道它们是不是用同一把尺子量出来的，v1 的记录压在 v2 的记录上面，仿佛这种比较有意义。

迁移脚本 `007_add_rubric_version_to_analyses.js` 加上了这一列，并把所有已有记录的默认值设为 1。这个默认值不是猜的：表里所有记录都早于 v2，所以 1 就是事实。它还为 `(rubric_version, score)` 建了索引，好让排名可以限定在同一套标准内。真正要紧的是时机——它必须在第一条 v2 分析写入之前落地，否则新记录会默默声称自己是 v1。

## 我们刻意不评的东西

**一个页面，而不是整个站点。** 一次分析只读一个 URL。robots.txt、站点地图和 llms.txt 是全站范围的，其余全都只属于那一个页面。一个做得好的页面即使所在站点整体薄弱，也照样拿高分，这是对的。

**模型究竟拿你做了什么。** 我们看不到 ChatGPT 有没有引用你，看不到 Claude 是不是用你的页面拼出了答案，也看不到有没有人提到你。这些事从外部谁也看不到。每一项检查衡量的都是你提供了什么，而不是别人拿它做了什么。

**爬虫是不是真的进来了。** 当我们伪装成 AI 机器人去探测，robots.txt 说欢迎，边缘却把我们挡了回来，我们并不知道一个通过验证的爬虫会遇到哪一边。这一项的上限被压在 60 分——是有保留的通过，而不是不及格——具体发生了什么由详情文字说明。用数字表达「不知道」是很糟糕的做法。

这里没有任何一项在检查你写的东西好不好。高分是一个不错的先验：机器读得到这个页面，也分得清它是什么。它不是被引用的承诺。

## 我们也把它用在自己身上

agentready.md 得 94/100。这个数字是从数据库里读出来的——我们对自己域名最近一次分析的结果，并链接到它的证书——而不是写死在模板里。它变，页面就跟着变。没有分析记录时，页面宁可什么都不显示，也不摆一个过期的数字。

它掉过分。有几个月，我们的源站对 `/robots.txt` 返回 `404`，而 Cloudflare 托管的 Content Signals Policy 在边缘用 `200` 回应，内容是一份我们从没写过的文件。我们自己的评分器读到那个 `200`，给了我们通过。等我们修好源站、关掉那份托管文件后，分数从 93 掉到 90。低的那个才是诚实的：那三分量的是 Cloudflare 的文件，不是我们的。

[分数是怎么算出来的](/zh/about) · [其他站点得多少分](/zh/leaderboard)
