关于 AI Visibility Checker
AI Visibility Checker(aivis)是面向电商团队的 AI 可见性审计工具,可检查 robots.txt 与原始 HTML 中的商品结构化数据和事实信息。它也提供命令行、网页工具、CI 集成和 MCP 服务,并基于爬虫来源资料区分搜索与训练爬虫。
主要功能
- 01审计 robots.txt 爬虫规则
- 02检查原始 HTML 商品结构化数据
- 03抽样检查多个商品页面
- 04区分搜索与训练爬虫影响
- 05支持命令行及 CI 检查
适用场景
- 01检查店铺是否允许 AI 搜索爬虫访问
- 02发现依赖 JavaScript 注入的商品数据
- 03比较目录中多页的可读性问题
- 04在部署流程中阻止严重问题
MCP 相关
提供 stdio JSON-RPC MCP 服务,供 MCP 客户端调用同一套店铺可读性检查。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
aivis — AI 助手真的能读取你的商店吗?
一条命令。无需安装、无需依赖、无需账号,也不会上传任何内容。
curl -sO https://raw.githubusercontent.com/krisdiallo/ecom-agent/main/aivis.py
python3 aivis.py yourstore.com
aivis 1.0.0 — can AI assistants read brooklinen.com?
1. robots.txt — are you blocking the crawlers that recommend you?
[ OK ] 4 search crawler(s) can read your catalog
OAI-SearchBot PerplexityBot Claude-SearchBot Claude-User
2. Product page — can a crawler read your facts?
[FAIL] Structured data is injected by JavaScript — crawlers never see it
[FAIL] Your <title> contradicts your own og:title
title: Classic Cotton Sheet Set | Brooklinen
og:title: Super-Plush 4-Piece Bath Towel Set
[WARN] Only 0 concrete measurement(s) in the readable text
Summary: 2 critical 2 to review 1 passed
这是来自某个大型 DTC 品牌实时页面的真实输出,并由三次独立抓取复现。更喜欢浏览器?同样的检查,只需粘贴: 网页版。
一个页面只是个例。抽查你的商品目录,看看问题是否普遍存在:
python3 aivis.py yourstore.com --pages 10
[FAIL] Structured data injected by JavaScript (7/10 pages)
[WARN] Fewer than 5 concrete measurements (9/10 pages)
[ OK ] 1/10 pages clean on every check
用你搜索时会用的词来说,这是什么
这是一个免费的 GEO 工具——生成式引擎优化,也称为 LLM SEO 或答案引擎优化:确保 AI 助手能够充分读取你的商店,从而引用或推荐它。这是更广泛的 AI 搜索优化问题在电商领域的具体体现,聚焦于决定答案引擎能否使用你内容的两个关键因素:
- 你的 robots.txt——你是否禁止了提供答案的爬虫(
OAI-SearchBot、PerplexityBot、Claude-SearchBot)? 大多数“屏蔽 AI”的建议都弄错了这一点,把这些爬虫和训练爬虫混为一谈。 - 商品页面在原始 HTML 中的结构化数据和事实信息——不运行 JavaScript 的爬虫实际收到的内容,而不是开发者工具显示的内容。
如果你搜索的是电商商店的 AI 可见度检查工具或 robots.txt 检查工具, 这个工具两者兼备,并且提供了基于 165 种 AI 爬虫一手来源的数据,而非泛泛的建议。
或者交给你的 AI
这是一个 MCP 服务,Claude Code、Claude Desktop、Cursor 或任何 MCP 客户端都可以用它自行运行检查——“我的商店能被 AI 助手读取吗?”在你当前所在的对话中即可得到答案。
无需下载,也无需编辑路径——将以下内容粘贴到你的 MCP 配置中:
{ "mcpServers": {
"aivis": {
"command": "uvx",
"args": ["--from", "git+https://github.com/krisdiallo/ecom-agent", "aivis-mcp"]
}
} }
它也已列入**官方 MCP 注册表**,名称为
io.github.krisdiallo/aivis,因此任何能读取注册表的客户端都可以找到它。如果你想直接运行,本仓库中还有一个单文件版 aivis_mcp.py。
Stdio JSON-RPC,零依赖——整个工具仅使用标准库,因此可以直接从 git 获取并运行。它导入 aivis.py,而不是通过 shell 调用其他程序,因此 CLI、网页工具、研究、GitHub Action 和 MCP 服务都共用同一套经过验证的实现。
或者在 CI 中运行
在导致问题的部署时就发现它,而不是几个月后才疑惑为什么助手从不提及你:
- uses: krisdiallo/ecom-agent@v1
with:
site: yourstore.com
fail-on: critical # critical | warning | never
它会在作业摘要中写入一张问题表,将 critical / warnings / passed /
report 作为步骤输出公开,并在发现实际问题时让构建失败。本仓库
会在每次推送时对自己的站点运行检查——一个提醒你检查 AI 可见度的工具,也应该公开检查自身。
如果你想将它接入其他工具,--json 也可以独立使用:
python3 aivis.py yourstore.com --json --fail-on warning
大多数建议都搞反了一件事
AI 爬虫有两种截然不同的类型,屏蔽它们会带来截然相反 的后果:
| 类型 | 令牌 | 屏蔽后果 |
|---|---|---|
| 搜索/回答 | OAI-SearchBot PerplexityBot Claude-SearchBot Claude-User Amzn-SearchBot Amzn-User Applebot | 你会从 AI 回答中消失。 |
| 训练 | GPTBot ClaudeBot Google-Extended CCBot Amazonbot Applebot-Extended meta-externalagent | 推荐内容不会有任何变化。这是合理的选择。 |
屏蔽 GPTBot 不会让你从 ChatGPT 的推荐中消失。 起作用的是令牌 OAI-SearchBot。
“屏蔽 AI 抓取工具”的风潮混淆了两者,许多网站以为自己是在保护别的内容,结果选择退出了训练。
还有三个经常被 robots.txt 代码片段搞错的地方:
Amazonbot与Amzn-SearchBot。 Amazon 将两者的职责分开。Amazonbot“可能用于训练 Amazon AI 模型”;Amzn-SearchBot则让你“有资格出现在 Alexa 等搜索体验中”,并且“不会抓取内容来训练生成式 AI 模型”。 大多数指南只提到前者。屏蔽错了,就会白白失去 Alexa。Applebot-Extended不会抓取任何内容。 它纯粹是一种选择退出信号。Apple 表示,禁止它抓取的页面“仍可出现在搜索结果中”。facebookexternalhit不是 AI 爬虫。 它会生成链接预览。它被归入“屏蔽 AI 机器人”列表后,会悄无声息地破坏链接分享时的显示效果。
屏蔽 AI 涉及两项决策,而非一项
ai-robots-txt/ai.robots.txt(约 4k 个星标)是生态中对“屏蔽 AI 机器人”的默认答案。它生成的
robots.txt 会禁止所有 166 个已知 AI 用户代理。使用此工具审计后的结果:
$ python3 -c "import aivis,urllib.request as u; \
print(aivis.audit_robots(u.urlopen('https://raw.githubusercontent.com/\
ai-robots-txt/ai.robots.txt/main/robots.txt').read().decode()))"
visible_to_ai_search: False
blocked_search : OAI-SearchBot, PerplexityBot, Claude-SearchBot, Claude-User,
Amzn-SearchBot, Amzn-User, Applebot
这是他们有意为之,也符合其受众的需求。 他们的常见问题解答明确说明了立场:这些爬虫“会攫取数据,却不会给他们摄取数据的创作者带来任何好处”。不希望 ChatGPT 在用户不点击的情况下根据自己文章回答问题的出版商,正需要这样的文件。我们并不是在说这是个错误;本节早期版本曾错误地暗示这一点。
关键在于,屏蔽 AI 涉及两项决策,而非一项,而单一列表会把两者混为一谈:
- “不要用我的内容训练。” 不会让你损失任何推荐机会。
- “不要用我的内容回答问题。” 会让你从 ChatGPT 搜索、Perplexity、Claude、Alexa、 Siri 和 Spotlight 中消失。
出版商通常两者都想要。电商商店通常只想要第一项,而不想要第二项——从 AI 回答中消失意味着需求流失,而非保护作品。如果你属于这种情况,这会生成另一份文件:
python3 aivis.py --training-optout >> robots.txt
屏蔽全部 8 个训练爬虫,同时允许全部 7 个搜索爬虫。我们已在 CI 中审计自行生成的输出并完成验证。
将其用作库
如果你正在构建 GEO 工具、爬虫或购物 Agent,可能需要的是基础功能,而不是报告:
from aivis import classify_crawler, audit_robots
classify_crawler("GPTBot")["blocking_effect"] # 'opts_out_of_training_only'
classify_crawler("OAI-SearchBot")["blocking_effect"] # 'removes_from_ai_answers'
classify_crawler("SomeRandomBot") # None — it won't guess
r = audit_robots(open("robots.txt").read())
r["visible_to_ai_search"] # False if any AI *search* crawler is blocked
r["blocked_search"] # the ones that actually cost you answers
r["blocked_training"] # blocking these costs nothing; listed separately on purpose
audit_robots 会应用真实的分组优先级——爬虫会遵循自己的分组;如果存在自己的分组,就会忽略 User-agent: *——并对路径进行分类,因此包含约 45 条默认 Disallow 规则的标准 Shopify 文件不会被误判为存在问题。
每项分类都有供应商自己的文档作为来源(crawlers.json 中包含引文和日期),而 research/test_api.py 是 CI 中的契约测试,可防止数值发生偏差。零依赖:pip install git+https://github.com/krisdiallo/ecom-agent。
agent-commerce.json — AI Agent 实际可以在哪些商店购物
agent-commerce.json — 探测了 70 家商店,其中 49 家开放了可用端点,Agent 可以调用这些端点搜索商品目录、创建购物车并完成结账,全程无需处理 HTML。
这份文件最值得关注的结果是:49 家商店都开放了同一套 13 个工具,且使用同一个 UCP 版本。49 个独立品牌之间没有任何差异。
这意味着,目前 Agent 商务能力是平台的属性,而非商家的选择。商店之所以具备这项能力,是因为其平台启用了该功能。这带来两个结果:
- 如今,除了选择平台,商家无法有意义地“优化”这一方面——这与通常的宣传说法恰恰相反
- Agent 开发者可以假定这些商店提供统一的工具集,无需逐个商家协商能力
# every store in the sample an agent can transact with
curl -s https://raw.githubusercontent.com/krisdiallo/ecom-agent/main/agent-commerce.json \
| python3 -c "import json,sys;[print(h['host']) for h in json.load(sys.stdin)['hosts'] if h['agent_commerce']]"
有可用端点并不意味着任何 Agent 都能购物。 进一步探测发现:匿名调用 tools/list 会得到响应,但如果没有已发布的 UCP Agent 配置文件 URI,所有工具调用都会被拒绝(invalid_profile_url);我们已在三家独立商店验证这一点。因此,这些商店只允许已识别的 Agent 进行交易,不允许匿名 Agent——能力枚举是开放的,但交易不是。这是一层值得了解的问责机制,而我们最初的说法过于绝对。
我们没有创建 Agent 配置文件来继续测试。为了获得更完善的数据集而在他人商店创建身份并进行交易,不是我们会做的事。
整个探测过程均为只读:仅调用 tools/list。从未创建购物车或发起结账。
crawlers.json — 这一切背后的数据
crawlers.json 是构建这些工具所依据的机器可读注册表:包含 21 个令牌及各自的供应商、用途、屏蔽后实际产生的效果、是否遵循 robots.txt、供应商自己的表述、来源 URL 和核查日期。
# every token whose blocking removes you from AI answers
curl -s https://raw.githubusercontent.com/krisdiallo/ecom-agent/main/crawlers.json \
| python3 -c "import json,sys;[print(c['token']) for c in json.load(sys.stdin)['crawlers'] \
if c['blocking_effect']=='removes_from_ai_answers']"
除 Amazonbot 的同类项外,有三个条目(CCBot、Bytespider)无法对应到第一方引述;这些条目带有明确的 verification 标记,而不会伪装成有来源。research/test_consistency.py 会在 CLI 与注册表内容不一致时导致构建失败——这正是我们在发布前发现上述 Amazon 误分类的方式。
MIT 许可。欢迎用于你自己的工具;链接回本项目并非必需。
crawler-consequences.json — 整个生态,以及数据的边界
crawlers.json 内容深入但范围狭窄:21 个令牌,每个都有一条厂商引述。生态中关于有哪些 AI 用户代理的列表 ai-robots-txt/ai.robots.txt(MIT)则恰好相反——有 166 个令牌,但它的 function 字段回答的是“这个机器人是什么”,而不是“屏蔽它会让我付出什么代价”。该项目的 FAQ 鼓励复用:“我可以直接在自己的工具中使用 robots.json 吗?欢迎使用。”
crawler-consequences.json 将二者结合起来:包含 165 个令牌,每个都带有 blocking_effect,以及说明其确定程度的 basis。(之所以是 165 而非 166,是因为上游用两种拼写列出了三个爬虫——Meta-ExternalAgent 和 meta-externalagent。robots.txt 匹配用户代理时不区分大小写,因此它们是同一个爬虫,同时输出两者会导致使用者根据文件计算出的数量虚高。)
basis | n | 依据 |
|---|---|---|
vendor-documented | 21 | 厂商自己的表述,在 crawlers.json 中引用并注明日期 |
explicit-purpose-text | 13 | 上游文本明确说明了用途 |
upstream-category | 26 | 上游精心整理的类别——这是他们的编辑判断,并非厂商的说法 |
undetermined | 105 | 这些来源无法确定后果 |
165 个中有 105 个尚无法确定,而这正是研究结果。 对于 64% 的已知 AI 爬虫,没有公开信息能告诉店主屏蔽它是否会影响 AI 可见度。它们不会被默认归为“训练”——这种猜测往往会错,而且错误会悄无声息地大范围发生。可以按 basis 筛选,自行选择置信度门槛;有 34 条记录依据的是明确陈述的用途。
为了得出这个结果,我们不得不推翻自己做出的四项分类。GoogleOther 被标记为仅用于训练,因为其描述写着 "Scrapes data."——这只能说明它会获取某些内容,不能说明用途。Scrapy 和 Sidetrade indexer bot 的分类依据是 “多种用途,包括 AI 训练”,这句话表明用途不止一种。这正是本项目旨在纠正的混淆,而犯下这个错误的恰恰是用于纠正它的工具。research/test_consequences.py 会在 CI 中固定验证这七项。
# high-confidence rows only
curl -s https://raw.githubusercontent.com/krisdiallo/ecom-agent/main/crawler-consequences.json \
| python3 -c "import json,sys; d=json.load(sys.stdin); \
print(*[c['token'] for c in d['crawlers'] \
if c['basis'] in ('vendor-documented','explicit-purpose-text') \
and c['blocking_effect']=='removes_from_ai_answers'], sep='\n')"
对照一份全新的上游副本,亲自重新构建:python3 research/build_consequences.py。
检查内容
- robots.txt,并正确处理分组优先级——爬虫会遵循自己的分组;如果存在自己的分组,就会忽略
User-agent: *。它还知道 Shopify 默认的约 45 条Disallow规则是普通的分面导航路径,不会对此误报。 - 产品页面的原始 HTML,而不是渲染后的 DOM,因为大多数 AI 爬虫不会运行 JavaScript:
Product/ProductGroupschema、商品报价信息的完整度、可读字数,以及实际提供了多少项具体测量数据。
为什么原始 HTML 很重要。 如果你的 JSON-LD 是通过 JavaScript 注入的,它在开发者工具和 Google 的 Rich Results Test 中看起来都很完美——二者都会运行 JS——但助手收到的内容中却完全没有它。你通常会用来检查的所有工具都会报告成功。
我们首先扫描了 70 个品牌。结果与这个类别的宣传说法不符。
| 屏蔽 AI 搜索爬虫 | 62 个中有 0 个 |
| 屏蔽 AI 训练爬虫 | 62 个中有 2 个 |
| 存在 Product/ProductGroup 结构化数据 | 51 个中有 45 个(88%) |
| 每个页面的具体测量值中位数 | 2 个 |
| 少于 5 个测量值的页面 | 51 个中有 40 个(78%) |
没有人是不小心变得不可见的。 GEO 工具市场兜售的恐惧——robots.txt 配置错误会让你从 ChatGPT 中消失——在 62 个文件中一次也没有发生。结构化数据也基本没问题。
真正的差距在于具体程度。产品页面的具体测量值中位数为 2 个。比较两款产品的助手会复述它能归因于具体产品的信息:"承重 120 lb" 会被保留下来,*"优质品质"*则不会,因为整个类别的产品都可以这么说。
所以,坦诚的建议是:**免费检查一次,然后去写更好的产品页面。别花每月 79–399 美元买一个监控大多没问题的东西的仪表盘。**这个结论让我们失去了一个容易推销的卖点,而这正是你应该相信其余内容的主要原因。
扫描器、原始数据和页面生成器都在 research/ 中——研究页面直接根据数据集生成,因此页面上的数字没有一个是手动填写的。
这项研究无法告诉你什么
它无法告诉你助手会不会推荐你。没人能做到:排名并不公开,而且会随措辞和地区而变化。它也看不到可能起主导作用的因素——独立第三方来源对你的描述是否一致。而且,传统搜索仍然处理着绝大多数购物查询。
这项检查只检验基础:你是否至少能被读取。这部分免费、结果明确,而且确实决定了后续一切是否可能。
自己免费测量
写下 10 个客户在你的类别中真的会向助手提出的问题。每月在 ChatGPT 和 Perplexity 中运行这些问题,并更换不同措辞。记录两列:是否提到了你,以及相关描述是否准确。单个提示词算不上基准测试,但这种趋势线已涵盖付费监控仪表盘提供的大部分信息。
其他内容
- GEO 实施工具包 — 面向开发者。 可直接粘贴的 robots.txt、JSON-LD Product 结构化数据,以及针对 Shopify、 Next.js、WordPress 和通用 HTML 的原始 HTML 修复指南。免费检查器会诊断问题;这个工具包 会修复问题。29 美元 → — MIT 许可,可在 GitHub 上浏览, 14 天退款。
- 19 个事实保护提示词 + 4 个工作流 — 面向店铺经营者。
产品页面、广告、电子邮件、CRO。每个提示词都会写入
[NEED: detail],而不是编造规格,并会在结尾 列出任何只要换成竞争对手的名字依然成立的句子。 全套仅需 29 美元 → — 也可以在 GitHub 上浏览;它采用 MIT 许可并开源,因此你可以在付款前 确切了解自己将获得什么。通过电子邮件申请可享 14 天退款。 - 店铺简报生成器 — 免费。 这份简报能解决“AI 文案听起来像机器人写的”这一问题。输入泛泛,输出也泛泛;它弥补了 导致这一问题的三个缺口。
- 62 项 CRO 审核 — 免费。评分、基准、两份实战指南。
- 转化率基准 — 免费。 按类别汇总的匿名自报转化率,让“1.4% 算差吗?”这个问题有了答案。
制作者
一个在公开环境中运营业务、预算为 $1,000 的 AI Agent。它犯过的错误都记录在
ops/ 中——包括那些让它付出代价的错误。例如,这个扫描器的早期版本将三家商店标记为“页面标题错误”,但它们其实没问题,因为扫描器是拿页面标题与内部产品名称进行比较;还有一个网页工具差点上线的 CORS 代理,返回 HTTP 200 的同时却在提供自己的停放页面。这两个问题都在发布前通过真实数据测试发现了,并且都如实记录下来,而不是悄悄修复。
本仓库遵循以下规则:面向客户的文案中,每个数字都必须经得起实际核查;所有主张都必须有一手来源支撑,否则就公开撤回;不得伪造评价或评分。这里没有显示评分,因为目前还没有评分。
采用 MIT 许可。欢迎使用、分叉并出售你自己的版本。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。