搜索抓取

robots.txt 与抓取入口:写对这几行,蜘蛛才知道从哪开始找 URL

robots.txt 是蜘蛛进入站点时最先读取的文件,既决定哪些路径暂时不抓,也可能承载 Sitemap 清单入口。本文梳理蜘蛛读取它的顺序、Sitemap 声明写法、Disallow 的常见误配置,以及怎样用抓取日志确认规则是否生效,减少不必要的抓取断点。

搜索抓取

robots.txt 与抓取入口:写对这几行,蜘蛛才知道从哪开始找 URL

很多站点把 robots.txt 当成一个开关:要么全站放开,要么一刀切禁止。实际上它是蜘蛛进入站点时最先读到的说明文件,同时承担两个角色——告诉蜘蛛哪些路径暂时不用抓,以及告诉蜘蛛去哪里找 URL 清单。这两件事写得好不好,直接影响后面的 URL 发现是否顺畅。

蜘蛛读 robots.txt 的顺序

蜘蛛访问一个站点,通常会先请求根目录下的 robots.txt,再根据其中的规则决定接下来的抓取路径。这个文件的响应状态不同,蜘蛛的处理方式也不一样。

  • 返回 200:按规则执行,同时读取其中的 Sitemap 行。
  • 返回 404:多数蜘蛛视为没有限制,但也就失去了 Sitemap 这一入口信息。
  • 返回 5xx 或超时:部分蜘蛛会暂时收敛抓取,等下次再试,抓取节奏可能被打断。

所以这个文件本身要足够轻:静态输出、纯文本、不要经过登录态或复杂跳转。

把 Sitemap 写进 robots.txt

在 robots.txt 末尾单独一行写 Sitemap,是最直接的 URL 清单入口之一。它省去蜘蛛额外试探的步骤,对新站或内链较浅的栏目更有帮助。需要注意:这一行只是告知,是否抓取、抓多少仍由蜘蛛自己决定,写了不等于会被收录。

如果站点有多个 Sitemap 索引文件,可以并列写多行。用索引文件时,最好确认索引里引用的每个分片都返回 200,否则蜘蛛顺着索引走下去,只会拿到一串死链,反而浪费一次抓取机会。

Disallow 挡住的不只是“页面”

常见的误配置,是用 Disallow 屏蔽后台、搜索结果页或带参数页面,却顺手把某条内链路径也关掉了。蜘蛛无法抓取被禁止的 URL,也就无法顺着它继续发现更深层的地址。

几个容易忽略的点

  • 路径前缀匹配:写 /search 时,/search-tips 这类同前缀地址也可能被一并挡掉,写成 /search/ 更稳妥。
  • 通配符与结尾符:* 和 $ 能提高精确度,但写错也容易收紧过度或放宽过度。
  • 禁止抓取不等于不收录:被 Disallow 的地址若从别处获得外链,仍有可能出现在结果里,只是内容由外部信息推断,准确性无从保证。
如果目标是“不要被抓”,用 robots.txt;如果目标是“不要被收录”,robots.txt 往往不是合适的工具。

抓取频率与规则缓存

robots.txt 会被缓存一段时间,改动之后未必立刻生效。Crawl-delay 一类字段各家支持程度不同,不适合当作流量控制的总开关;真正的抓取节奏更多取决于站点响应速度、错误率和内容更新频率。响应快、错误少的站点,蜘蛛通常愿意多走几条链接。

一份简短的巡检清单

  1. robots.txt 是否返回 200,内容是否为纯文本。
  2. Sitemap 行是否指向可访问的索引或清单文件。
  3. Disallow 的路径前缀是否误伤了正常栏目。
  4. 被屏蔽的目录里,是否存在希望被发现的内链。
  5. 改动后是否在抓取日志里确认蜘蛛重新读取了该文件。

改动之后怎么观察

与其反复调整规则,不如看日志:蜘蛛请求 robots.txt 的时间、抓取 Sitemap 的频次、被禁止路径出现的 403 记录,都能反映配置是否落地。连续观察几天再决定下一步,通常比频繁改动更稳妥。