Communitygithub.com

网站 AI 可访问性检查

检查网站是否能被 AI 搜索(ChatGPT、Claude、Perplexity、Google AI Overviews)和常规搜索引擎抓取、读取和引用。审核每个主要 AI 爬虫的 robots.txt 规则、防火墙拦截、仅通过 JavaScript 显示的内容、结构化数据、重定向、站点地图和 llms.txt,并按优先级报告修复方案。

网站 AI 可访问性检查 是什么?

该技能用于诊断网站对 AI 搜索和爬虫的可见性与可读性。它会模拟 ChatGPT、Claude、Perplexity 和 Google AI Overviews 等 AI 引擎的访问方式,逐一扫描网站的技术障碍。核心检查项包括:评估 robots.txt 中针对所有主流 AI 爬虫(如 OAI-SearchBot、Claude-SearchBot、PerplexityBot 等)的权限设置;检测服务器或 CDN(如 Cloudflare)是否对 AI 爬虫返回 403/503 等防火墙拦截图;验证关键页面内容是否无需 JavaScript 即可加载;解析结构化数据(JSON-LD)的完整性和有效性;分析 HTTP 重定向链是否优化;检查站点地图的有效性和 llms.txt 文件的合规性。最终输出一个优先级排序的报告,明确指出哪些问题会完全阻止 AI 搜索(如屏蔽搜索爬虫),哪些会降低内容理解度(如缺少结构化数据),以及哪些是建议性的优化项(如添加 llms.txt)。该技能支持所有主流 AI 平台,适用于 AEO(AI 引擎优化)和 GEO(生成式搜索引擎优化)场景,能够帮助开发者快速定位并解决“为什么我的网站在 AI 答案中不显示”的问题。

兼容平台✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/superbrickstudio/skills/tree/HEAD/skills/website-ai-readiness

在你喜欢的 AI 中提问

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

文档

网站 AI 可访问性检查 是做什么的?

按照 AI 搜索引擎和爬虫的视角检查网站,然后用通俗的语言说明需要修复什么,并按重要性排序。

你需要能够获取 URL(在 shell 中使用 curl,或者使用网络抓取工具)。保持礼貌:每个网站只发送少量请求,绝不进行爬虫式抓取。

需要提供什么

只需要网站地址。如果用户指定了特定页面(如定价页、博客文章),也要检查这些页面以及首页。如果是网站迁移,请索要旧 URL 列表。

检查步骤

按顺序执行这些检查。将发现的结果记录下来,用于最后的报告。

1. robots.txt:哪些爬虫被允许

获取 https://<domain>/robots.txt。

  • 无文件(404): 爬虫视为所有内容都允许。没问题,但建议添加一个包含 Sitemap: 行的文件。
  • 返回的是 HTML 页面而非文本文件: 网站没有真正的 robots.txt。与缺失相同。

按照 Google 和 AI 公司文档说明的方式读取它:

  • 规则以组为单位:一个或多个 User-agent: 行,后跟 Allow: 和 Disallow: 行。
  • 爬虫遵循指定它的组。如果没有指定,则遵循 User-agent: * 组。如果两者都没有,则所有内容都允许。
  • 在组内,最长匹配路径优先。如果 Allow 和 Disallow 长度相同,Allow 优先。
  • 空的 Disallow: 不阻止任何内容。Disallow: / 阻止整个网站。

对以下每个爬虫给出判定:允许、部分阻止(普通内容页面如 /about 或 /blog 被阻止,而不仅仅是 /admin 或 /cart)或 阻止(首页被阻止)。

Token公司阻止它的后果
OAI-SearchBotOpenAI使网站无法出现在 ChatGPT 搜索结果中
ChatGPT-UserOpenAI阻止 ChatGPT 在用户提问时打开页面
Claude-SearchBotAnthropic使网站无法出现在 Claude 的搜索中
Claude-UserAnthropic阻止 Claude 在用户提问时打开页面
PerplexityBotPerplexity使网站无法出现在 Perplexity 的答案中
Perplexity-UserPerplexity阻止 Perplexity 在用户提问时打开页面
DuckAssistBotDuckDuckGo使网站无法出现在 DuckDuckGo 的 AI 答案中
GPTBotOpenAI选择退出 OpenAI 模型训练(非搜索)
ClaudeBotAnthropic选择退出 Claude 训练(非搜索)
Google-ExtendedGoogle选择退出 Gemini 训练;不影响 Google 搜索或 AI Overviews
Applebot-ExtendedApple选择退出 Apple 的 AI 训练
meta-externalagentMeta选择退出 Meta 的 AI 训练
CCBotCommon Crawl选择退出许多模型训练所用的开放数据集
BytespiderByteDance选择退出字节跳动的 AI 训练
GooglebotGoogleGoogle 搜索和 AI Overviews
BingbotMicrosoftBing 和 Copilot,以及部分 ChatGPT 搜索
ApplebotAppleSiri 和 Spotlight 建议

最重要的区别是:搜索爬虫(前七个,加上 Googlebot 和 Bingbot)决定网站是否出现在 AI 答案中。训练爬虫只决定其内容是否用于训练未来模型。阻止训练而允许搜索是常见且合理的选择。阻止搜索爬虫通常是错误的,通常是从模板或安全插件继承而来的。

还需标记:

  • 没有 Sitemap: 行。
  • 非有效 robots.txt 指令的行(例如拼写错误 Dissallow)。

2. 防火墙和机器人阻止

robots.txt 可以允许某个爬虫,但服务器或 CDN 仍然拒绝它(Cloudflare 的 AI 机器人阻止是常见情况)。

获取首页两次:

# 作为浏览器
curl -s -o /dev/null -w "%{http_code}\n" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0 Safari/537.36" https://example.com/

