技术 2026年10月21日

AI 抓不到、也读不懂:robots.txt、CDN/WAF 与 JS 渲染排查

AI 答案里没有你的网站,先别改内容:AI 爬虫可能没抓到,也可能抓到了却读不懂。本文沿一次抓取请求拆出六个技术断点——robots.txt 声明、CDN/WAF 执行、状态码与跳转、JS 渲染、HTML 结构、内容投递一致性,给出每个断点的失败指纹、取证方法与修复顺序。

#GEO #AI爬虫 #robots.txt #JavaScript渲染

TL;DR / 核心要点总结

  • 「AI 不引用我」要先拆成两个问题:抓不到,还是读不懂。 前者是请求没到或被拒,后者是拿到 HTML 却解析不出正文;结果一样,取证入口不同。
  • robots.txt 只是声明,不是执行。 4xx 等于不限制,5xx 等于全站禁止;声明层与 CDN/WAF 执行层必须分开记录。
  • UA 探测的结论不对称:403 是强证据,200 只是弱证据。 探测请求不是真实爬虫的 IP,最终证据在服务器日志。
  • JavaScript 是「读不懂」的头号原因。 Googlebot 会渲染但需排队,其余 AI 抓取器的公开文档没有渲染承诺。
  • 排查顺序固定:日志 → 声明 → 边缘响应 → 原始 HTML → 渲染后 DOM → 内容一致性。 六项都过仍不被引用,问题在通道之外。

一、先分清两个问题:抓不到,还是读不懂

AI 答案里没有你时,多数团队直接改内容。但先要确认:引擎有没有拿到页面。拿不到是通道问题,拿到却解析不出正文是表达问题;两者都显示为「没被提及、没被引用」,取证入口却不同。

本文只处理技术通道,它是 GEO 五层工作的第一层,整体顺序见 GEO 优化怎么做。实体、证据与段落可摘性属于另外两关(三关拆解);canonical、noindex 这类自我屏蔽见改版排查文。

先用症状定位:

你看到的现象更可能的问题第一份证据
日志里完全没有爬虫请求入口或声明层服务器日志 + 线上 robots.txt
有请求,但返回 403、429 或 5xx边缘或源站拒绝状态码与 WAF 日志
200,但原始 HTML 里没有正文渲染层查看源代码,搜一句正文
200 且正文在,但版本不对投递一致性两种 UA 的 HTML diff
200、正文在,仍不被引用不在技术通道转查采信与摘录

二、沿一次请求走:六个断点与失败指纹

一次抓取是一条从域名解析到 HTML 解析的路径,六个断点各有独立指纹。

#断点典型失败指纹取证手段
1robots.txt 声明关键检索爬虫被 Disallow;robots.txt 5xx;被 CDN 前置覆盖请求线上文件,按 token 解析
2CDN/WAF 执行robots 允许,边缘返回 403、429 或挑战页日志按 UA/IP 过滤;UA 探测交叉验证
3状态码与跳转长跳转链、302 到登录页或首页、软 404、超时看首跳与最终 URL,数跳转次数
4JavaScript 渲染原始 HTML 只有骨架,正文由脚本注入查看源代码搜正文;关 JS 取一次
5HTML 结构正文在图片、视频、折叠组件或无语义容器里去标签后统计正文量,检查文本载体
6内容投递一致性不同 UA、地区、登录态看到不同版本两种 UA 各取一次 HTML,对比正文

三、抓不到(一):robots.txt 的声明层

robots.txt 只是偏好声明,不是访问控制。RFC 9309 明确:遵守与否由爬虫决定,它不能替代安全措施。

状态码语义最容易被忽略:返回 4xx(如 404)时,爬虫可以访问任意资源;返回 5xx 或网络错误时,必须假定全站禁止。robots.txt 坏掉比没有更糟——一次源站故障就可能让全站对合规爬虫关门。

匹配规则也有反直觉处:爬虫名按产品 token 做大小写不敏感的子串匹配;路径最长匹配优先,长度相同时 Allow 优先;解析上限至少 500 KiB。User-agent: * 只在没有匹配具体爬虫的组时生效——单独为某爬虫写组,它就不再受 * 约束。

线上文件还可能和仓库里的不是同一份。部分 CDN 的托管 robots.txt 会前置拼接策略,可能自动写入对 GPTBot、ClaudeBot、Google-Extended 的 Disallow。请永远请求线上 URL。

