搜索抓取

robots.txt 放行与拦截:被 Disallow 的 URL 为何仍会被发现

robots.txt 约束的是抓取行为,并不决定 URL 是否被发现。本文梳理 Disallow 的常见误配、日志与 Search Console 的核对顺序,以及放行之后仍需补上的内链与 Sitemap 动作,帮助站点把发现与抓取两条线分开排查。

搜索抓取

robots.txt 放行与拦截:被 Disallow 的 URL 为何仍会被发现

很多人把 robots.txt 当成提交给搜索蜘蛛的白名单,认为只要地址没被挡住,蜘蛛就会来抓;反过来,一旦被 Disallow,地址就彻底消失。实际规则里,robots.txt 约束的是能不能抓取,而不是会不会被发现。把这两条线分开之后,很多奇怪现象就说得通了。

被发现和被抓取是两件事

URL 的发现来源通常有站外链接、站内链接、Sitemap、历史抓取记录等。搜索蜘蛛在爬 A 页面时看到指向 B 的链接,就会把 B 记进待抓队列,不管 B 是否被 robots.txt 禁止。禁止的结果只是:轮到抓 B 时,蜘蛛会退回去,B 的正文不会被读取。于是抓取日志里会出现一条被拦截的记录,而不是完全看不到这个地址。

这也解释了另一种情况:某一批 URL 在 Sitemap 里提交了,日志里却几乎没有抓取记录。可能不是清单格式问题,而是这些地址正好落在 Disallow 规则里,蜘蛛读取了清单但无法继续。

常见的几类误配

  • 用 Disallow 处理重复内容。屏蔽之后蜘蛛抓不到页面,也就看不到页面里的 canonical,去重反而更难完成。
  • 屏蔽 CSS、JS 等静态资源。页面能抓,但渲染后看到的结构和资源加载后的实际内容不一致。
  • Sitemap 与 robots.txt 互相打架。清单里提交的地址被规则挡住,两边都需要回头检查。
  • 旧规则长期不清理。目录调整或更换框架后,新路径被历史规则意外拦住。
  • 只在 robots.txt 层排查,忽略 CDN、WAF 和防盗链设置。有些拦截发生在更前面,日志里的状态码并不一样。

核对时建议的顺序

  1. 确认当前生效的 robots.txt 版本。搜索引擎读取的是线上文件,本地副本和 CDN 缓存都可能有差异。
  2. 用单 URL 检查工具请求几个代表性地址,看是否被拦截,而不是只看整站规则。
  3. 在服务器日志里筛出 robots.txt 的请求记录,确认蜘蛛能正常拿到文件,并且返回的是 200。
  4. 把 Sitemap 提交清单与 robots 规则做交集比对,找出被挡住的地址。
  5. 检查 CDN 回源与安全策略,确认没有额外一层在返回 403 或验证页面。

顺序上建议先确认谁发现了 URL,再确认是否允许抓取,最后看服务器是否正常响应。跳过前两步,容易把抓取问题误判成索引问题。

放行之后还要补什么

把规则放开只是恢复了抓取资格。一个地址要被稳定抓取,通常还需要至少一个可被跟踪的内链入口,或者在 Sitemap 里有明确记录;服务器也要能持续返回正常状态。对于依赖前端渲染的页面,还要确认渲染所需的资源没有被挡住。

robots.txt 决定蜘蛛能不能进门,链接和 Sitemap 决定有没有人告诉它门在哪里。两件事都做了,抓取才谈得上顺畅。

如果站点近期做过改版或目录迁移,可以顺手对照旧规则,把已经不适用的 Disallow 条目删掉。规则越少、越贴近当前目录结构,排查时越不容易出错。

维护节奏

不需要频繁修改 robots.txt,但每次结构调整、上线新频道、更换 CDN 时,都应该重新核对一次。把拦截规则、Sitemap、内链和日志放在同一套检查清单里,遇到抓取量波动时,先分清是发现环节还是抓取环节出了问题,再决定要不要动规则。