AFR v1.1
AFR 标准全文
AFR(AI-Friendliness Rating,AI 友好度评级)给每个网站 0–100 分,衡量它对 AI 爬虫与智能体有多开放。只测公开可复现的事实:每个子项 = 一次人人可重复的 HTTP GET / DNS 查询,每个得分点都能链到原始证据。等级是开放度坐标,不是道德评判。
三层模型
总分 100 = 35 + 40 + 25。可懂层权重最高,因为“内容机器可读”才是 AI 友好的本体:技术上全开放但内容混乱的站,在 AI 实用性上仍然不及格。
| 层 | 回答的问题 | 权重 |
|---|---|---|
| L1 可达层 | AI 能不能来? | 35 |
| L2 可懂层 | 来了能不能读懂? | 40 |
| L3 可交互层 | 能不能替用户干活? | 25 |
全部子项
严格按标准分组。分值固定,不依赖观点、热度或付费。
L1 可达层 35 分
可达层——35 分。AI 爬虫能不能拿到你的内容?其中 25 分在 robots.txt 的 AI 爬虫政策上,按爬虫家族分别记分;没有 robots.txt 即协议缺省(全部允许),按定义记满分。
A1 robots.txt AI 爬虫政策 25 分
按 AI 爬虫家族记分:搜索/引用型 9、混合型 6、训练型 10。每个 UA 取“最具体匹配”的规则组裁定(RFC 9309);部分 Disallow(如仅 /private/)视为允许,全站 Disallow 该家族记 0。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| A1.OAI-SearchBot | 搜索 / 引用型 | OAI-SearchBot | 4 | robots.txt 放行 OAI-SearchBot 即得该分(搜索 / 引用型 家族);取“最具体匹配”的规则组裁定。 |
| A1.PerplexityBot | 搜索 / 引用型 | PerplexityBot | 3 | robots.txt 放行 PerplexityBot 即得该分(搜索 / 引用型 家族);取“最具体匹配”的规则组裁定。 |
| A1.ChatGPT-User | 搜索 / 引用型 | ChatGPT-User | 2 | robots.txt 放行 ChatGPT-User 即得该分(搜索 / 引用型 家族);取“最具体匹配”的规则组裁定。 |
| A1.Google-Extended | 混合型 | Google-Extended | 3 | robots.txt 放行 Google-Extended 即得该分(混合型 家族);取“最具体匹配”的规则组裁定。 |
| A1.Applebot-Assistant | 混合型 | Applebot-Assistant | 2 | robots.txt 放行 Applebot-Assistant 即得该分(混合型 家族);取“最具体匹配”的规则组裁定。 |
| A1.Bingbot | 混合型 | Bingbot | 1 | robots.txt 放行 Bingbot 即得该分(混合型 家族);取“最具体匹配”的规则组裁定。 |
| A1.GPTBot | 训练型 | GPTBot | 3 | robots.txt 放行 GPTBot 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| A1.ClaudeBot | 训练型 | ClaudeBot | 2 | robots.txt 放行 ClaudeBot 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| A1.CCBot | 训练型 | CCBot | 1 | robots.txt 放行 CCBot 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| A1.Bytespider | 训练型 | Bytespider | 1 | robots.txt 放行 Bytespider 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| A1.meta-externalagent | 训练型 | meta-externalagent | 1 | robots.txt 放行 meta-externalagent 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| A1.Amazonbot | 训练型 | Amazonbot | 1 | robots.txt 放行 Amazonbot 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| A1.Applebot-Extended | 训练型 | Applebot-Extended | 1 | robots.txt 放行 Applebot-Extended 即得该分(训练型 家族);取“最具体匹配”的规则组裁定。 |
| 本组合计 | 25 | |||
A2 无技术墙 5 分
不执行 JS 的爬虫也要能读到首页正文,且首页不能是“登录后查看”型的强制登录墙。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| A2.no-js-body | — | — | 3 | 无 JS 的 UA 能取到可读正文(文本 ≥ 80 词或含 <noscript> 内容)。 |
| A2.no-login-wall | — | — | 2 | 首页无全站强制登录墙。 |
| 本组合计 | 5 | |||
A3 基础可用性 5 分
HTTPS 且证书有效、首页响应 < 2.5s(3 次取中位)、无可疑跳转链(≤2 跳且同域族)。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| A3.https-valid | — | — | 2 | HTTPS 且证书有效。 |
| A3.response-time | — | — | 2 | 首页响应 < 2.5s(3 次取中位)。 |
| A3.redirect-chain | — | — | 1 | 无可疑跳转链(≤2 跳且同域族)。 |
| 本组合计 | 5 | |||
L2 可懂层 40 分
可懂层——40 分。爬虫来了,能不能读懂页面?llms.txt、结构化数据、语义化 HTML、sitemap 与内容信号。诚实披露:llms.txt 是机器可读性加分项,不是 AI 引用保证。
B1 llms.txt 家族 14 分
面向 AI 阅读者的机器可读内容地图。诚实披露:llms.txt 是可读性加分项,并非 AI 引用的排名信号。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| B1.llms-txt | — | — | 8 | /llms.txt 存在且返回 200。 |
| B1.format | — | — | 4 | 格式合规:H1 + 简介 + 可解析的 Markdown 链接列表。 |
| B1.llms-full-txt | — | — | 2 | /llms-full.txt 存在。 |
| 本组合计 | 14 | |||
B2 结构化数据 8 分
JSON-LD 或 microdata,以及让智能体理解页面主题的实体类型。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| B2.json-ld | — | — | 2 | 页面含 JSON-LD 或 microdata。 |
| B2.core-entity | — | — | 4 | 含核心实体类型:Organization / WebSite / Article / Product。 |
| B2.rich-type | — | — | 2 | 含丰富类型:FAQPage / HowTo / BreadcrumbList。 |
| 本组合计 | 8 | |||
B3 语义化 HTML 8 分
标题层级、图片 alt 覆盖率、OG 标签与 html lang 声明。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| B3.unique-h1 | — | — | 1 | 全页唯一 <h1>。 |
| B3.heading-order | — | — | 2 | 标题层级无跳级(h1 → h2 → h3)。 |
| B3.img-alt | — | — | 2 | <img> alt 覆盖率 ≥ 60%。 |
| B3.og-tags | — | — | 2 | 存在 og:title / og:description。 |
| B3.html-lang | — | — | 1 | 声明 <html lang>。 |
| 本组合计 | 8 | |||
B4 Sitemap 4 分
/sitemap.xml 可达、含 lastmod,并覆盖首页抽样链接。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| B4.sitemap-reachable | — | — | 2 | /sitemap.xml 可达(robots.txt 声明或直接命中)。 |
| B4.lastmod | — | — | 1 | sitemap 条目含 lastmod。 |
| B4.link-coverage | — | — | 1 | 首页抽样 10 条链接,≥80% 在 sitemap 中。 |
| 本组合计 | 4 | |||
B5 内容信号 6 分
可提取文本量、机器可读日期与可达的 About / 联系路径。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| B5.word-count | — | — | 2 | 首页可提取文本 ≥ 500 词。 |
| B5.machine-dates | — | — | 2 | 机器可读日期(<time datetime> 或 ISO 格式)。 |
| B5.about-contact | — | — | 2 | 首页含 about / contact 链接且可达。 |
| 本组合计 | 6 | |||
L3 可交互层 25 分
可交互层——25 分。AI 能不能替用户干活:调用公开 API、读取 Agent 指令、通过 MCP 连接、或使用站内 AI 功能?
C1 公开 API 8 分
智能体能直接调用的 API、人类可读文档与机器可读 OpenAPI spec。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| C1.public-api | — | — | 5 | 检测到公开 API(llms.txt / 常见路径 / 开发者子域)。 |
| C1.api-docs | — | — | 2 | 人类可读的 API 文档。 |
| C1.openapi-spec | — | — | 1 | 机器可读 OpenAPI spec(/.well-known/openapi.yaml 或文档页 schema 引用)。 |
| 本组合计 | 8 | |||
C2 Agent 指令 4 分
/agents.md,以及 llms.txt 中的 agent 使用政策段(Optional 部分)。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| C2.agents-md | — | — | 2 | /agents.md 存在。 |
| C2.llms-agent-policy | — | — | 2 | llms.txt 中含 agent 使用政策 / 指令段。 |
| 本组合计 | 4 | |||
C3 MCP 接口 6 分
站点或其文档声明的公开 MCP server,URL 可达。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| C3.mcp-server | — | — | 6 | 声明了公开 MCP server,且 URL 可达。 |
| 本组合计 | 6 | |||
C4 站内 AI 功能 7 分
站内 AI 助手 / AI 搜索 / 生成式功能——唯一允许在自动化之外做人工抽检的子项。
| ID | 家族 | User-agent | 分值 | 测什么 |
|---|---|---|---|---|
| C4.ai-features | — | — | 7 | 站内 AI 助手 / AI 搜索 / 生成式功能。 |
| 本组合计 | 7 | |||
等级阈值
现行阈值 A ≥75 / B ≥60 / C ≥42 / D ≥25,2026-11-10 依据首批 Top-1000 扫描分布校准;此后仅在季度边界按分布复核调整,历史分数按其当时的引擎版本保留展示。
| 等级 | 分数区间 | 名称 | 含义 |
|---|---|---|---|
| A | 75–100 | AI-Open | 全开放 |
| B | 60–74 | AI-Friendly | 友好 |
| C | 42–59 | AI-Neutral | 中性 |
| D | 25–41 | AI-Restricted | 受限 |
| F | 0–24 | AI-Closed | 封闭 |
策略标签
仅由 robots.txt 得出的第二条独立坐标。标签与等级并列展示,不参与扣分——它解释分数背后的策略。
- AI-Open 允许全部 AI 爬虫:搜索型、混合型与训练型。
- Middle-Path 放行搜索型爬虫,拦截训练型爬虫。
- Training-Open 开放训练型爬虫,同时限制搜索型爬虫。
- AI-Closed 全站封锁所有 AI 爬虫。
- Unconfigured robots.txt 无任何 AI 相关规则,按协议缺省语义处理。
引擎版本
每次扫描都会记录产出它的引擎版本,本站任何分数都可被逐位复算。
| 书面标准 | AFR v1.1 |
|---|---|
| 评分引擎 | afr-1.1.0 |
| 扫描器 | scanner-0.1.0 |
| 爬虫 User-Agent | afrScanner/0.1 (+https://afr.im/bot; AI-friendliness research crawler) |
每份快照都存 engine_version;历史分数绝不用新引擎重算——始终绑定产出它的那个版本。
当书面标准与引擎实现不一致时,以每次扫描记录的引擎版本为准进行复算。
自己复算任何评分
评分引擎是纯函数:无 IO、无时钟、无网络。克隆仓库、跑测试,再把记录好的快照喂回引擎即可。
1. 克隆仓库并运行引擎测试(Node ≥ 22,零依赖):
git clone https://github.com/AFR-IM/AFR-web
cd AFR-web
npm test # = node --test packages/*/test/*.test.ts 2. 把记录好的快照(每站 { signals, afr })喂回引擎:
import { scoreAfr } from './packages/afr/src/index.ts';
import snapshot from './scans/github.com.json' with { type: 'json' };
const result = scoreAfr(snapshot.signals);
console.log(result.score, result.grade, result.engineVersion); 中立性承诺
付费不能改分。
原文照录——这是产品立身之本。
- 付费永远不能改变排名或等级。自然排行始终是纯 AFR 分数降序;付费买到的是独立 Sponsored 区块的曝光位,绝不会改变自然榜位次,也绝买不到更好看的等级。
- 每个广告位都强制展示该站真实的等级色环与分数——F 级站可以买曝光,但买不到 A 级外观。
- 广告以带固定 “Sponsored” 角标的独立区块呈现,绝不与自然结果混排;hover 广告不会改变任何等级色。
- 站长验证、徽章、证据链与评分变化通知永久免费。免费层绝不设限逼升级。
付费不能改分:评分永远不受付费影响。
数据来源
- 种子集
- Tranco 每日 Top 1M(tranco-list.eu,学术用途免费署名)。
- 扫描证据
- 公开快照提交至 github.com/AFR-IM/AFR-data——git 版本化即审计轨迹。
- 纠错通道
- 向数据仓提 PR(corrections/)即触发重扫复核;已验证站方可发布声明。
机读标准
整套标准以 JSON 形式提供在 /api/v1/method(三层、每个子项分值、等级阈值),工具无需抓取本页即可消费。
AFR v1.1 以 CC BY 4.0 发布——署名后可自由复用。