放行按用途分级:检索型(OAI-SearchBot、Claude-SearchBot、PerplexityBot)必须放行;训练型(GPTBot、ClaudeBot、Google-Extended、Bytespider)按政策单独决定。

用户触发型(ChatGPT-User、Claude-User、Perplexity-User)由用户发起,可能不遵守 robots.txt。分工细节见ChatGPT 搜索优化。

一个高频错误:AI Overviews 与 AI Mode 由 Googlebot 控制;Google-Extended 只管其他 Google 系统里的训练与 grounding,禁掉它不会让页面退出 AI 搜索。

改完别马上复测:OpenAI 与 Perplexity 都写明生效最长约需 24 小时。


四、抓不到(二):CDN/WAF 的执行层

声明层过关,执行层仍可能挡人。典型原因:UA 黑名单、IP 或 ASN 地域规则、Bot Management 评分与挑战、速率限制 429、源站防火墙。

CDN 可能不只看 UA:它可能核对官方 IP 段、反向 DNS 或 Web Bot Auth 签名。所以探测请求的响应不代表真实爬虫的响应;反过来,真实爬虫的 IP 段也可能被地域规则误伤。

UA 探测的结论因此不对称:403、429 或挑战页是强证据;200 只能说明「至少没按 UA 拦」。站内工具的 8 个爬虫探测也标注了这一边界(免费自测)。

更可靠的证据在日志:按 UA 过滤,再用官方 IP 段核对来源。Perplexity 的 WAF 文档建议把 UA 与官方 IP 段组合成放行规则,并让放行优先于拦截;Anthropic 提醒直接封 IP 可能连带阻断爬虫读取 robots.txt。

修复顺序:按官方 IP 段与 UA 建放行规则,确认放行在拦截之前,再用日志验证。只改 UA 白名单,等于把门开给任何会写 UA 的脚本。


五、抓不到(三):状态码与跳转的投递层

请求到了源站,也可能拿不到页面:301 链过长、302 跳到登录页或首页、返回 200 的软 404、超时、200 的错误页或验证页。

对 AI 侧影响更直接:检索管线有时间预算,超时与失败页会被跳过;跳转链消耗配额,最终落点错了页面等于不存在。

取证:先看不跟随跳转的响应头,记录首跳状态与 Location;再跟随,记录跳转次数与最终 URL;最后确认响应体是正文还是错误页。核心页面跳转超过两三次就值得修。

修复只有两条:旧地址做页面级 301 直指新地址;不要用 302 把用户和爬虫丢到首页或登录页。JS 跳转与 meta refresh 能不用就不用。


六、读不懂(一):JavaScript 渲染层

这是「读不懂」里最常见的一类:返回 200,原始 HTML 里只有骨架、占位注释和脚本标签。正文由客户端渲染,抓取器拿到的是空壳。

Googlebot 是例外:官方文档说它会用无头 Chromium 执行 JavaScript,并用渲染后的 HTML 索引。但页面要排队等待渲染,可能几秒也可能更久;Google 也建议重要内容以文本形式提供。

其余 AI 抓取器的公开文档没有渲染承诺。站内工具据此统计 HTML 直出的正文量,对纯客户端渲染页面预警。

检查方法:用「查看源代码」而不是「审查元素」,搜一句正文;审查元素看到的是渲染后 DOM,会把问题藏起来。

修复按成本排序:核心正文改服务端渲染或构建时预渲染;必须客户端渲染的,至少把首屏关键内容放进初始 HTML;懒加载只用于图片;不要把正文塞进点击后才注入的组件。


七、读不懂(二):HTML 结构与内容载体

正文在 HTML 里,也不等于机器读得懂。常见问题:关键信息只在图片或视频里;对照表做成截图;正文塞进点击后才注入的折叠面板;页面没有 main、article、h1–h2 的结构线索。

Google 官方建议重要内容以文本形式提供,并让结构化数据与可见文本一致。文本是公共通道;图片依赖额外识别,不能假定检索管线会为每张图做 OCR。

标题、列表、表格、段落能降低解析成本;正文占比过低时,模板噪声会淹没内容。

检查:去掉标签统计正文量;搜一句关键结论,确认是文本不是图片;对折叠组件确认是「CSS 隐藏但仍在 HTML」还是「点击后 JS 注入」——后者等于没有。

