判决
你的 AI 检索链路上有 1 个位置会被读错,另有 1 个位置我们无法判断。
21 个位置
12 通过
1 读错
1 无法判断
7 不适用
四格之和恒等于位置数。「无法判断」永不折算进「通过」——「我们看不了」和「你这里没问题」是两件事。
按根因
本次没有需要归并的根因。
口径:1 条 finding / 0 处根因 / 1 个链接实例 —— 三个数各有各的意思,不许混着说。
未能评估
把「我们没看到」误读成「没问题」的代价,比漏一条 LOW 死链大得多,所以这一区排在发现之前。这些位置既不计死链也不计存活。
① 入口发现
原因码: robots_disallowed
discovery:support.saleor.io
位置
https://support.saleor.io/
实际是
robots.txt 禁止抓取 /,本位置未评估
补救办法
你的 robots.txt 禁止抓这个路径,我们遵守了。要检查请加 --ignore-robots。「我们没被允许看」是真话,「这里没问题」是假话。
AI 检索链路六段
? ① 入口发现 4 个位置 ✓ 3 通过 · ? 1 无法判断 ✓ ② 索引文件真伪 3 个位置 ✓ 3 通过 ✕ ③ 全文通道 6 个位置 ✕ 1 读错 · – 5 不适用 ✓ ④ 索引内链存活 2 个位置 ✓ 2 通过 – ⑤ .md 通道 1 个位置 未声明「任意页面加 .md 」约定 ✓ ⑥ 可点击路径 5 个位置 ✓ 4 通过 · – 1 不适用
这条链路上任何一段断掉,后面几段的内容 AI 都拿不到。
差异化演示
只探根路径、不做对照探测的实现,在这个站上没读错。差异化演示区因此是空的 —— 这是这个域的性质,不是我们少做了对照。
这一块的作用不是炫技,是让「我拿别的东西查过,没这条」这句话失效:我们先说出那类实现在这里会得出什么、以及它少做了哪一步。
自己复现 → geo-audit saleor.io --contact you@you.co --naive-only
这份报告不检查:锚点是否腐烂、sitemap、robots 对 AI 爬虫的放行、图片/CSS 资源、事实是否冲突、内容是否过期。理由见文末。
发现(按根因分组)
未归并(各自独立的一处改动)
HIGH
·
AI 通道内部
③ 全文通道
soft_404
GA-B9E590057E
https://docs.saleor.io/docs/llms-full.txt 返回 200 但内容不是文本文件(软 404)
去哪儿改
HTTP 200,74335 字节,内容是兜底页(修复目标:我们没找到明显的正确目标,需人工确认)
证据
<title>Saleor Documentation | Saleor Commerce Documentation</title>
saleor documentation | saleor commerce documentation skip to main content 🔧 let's build together. join saleor dev community on discord. join the community search sign up overview quickstart why saleor product cloud core concepts recipes api
这一条靠确定性规则判定(要的是文本文件、给回来的是 HTML),不依赖同域对照。
复现
curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://docs.saleor.io/docs/llms-full.txt'
只探根路径、不做对照探测的实现会说: 未采纳(没探这个位置)
实际是: 软 404:html_where_text_expected(另命中 redirect_to_site_root),HTTP 200 / text/html
AI 抓这个位置拿到的是页面外壳,不是你的索引文件。只看状态码的工具会把它读成「已采纳 llms.txt」——采纳率因此虚高。
已排除的可能(通过了这些去噪规则才报出来):
html_where_text_expected redirect_to_site_root
严重度依据:
page_role=ai_channel anchor=(AI 通道内部,无锚文本) anchor_class=(AI 通道内部,无 class) region=ai_channel
不认这条: geo-audit saleor.io --ignore GA-B9E590057E
纯文本版(手选复制)
GA-B9E590057E HIGH AI 通道内部
https://docs.saleor.io/docs/llms-full.txt 返回 200 但内容不是文本文件(软 404)
目标: https://docs.saleor.io/docs/llms-full.txt 200 text/html
curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://docs.saleor.io/docs/llms-full.txt'
geo-audit saleor.io --ignore GA-B9E590057E
待人工确认
下面这些我们判它死了,但静态 HTML 判不了它是否对访客可见。我们打 needs_review 而不是丢弃,也不进首页分子。
本次没有需要人工确认的条目。
下次会先坏在哪 · 结构性脆弱点
每条都挂一个实测先例,并给一条能直接放进 CI 的命令。这一区不是预测,是「这个形状在语料里已经坏过」。
INFO
F6
WAF 会把真文件挡成 403/429
判据 本次全部 host 的对照探测都可用(0 个被挡)
为什么危险 被拦截 ≠ 不存在。纯 HTTP 客户端在这类 host 上会把真文件读成「没有」。
实测先例 gusto.com 403、www.pipedrive.com 429
放进 CI 的一条命令
geo-audit saleor.io --contact you@yourco.com --format json
INFO
F8
该 host 对未知路径不返回 404
判据 本次全部 host 对随机路径都返回了非 2xx(状态码可判别)
为什么危险 这种 host 上任何只看状态码的工具都会报 0 死链,那个 0 是假的。
实测先例 developers.pipedrive.com(200 + 24,907 B 兜底页)、docs.gusto.com(302→/)、docs.moderntreasury.com(302→/)、www.minimax.io(200 + 384,052 B)、platform.kimi.ai(200 + 414,072 B)
放进 CI 的一条命令
geo-audit saleor.io --contact you@yourco.com --format json
我们替你验了什么 · 证据存档
逐位置一行,行数恒等于位置数。每行都带一条可粘贴的 curl。
共 21 行 == 21 个位置。
段 URL 状态码 content-type 字节 对照路径 对照返回 结论
① 入口发现
https://saleor.io/
—
—
—
—
—
通过
对照探测 https://saleor.io/geo-audit-probe-47a5ac09743770548233293a 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容
① 入口发现
https://www.saleor.io/
—
—
—
—
—
通过
对照探测 https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容
① 入口发现
https://docs.saleor.io/
—
—
—
—
—
通过
对照探测 https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容
① 入口发现
https://support.saleor.io/
—
—
—
—
—
无法判断
robots.txt 禁止抓取 /,本位置未评估
② 索引文件真伪
https://saleor.io/llms.txt
200
text/plain
2,043
https://saleor.io/geo-audit-probe-47a5ac09743770548233293a
404
通过
对照探测 https://saleor.io/geo-audit-probe-47a5ac09743770548233293a 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容;用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://saleor.io/llms.txt'
③ 全文通道
https://saleor.io/llms-full.txt
404
text/html
38,789
https://saleor.io/geo-audit-probe-47a5ac09743770548233293a
404
不适用
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://saleor.io/llms-full.txt'
② 索引文件真伪
https://www.saleor.io/llms.txt
200
text/plain
2,043
https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb
404
通过
对照探测 https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容;用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://www.saleor.io/llms.txt'
③ 全文通道
https://www.saleor.io/llms-full.txt
404
text/html
38,789
https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb
404
不适用
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://www.saleor.io/llms-full.txt'
② 索引文件真伪
https://docs.saleor.io/llms.txt
200
text/plain
3,947
https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf
404
通过
对照探测 https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容;用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://docs.saleor.io/llms.txt'
③ 全文通道
https://docs.saleor.io/llms-full.txt
404
text/html
9,404
https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf
404
不适用
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://docs.saleor.io/llms-full.txt'
③ 全文通道
https://saleor.io/docs/llms-full.txt
404
text/html
38,829
https://saleor.io/geo-audit-probe-47a5ac09743770548233293a
404
不适用
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://saleor.io/docs/llms-full.txt'
③ 全文通道
https://www.saleor.io/docs/llms-full.txt
404
text/html
38,829
https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb
404
不适用
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://www.saleor.io/docs/llms-full.txt'
③ 全文通道
https://docs.saleor.io/docs/llms-full.txt
200
text/html
74,335
https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf
404
读错
请求的是文本文件,实际返回 HTML(content-type: text/html,74329 字符);用 Accept: */* 再量一次,状态码、正文类型都一致
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://docs.saleor.io/docs/llms-full.txt'
④ 索引内链存活
https://saleor.io/llms.txt
200
text/plain
2,043
—
—
通过
16 条内链:10 活 / 0 死 / 6 判不了
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://www.saleor.io/llms.txt'
④ 索引内链存活
https://docs.saleor.io/llms.txt
200
text/plain
3,947
—
—
通过
7 条内链:2 活 / 0 死 / 4 判不了
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://docs.saleor.io/llms.txt'
⑤ .md 通道
https://saleor.io/
—
—
—
—
—
不适用
未声明「任意页面加 .md」约定
⑥ 可点击路径
https://www.saleor.io/
—
—
—
—
—
通过
6 条可点击链接全部活着
⑥ 可点击路径
https://www.saleor.io/pricing
—
—
—
—
—
通过
3 条可点击链接全部活着
⑥ 可点击路径
https://www.saleor.io/changelog
—
—
—
—
—
通过
2 条可点击链接全部活着
⑥ 可点击路径
https://docs.saleor.io/
—
—
—
—
—
通过
19 条可点击链接全部活着
⑥ 可点击路径
https://www.saleor.io/help
404
text/html
38,735
—
—
不适用
起始页抓不下来:HTTP 404 / status_404
curl curl -sSL -A 'geo-audit/0.1.0 (+https://github.com/wangtoone/geo-audit; contact: 152046194+wangtoone@users.noreply.github.com)' 'https://www.saleor.io/help'
别人的工具会怎么误判你
三种可自动检出的误判形态。这一块是零发现报告真正的付费点:你拿到的 0 与别处拿到的 0,来源不一样。
你的真文件会被读成「没有」 :WAF / 限流会把纯 HTTP 客户端拦掉(实测 gusto.com 403、www.pipedrive.com 429);真文件在子域或 /docs 下而根路径 404 或软 404(实测 minimax、moonshot、siliconflow、onfleet、canvasmedical、ecwid 六家)。
你的 0 死链会被读成「有死链」 :站上有 Cloudflare 的 /cdn-cgi/l/email-protection 诱饵 href、有 example.com 占位、有 Alpine/Vue 的 :href、有 {templateID} 这类模板占位。实测:这类噪声能让死链数从 25 虚报成 42(+68%)。
你的 0 死链其实是假的 0 :你的站对未知路径返回 200 或 302 而不是 404(实测 developers.pipedrive.com 的 24,907 B 兜底页、docs.gusto.com 与 docs.moderntreasury.com 的 302→首页、platform.kimi.ai 的 414,072 B Quickstart 页)。这种站上任何只看状态码的死链工具都会报 0 死链,那个 0 是假的。我们是用正文/骨架比对得出的 0,所以我们的 0 是真的。
裸域 / www 双向探测
saleor.io
ok · ok_control_discriminates
www.saleor.io
ok · ok_control_discriminates
结论
both_ok single_case
证据强度 single_case:全语料只有一例(brevo 的裸域返回 Vercel 的纯文本 DEPLOYMENT_NOT_FOUND,而 www 与 developers 子域都正常)。n=1 不够格进首页计数,所以这一区单列。
被去噪排除的链接
逐条留痕,带 rule_id。实测教训:五个批次排除了 /cdn-cgi/l/email-protection、另几个批次没排 —— 同一个东西两套口径,所以这里必须逐条列。
URL rule_id 规则说明 出现在 证据强度 处置
https://raw.githubusercontent.com/saleor/saleor-docs/main/docs/{path}.mdx
url_template_placeholder
URL 里含未替换的模板占位符({year}/{permalink}/{templateID})
https://docs.saleor.io/llms.txt
measured
excluded
朴素对照全表
同一批已抓响应上的两个读数:左边只用「跟完跳转的最终状态码」推,右边是我们的判定。朴素侧不额外发一个请求 —— 它是换算器,不是第二次扫描。
只有 ① 入口发现 / ② 索引文件真伪 / ③ 全文通道 三段的位置进这张表;④⑤⑥ 的差异化走下面那行死链口径对比。
有分歧 0 条。
探测位置 朴素方法 那种实现会说 实际是 有分歧 多打的请求 方向
https://saleor.io/
不在朴素探测集内
它往这个 host 打过请求(只打了两条根路径)
对照探测 https://saleor.io/geo-audit-probe-47a5ac09743770548233293a 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容
n
1
一致
https://www.saleor.io/
不在朴素探测集内
它往这个 host 打过请求(只打了两条根路径)
对照探测 https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容
n
1
一致
https://docs.saleor.io/
不在朴素探测集内
它从没往这个 host 打过请求
对照探测 https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容
n
2
一致
https://support.saleor.io/
不在朴素探测集内
它从没往这个 host 打过请求
robots.txt 禁止抓取 /,本位置未评估
n
2
一致
https://saleor.io/llms.txt
GET https://saleor.io/llms.txt,跟随跳转,只看最终状态码
已采纳(200)
对照探测 https://saleor.io/geo-audit-probe-47a5ac09743770548233293a 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容;用 Accept: */* 再量一次,状态码、正文类型都一致
n
1
一致
https://saleor.io/llms-full.txt
GET https://saleor.io/llms-full.txt,跟随跳转,只看最终状态码
未采纳(404)
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
n
1
一致
https://www.saleor.io/llms.txt
GET https://www.saleor.io/llms.txt,跟随跳转,只看最终状态码
已采纳(200)
对照探测 https://www.saleor.io/geo-audit-probe-a1e153d894d8f8faaa44bffb 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容;用 Accept: */* 再量一次,状态码、正文类型都一致
n
1
一致
https://www.saleor.io/llms-full.txt
GET https://www.saleor.io/llms-full.txt,跟随跳转,只看最终状态码
未采纳(404)
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
n
1
一致
https://docs.saleor.io/llms.txt
不在朴素探测集内
未采纳(没探这个位置)
对照探测 https://docs.saleor.io/geo-audit-probe-baa463941df375bfe98aebdf 返回 HTTP 404 / text/html,与本响应可区分,判为真实内容;用 Accept: */* 再量一次,状态码、正文类型都一致
n
2
一致
https://docs.saleor.io/llms-full.txt
不在朴素探测集内
未采纳(没探这个位置)
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
n
2
一致
https://saleor.io/docs/llms-full.txt
不在朴素探测集内
未采纳(没探这个位置)
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
n
2
一致
https://www.saleor.io/docs/llms-full.txt
不在朴素探测集内
未采纳(没探这个位置)
HTTP 404(状态码正确,正文形态不参与判定);用 Accept: */* 再量一次,状态码、正文类型都一致
n
2
一致
https://docs.saleor.io/docs/llms-full.txt
不在朴素探测集内
未采纳(没探这个位置)
请求的是文本文件,实际返回 HTML(content-type: text/html,74329 字符);用 Accept: */* 再量一次,状态码、正文类型都一致
n
3
一致
死链口径对比:只看首跳状态码(>= 400 即判死)会数出 0 条;我们经去噪与正文比对后是 0 条链接实例。
覆盖披露
位置数 21 ·
抓到的页面 4 个 ·
HTTP 请求 120 / 上限 120(其中不同 URL 80 个;差额是跳转每一跳、robots.txt 与重试)
链接账本:抽取 206 = 排除 0 + 待人工 0 + 已验证 17 + 无法判断 2 + 被封顶截掉 187
本次未触发抽样。
robots.txt 的 Disallow 我们遵守了:命中的路径零请求,判「无法判断(robots_disallowed)」。「我们没被允许看」是真话。
LLM 调用 0 次(这个工具零 LLM、零 API key,所以它恒为 0)。
查了什么
AI 路径体检(llms.txt / llms-full.txt / .md 通道,每条判定跟一个对照探测) 死链(只报人和 AI 都会点、点了就 404 的,按根因归并、按位置分级)
不查什么(摘要,理由见「方法」)
内容是否过期(通用「旧年份」正则两批样本 134 命中 0 真信号 / 296 命中 2 真信号) 事实是否自相冲突 锚点(#fragment)是否腐烂 定价页 ↔ 文档的口径比对 定期扫描 / 监控 托管 web 版(会让 --contact 这条合规约束当场失效) Playwright 渲染(合规不绕 WAF,且实测只有 2/72 = 2.8% 盲区) --serve 本地服务
这些地方我们想看但没看到
位置
原因码
实际是
补救办法
① 入口发现 · https://support.saleor.io/
robots_disallowed
这个 host 解析通了、根路径也请求了,但判不了(robots_disallowed),于是它的 AI 路径(llms.txt / llms-full.txt / .md 通道)一条都没探,robots.txt 与 sitemap.xml 也没读。这不是「这个 host 没问题」,是「我们没能看」。
你的 robots.txt 禁止抓这个路径,我们遵守了。要检查请加 --ignore-robots。「我们没被允许看」是真话,「这里没问题」是假话。
https://saleor.io/blog
not_fetched
page_targets 封顶 120,截掉 30 条
用 --max-links 0 取消上限重跑可以覆盖它。
方法,与不检查什么
这个工具零 LLM、零 API key。判定全部来自 HTTP 观测 + 同域随机路径对照探测 + 正文/骨架归一化比对。下面两张表是范围本身,不是免责声明。
首页大字只用位置数,条目数单列 —— 位置数回答「链路哪几段走不通」,条目数回答「有几条要改」,两个数不能互相顶替。
「未能评估」与「没问题」在这份报告里严格分开:Status.UNKNOWN 永不折算成通过。实测依据:help.spoton.com 与 docs.lawmatics.com 的文档站是纯 JS SPA,它们的「零发现」是抓取能力问题,不是站点干净。
报告里凡提到「那类实现会读错」,措辞一律是「只探根路径、不做对照探测的实现」——我们没有拿任何一款现成产品跑过对照,所以不会替它们下结论。
做什么
项 实测理由
C3 · AI 检索链路体检 llms.txt / llms-full.txt 是真文件还是软 404、全文通道是不是索引的字节副本、索引里列的链接活着几条、「任意页面加 .md」这个约定兑现了没有。每一条都配同域随机路径对照探测。
C1 · 人和爬虫共用的可点击路径 seed 页上抽取的 <a href>,点了就 404 的那些。带 23 条去噪规则与两级根因归并。
明确不做,以及为什么(引实测,不重新论证)
项 实测理由
过期信号整类(含附录) 通用旧年份正则:batch1 扫出 134 条命中、真信号 0;CN 批扫出 296 处、真信号 2。两批独立同结论。而且还高假阴 —— snipcart 的真信号 「© All rights reserved, Snipcart inc. 2023」被自家正则的 inc. 句点截断漏掉。三条收窄规则没有命中率、没有假阳性率、没有回归用例,三样全无。
事实冲突(套餐名枚举 / 同页矛盾 / 档位↔功能映射) 8/72、6/72 这些数是人工逐域推出来的,自动化版本从来没跑过,这一整块的假阳性率是空的。且「属性对」这个单位实测伸缩 15 倍(bigcommerce 把一整张套餐枚举记成 1 对,baseten 把同型 GPU 表记成 17 对,together 14 个模型记成 37 对)。
锚点腐烂(#xxx 在目标页不存在) 本轮未做系统性检测,只偶得 1 例(gusto #minimum-api-version)。命中率未知。不做的理由是实现成本,不是命中率低。
通用定价页↔文档数值比对 15 个域完全没有可比面(必然 0);单位不可定义;20% 的冲突以 llms.txt 为一侧(已否决功能)。
定期扫描 / 健康分订阅 中位数落在 1–2 条区间,73.6% 的站报不出 3 条。注意:「两次扫描之间没有新增」是无证据的时序断言(全部数据是单一时间点横截面),准确表述是「我们没有纵向数据,无法承诺订阅价值」。
托管 web 版(输入任意域名就发请求的公开端点) 它会让 --contact 这条合规约束当场失效,且等于开放抓取代理。
浏览器渲染 / Playwright uvx 一行可跑是硬需求;Playwright 要另外 playwright install(约 300 MB)。已量化的代价:确认的 JS 盲区只有 help.spoton.com 与 docs.lawmatics.com = 2/72 = 2.8%。这两家判 UNKNOWN,绝不判「干净」。
--serve 本地表单页 HTTP server 是纯 scope creep + 安全面。非命令行用户走 GitHub Action。