# 作为 AI 搜索爬虫
curl -s -o /dev/null -w "%{http_code}\n" -A "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; OAI-SearchBot/1.3; +https://openai.com/searchbot" https://example.com/

将 OpenAI token 替换为 Claude-SearchBot/1.0; +https://www.anthropic.com 和 PerplexityBot/1.0; +https://perplexity.ai/perplexitybot,重复第二次请求。

如果浏览器请求成功,但爬虫收到 401、403、429 或 503,或者挑战页面("Just a moment..."、"Attention required"、cf-chl),则防火墙正在阻止该爬虫。如果浏览器请求也被拒绝,则说明无法测试,不要猜测。

真正的爬虫来自已发布的 IP 范围,因此服务器可能对你的请求处理方式与真实情况不同。将阻止标记为“可能”,并建议检查防火墙或 CDN 设置。

3. 内容是否无需 JavaScript 即可读取?

大多数 AI 爬虫读取提供的 HTML 而不会运行 JavaScript。获取首页和一两个关键页面,检查原始 HTML(非渲染后的浏览器视图)是否包含:

  • 一个 <title> 和一个 meta description。
  • 一个说明页面内容的 <h1>。
  • 主要正文文本:标题、关键段落、价格或产品详情。

如果 HTML 大部分是空的 <div id="root"> 或 <div id="app"> 加脚本,则内容仅在 JavaScript 运行后才出现。AI 爬虫此时几乎看不到任何内容。建议使用服务器端渲染或预渲染。

还需检查页面是否意外携带了 <meta name="robots" content="noindex"> 或 X-Robots-Tag: noindex 头部。

4. 结构化数据

从原始 HTML 中提取每个 <script type="application/ld+json"> 块。对于每个项目,记录其 @type 以及缺少的预期属性:

类型预期属性
Organizationname, url, logo, sameAs
LocalBusinessname, address, telephone, url, openingHoursSpecification, geo
ProfessionalServicename, address, telephone, url
WebSitename, url
WebPagename, url
FAQPagemainEntity
Article, BlogPosting, NewsArticleheadline, author, datePublished, image
Productname, image, offers, aggregateRating
Servicename, provider, areaServed, description
BreadcrumbListitemListElement
Personname, jobTitle, url, sameAs
Eventname, startDate, location

标记:

  • 无法解析的 JSON-LD(语法错误意味着全部无效)。
  • 首页上没有 Organization(或 LocalBusiness)。 这是声明企业身份的最清晰方式。
  • 仅通过 JavaScript 添加的 Schema。 如果渲染后的视图显示了原始 HTML 中没有的 schema,大多数 AI 爬虫看不到它。

5. 重定向

检查首页的变体,以及用户提供的任何旧 URL:

curl -sIL -o /dev/null -w "%{num_redirects} redirects -> %{http_code} %{url_effective}\n" http://example.com/

检查 http://、https://、带和不带 www。要查看每一步跳转,手动运行 curl -sI 并跟踪每个 Location 头部。

判定:

  • 正常: 无重定向,或者一次永久重定向(301 或 308)到最终页面。
  • 链式: 连续超过一次重定向。将第一个地址直接指向最后一个。
  • 临时: 对于已永久移动的页面使用 302 或 307。应使用 301 或 308。
  • 循环: 重定向循环,页面永远无法加载。
  • 过多: 超过 10 次跳转。Google 会在 10 次后停止跟踪。
  • 损坏: 最终以 4xx 或 5xx 结束。
  • 重定向到首页: 旧页面被重定向到首页而不是其最匹配的页面。
  • Meta 刷新: 在页面内而非服务器完成的重定向。

6. 站点地图

从 robots.txt 中查找站点地图,或尝试 /sitemap.xml 和 /sitemap_index.xml。检查:

  • 它能加载,并且是 XML 格式。
  • 它列出了网站的真实页面,使用最终 URL(无重定向,无 404)。
  • 它有 <lastmod> 日期,并且日期看起来真实而非全是同一天。

7. llms.txt

获取 https://<domain>/llms.txt。

  • 如果存在, 检查它是否符合 llmstxt.org 的格式:一个 # H1 包含网站名称,一个 > 单行摘要,然后 ## 部分包含 - [标题](URL): 注释 的链接。检查链接是否有效。
  • 如果不存在, 主动起草一个。只包含你在站点地图或网站上找到的 URL。绝不要猜测 URL。将关键页面(服务或产品、定价、关于、联系、最佳指南)分组放在清晰的标题下,其余放在 ## Optional 下。

诚实说明其作用:llms.txt 是一个提议的标准。它为 AI 工具提供干净的网站导航,但没有任何主要 AI 搜索引擎表示会使用该文件进行排名。

报告

以一行结论开头:AI 搜索是否能找到并读取此网站?是、大部分是、还是否?

然后按以下顺序将发现结果列为表格或列表:

  1. 完全阻止 AI 搜索: robots.txt 或防火墙阻止了搜索爬虫,意外的 noindex,内容仅通过 JavaScript 出现。
  2. 影响网站理解: 缺少或损坏的结构化数据,缺少标题或描述,损坏的重定向。
  3. 良好的维护习惯: 没有站点地图行,过时的 lastmod 日期,没有 llms.txt,需要审查训练爬虫的选择。

对于每个发现,提供:

  • 你发现的内容,引用实际的行或状态码。
  • 为什么重要,用一句通俗的话说明。
  • 修复方法:要更改的确切 robots.txt 行、头部或设置。

不要填充报告。如果检查通过,一行说明即可。永远不要报告未观察到的问题。

免费工具和进一步阅读

如果用户想要可视化报告或第二意见,Superbrick 的免费检查工具在浏览器中运行相同的检查:

指南:

相关技能