修复:关键事实文本化;对照表用 HTML 表格;折叠面板保留 DOM 文字;正文用语义标签;图片与视频只作补充。


八、读不懂(三):同一 URL 的内容一致性

更隐蔽的一类:页面能抓、也有正文,但爬虫看到的不是你写的那一版。按 UA 返回不同模板、地区跳转、A/B 测试、Cookie 墙、登录墙、个性化,都会造成偏差。

坏处是证据失真:浏览器里内容完整,探测脚本看到另一份;按浏览器版本排查,永远复现不了爬虫的问题。两个版本不等价,还有 cloaking 风险。

检查:用爬虫 UA 与浏览器 UA 各取一次 HTML,对比正文与关键链接;有条件换地区再取;检查 Vary 与跳转逻辑;确认同意墙不替换正文。

修复:给爬虫与用户等价内容;A/B 测试用独立 URL 或稳定分流;地区跳转用页面级 301 而不是 JS;不要用 Cookie 墙把正文挡在交互之后。


九、排查顺序与证据记录

六个断点按证据强度排序,不要同时查:

  1. 先看日志:有没有请求、什么 UA 与 IP、什么状态码、响应多快。没有请求先查入口与 robots;失败则查边缘与源站。
  2. 再查线上 robots.txt:确认不是 CDN 托管版本,关键检索爬虫未被 Disallow,文件没有 5xx。
  3. 然后做 UA 探测:声明与实际响应并排看;403 认真对待,200 只当参考。
  4. 接着取原始 HTML:搜正文句子,确认是服务端直出还是 JS 注入。
  5. 再看渲染后 DOM:只在原始 HTML 通过后,用来确认结构与载体。
  6. 最后做一致性 diff:两种 UA、必要时两个地区,对比正文与链接。

每条记录六个字段:URL、UA、来源 IP、时间、状态码与最终 URL、正文是否存在。少一个,第二天就无法复核。

六项全过仍不被引用,问题就不在技术通道:去查实体、证据与段落可摘性(三关拆解),或按审计清单固化(SEO 审计如何加 GEO 检查项)。


行动清单

今天做

  • 拉一天日志,按 OAI-SearchBot、Claude-SearchBot、PerplexityBot、GPTBot 过滤,记录状态码
  • 请求线上 robots.txt,确认关键检索爬虫未被 Disallow、不是 CDN 拼接版
  • 对首页做「查看源代码搜正文」测试

本周做

  • 用爬虫 UA 探测首页与两个核心页,与日志交叉验证
  • 清理核心页 302 到首页或登录页的跳转
  • 对核心页做 UA 一致性 diff,确认版本等价

本月做

  • 把六个断点写进上线验收清单,改版与新站都跑一遍
  • 建立证据记录表:URL、UA、IP、时间、状态码、最终 URL、正文是否存在
  • 把「关键内容文本化」纳入模板,避免新页面把正文交给 JS 与图片

结语

「AI 抓不到、也读不懂」拆开之后是一组可被证明的事实:请求有没有到、声明有没有放行、边缘有没有拦、HTML 里有没有正文、机器看到的版本对不对。

排查的纪律只有三条:先日志后探测,先声明后执行,先原始 HTML 后渲染 DOM。六项都过了还不被引用,就别再改 robots.txt 了——问题在通道之外。


📩 需要帮助?GEO 咨询团队可以为你做什么

如果站点长期缺席 AI 答案,又说不清是抓不到还是读不懂:

  • 免费工具:30 秒跑一轮 8 个 AI 爬虫的 UA 探测与正文可读性检查
  • GEO 人工诊断:结合服务器日志、WAF 规则与渲染方式,逐断点定位并给出修复顺序
  • GEO 优化服务:通道修好后,继续处理实体与内容

先跑一轮免费诊断 →

了解 GEO 人工诊断 →


本文为技术方法说明类内容,不含自有实验数据。robots.txt 的匹配与状态码语义依据 IETF RFC 9309;Google 的 AI 功能与渲染口径来自 Google Search Central 官方文档;三个引擎的爬虫分工与 IP 段来自 OpenAI、Anthropic、Perplexity 官方文档;CDN 托管 robots 与验证爬虫的说明来自 Cloudflare 官方文档。AI 爬虫的命名、IP 段与产品机制变化较快,本文结论截至 2026 年 10 月。