常见问题

入口页与目标 URL 的 robots.txt 规则冲突时,搜索蜘蛛按哪个执行?

入口页允许抓取,目标 URL 却被 robots.txt 禁止,搜索蜘蛛会听谁的?本文梳理 robots.txt 按目标 URL 所在域名生效的逻辑、meta robots 与 X-Robots-Tag 的差别,并给出排查顺序和日志验证方法,帮助减少无效抓取与误判。

常见问题

入口页与目标 URL 的 robots.txt 规则冲突时,搜索蜘蛛按哪个执行?

先搞清一个前提:robots.txt 按“被访问的 URL”生效

很多人把入口页和目标 URL 当成一个整体,觉得入口页的 robots.txt 写允许抓取,搜索蜘蛛就会顺着链接去抓目标 URL。实际规则不是这样:搜索蜘蛛在访问某个 URL 之前,会先读取该 URL 所在主机的 robots.txt。入口页属于 A 域名,就查 A 域名的 robots.txt;目标 URL 属于 B 域名,就查 B 域名的 robots.txt。两者互不覆盖。

所以,入口页 robots.txt 允许抓取,只能保证搜索蜘蛛可以读入口页、解析里面的链接;目标 URL 能不能被抓取,要看目标 URL 自己所在域名的 robots.txt 是否放行。

几种常见冲突场景

入口页允许,目标 URL 被 Disallow

这是最典型的情况。入口页返回 200,链接也能被解析,但搜索蜘蛛在准备抓目标 URL 时,读到目标域名 robots.txt 里的 Disallow,通常会跳过该 URL。此时日志里可能只看到入口页被访问,目标 URL 没有请求记录。

如果目标 URL 是第三方站点,而且对方明确不允许抓取,不建议用入口页去绕。搜索蜘蛛最终以目标 URL 的 robots.txt 为准,强行操作通常不会带来有效结果。

入口页被 Disallow,目标 URL 允许

反过来,如果入口页自己所在路径被 robots.txt 禁止,搜索蜘蛛可能根本不会请求入口页。入口页都读不到,里面的链接自然无法被发现。常见原因是入口页放在 /c/、/go/、/out/ 这类被整目录禁止的路径下。

  • 检查入口页 URL 是否命中 Disallow 规则;
  • 检查规则里的通配符和结尾符号,避免误伤;
  • 确认 robots.txt 本身返回 200,而不是 404 或 5xx。

两边都允许,但目标 URL 有 meta noindex

robots.txt 管的是“能不能抓”,meta robots 和 X-Robots-Tag 管的是“抓取后怎么处理”。如果目标 URL 允许抓取,但页面里有 noindex,搜索蜘蛛仍然可以抓取和解析,只是通常不会把它放进索引。这类页面在日志里能看到请求,但收录表现不同。

排查时不要只看“有没有被抓”,还要区分“被抓但没索引”和“根本没被抓”,两者原因和解决方向不同。

跨域名、子域和协议也要分开看

robots.txt 的作用范围按主机划分,以下情况都要单独处理:

  • 子域:a.example.com 和 b.example.com 各自读取自己的 robots.txt;
  • 协议:http 与 https 在部分实现中被视为不同来源,迁移后要确认新协议下的 robots.txt 可访问;
  • 端口:非标准端口访问时,robots.txt 的读取位置也可能不同;
  • 大小写与路径:Disallow 路径区分大小写,写错一个字母可能就放行了。

一个可执行的排查顺序

  1. 先列出入口页 URL 和目标 URL,分别标注它们所属的域名或子域。
  2. 访问入口页域名下的 robots.txt,确认入口页路径没有被禁止。
  3. 访问目标 URL 域名下的 robots.txt,确认目标路径没有被禁止。
  4. 检查目标 URL 的 meta robots 和响应头里的 X-Robots-Tag,确认是否 noindex、nofollow。
  5. 在服务器日志中搜索目标 URL,看搜索蜘蛛是否请求过;如果从未请求,优先怀疑 robots.txt 或链接未被发现。
  6. 如果入口页有跳转或中间层,逐层确认每一跳的 URL 是否都允许抓取。

实操建议

如果入口页和目标 URL 都是你自己能控制的站点,最好把规则统一起来:入口页允许抓取,目标 URL 也允许抓取;需要屏蔽的测试页、参数页,用明确的路径规则处理,不要图省事整站 Disallow。规则越模糊,越容易把正常入口一起挡住。

如果目标 URL 是外部站点,先看对方 robots.txt 的态度。对方不允许抓取,就不要把入口页当作绕过通道。搜索蜘蛛的行为会以目标 URL 所在主机的规则为准,入口页写得再“干净”也改变不了这一点。

最后提醒一句:robots.txt 只是抓取规则的一部分,不承诺收录,也不保证排名。它解决的是“能不能来、能不能读”的问题,内容质量和站点整体表现仍然决定后续结果。