搜索抓取

robots.txt 与抓取路径:Allow、Disallow 和 Crawl-delay 分别能管住什么

robots.txt 常被当作收录开关,其实它只影响蜘蛛的请求路径。本文说明 Allow 与 Disallow 的匹配顺序、Crawl-delay 的实际效果、哪些路径适合屏蔽、哪些资源不要误挡,以及它和 Sitemap、内链在 URL 发现上的分工。

搜索抓取

robots.txt 与抓取路径:Allow、Disallow 和 Crawl-delay 分别能管住什么

robots.txt 是蜘蛛访问站点时最先请求的文件之一。很多站点把它当成收录开关,写完却发现页面照样出现在结果里,或者该被抓的内容一直不来。要把它用对,先得明确它的作用范围:它只表达“希望蜘蛛不要请求哪些路径”,不决定页面是否被收录,也不决定排名。

Allow 与 Disallow 的匹配顺序

主流蜘蛛解析 robots.txt 时,通常按“最长匹配优先”判断:如果某条 Allow 和某条 Disallow 同时命中一个 URL,谁写的路径更长、更具体,就以谁为准。所以想放开某个子目录,可以在屏蔽整段的同时,用更长的 Allow 规则把它单独拎出来。

  • 路径匹配看的是前缀,不是完整 URL,写 /search 会连 /search-page 一起命中。
  • 支持通配符 * 和结尾符 $,但各家蜘蛛的支持程度不一,别把关键逻辑压在个别语法上。
  • 规则里的路径区分大小写,要和实际 URL 保持一致,避免出现“写了却没生效”的情况。
  • 按目录写规则比按具体 URL 逐条写更稳,URL 一改,零散规则很容易失效。

Crawl-delay 的实际作用有限

Crawl-delay 是站点向蜘蛛提出的“访问间隔建议”,Googlebot 基本不使用它,其他蜘蛛的遵守程度也不一致。它既不能真正限制并发,也替代不了服务器侧的限流。如果担心抓取压力,更可靠的做法是:在服务器层面对异常高频请求返回 429503,并在响应头里给出 Retry-After,让蜘蛛自行退让。这样既能保护源站,也不会因为一条静态规则把所有蜘蛛一起挡在门外。

用 robots.txt 给抓取路径做减法

当站点 URL 数量远大于内容数量时,抓取配额会被大量低价值路径消耗。这时 robots.txt 适合用来做“减法”:

  1. 站内搜索结果页、多条件筛选的组合页,通常没有独立价值,可以整体屏蔽。
  2. 带跟踪参数的推广链接,可以按参数特征屏蔽,减少重复路径。
  3. 后台、临时目录、测试环境,尽早屏蔽,避免被误抓。
  4. 分页、标签、归档这类中间层路径是否屏蔽,要看它们的导航价值,一刀切容易把蜘蛛引进死胡同。

屏蔽要克制:一旦把内链经过的路径全部砍掉,蜘蛛可能连通往正文的入口都找不到。动手之前,先确认目标页面还有没有其他可达路径,比如 Sitemap 或别的列表页。

别把 CSS、JS 一起挡掉

用通配符屏蔽整个目录时,很容易顺手把该目录下的样式和脚本也挡了。蜘蛛拿不到这些资源,页面渲染出来的链接和内容就可能不完整,URL 发现的范围随之缩小。如果确实不需要渲染,屏蔽无妨;如果站点依赖前端渲染,建议保留必要的资源路径。

与 Sitemap、内链的分工

robots.txt 管“不去哪儿”,Sitemap 和内链管“该去哪儿”,后者才是 URL 发现的主要通道。把 robots.txt 里屏蔽掉的路径,从 Sitemap 和内链中一并移除,避免出现“一边提交、一边拒绝”的矛盾信号。

上线前的检查习惯

  • 改动后直接请求 /robots.txt,确认返回 200、内容完整,没有被 CDN 或缓存返回旧版本。
  • 翻抓取日志抽查:屏蔽路径下是否还有访问记录,如果有,多半是规则写法或缓存问题。
  • 记录每次修改的时间和内容,抓取量出现异常波动时方便回溯。
robots.txt 是一份请求,不是一道命令。它影响蜘蛛的抓取路径,但收录与否、能不能被发现,最终仍取决于内容本身、内链结构和站点的可达性。