站点运营

站点运营:robots.txt 自查,别让规则把该抓的页面挡在门外

robots.txt 写错一行,就可能把整站挡在门外,也可能让一批本该被抓的页面悄悄消失。本文给出一份可执行的自查思路:确认文件可访问、理清 Allow 与 Disallow 的顺序、避开通配符误伤,并检查它与站点地图、canonical 是否互相冲突。

站点运营

站点运营:robots.txt 自查,别让规则把该抓的页面挡在门外

robots.txt 是站点给爬虫的第一份说明书,写错一行,可能让一批页面从抓取队列里消失。它本身并不复杂,但正因为简单,很多站点上线之后几年都没再打开看过。这篇文章整理的是一份自查思路,重点在确认现状、排除误伤,而不是追求什么高级技巧。

先确认文件能被正常读到

robots.txt 只能放在主域名的根目录,路径固定为 /robots.txt。放在子域名或二级目录下的同名文件是不生效的。自查时先用浏览器直接访问,确认返回状态码与内容类型。

  • 返回 404,等于没有任何规则,爬虫默认可抓全站。这不算错,但你也失去了统一管理抓取的地方。
  • 返回 5xx,多数爬虫会按“暂时拿不到”处理,可能在一段时间内变得保守;反复出现还可能被当成服务器不稳定。
  • 返回 200,但内容是 HTML(被错误页或前端路由接管),规则实际上等于没写。

规则顺序与通配符

Allow 和 Disallow 谁优先

当 Allow 与 Disallow 匹配的前缀长度相同时,实现上通常 Allow 优先,但更稳妥的做法是不让规则互相打架。把最具体的路径写在前面,通用屏蔽写在后面,读起来一目了然,日后维护也不容易改错。

通配符不是谁都认

* 和 $ 属于扩展语法,主流搜索引擎支持,但一些小众爬虫可能只按字面理解。如果你的规则依赖这些符号做精确匹配,建议同时保留一条更保守的写法,避免出现“你以为屏蔽了、其实没屏蔽”的情况。反过来,如果只是想屏蔽某个确定路径,就不必引入通配符,简单写法更难出问题。

三个容易误伤的写法

  1. Disallow: / 之后忘了补 Allow,整站被挡。上线前务必用搜索平台的抓取测试工具跑一遍。
  2. 屏蔽带参数的路径时写得太宽,例如 Disallow: /*? 会把正常的分页、排序一并挡掉,列表页里的深层内容就更难被发现。
  3. 屏蔽目录却没写结尾斜杠,写成 /tag 会连 /tags、/tag-cloud 这类同前缀路径一起命中,写成 /tag/ 才更接近本意。

和站点地图、canonical 对齐

robots.txt 里通常会写一行 Sitemap,指向站点地图地址。自查时要确认这个地址可访问、内容较新,并且地图里列出的页面没有被 robots.txt 自己挡掉——这种自相矛盾的情况并不少见。同时留意那些 canonical 指向别处的页面:如果它们被大量抓取,可以在梳理清楚后考虑是否值得屏蔽,把抓取引向真正的首选地址。

一份可执行的自查清单

  1. 浏览器直连 /robots.txt,确认状态码与返回内容。
  2. 在搜索平台后台用抓取测试验证几个关键地址:首页、栏目页、详情页,以及一个被屏蔽的测试地址。
  3. 把规则逐行读一遍,给每条规则标注它想解决的问题,找不到理由的规则考虑删掉。
  4. 确认 Sitemap 地址可用,且与 robots 规则不冲突。
  5. 记录修改时间与修改人,改动后观察一到两周日志里的抓取变化。
  6. 如果站点走了 CDN,确认 robots.txt 没被缓存成旧版本,必要时为它单独设置较短的缓存时间。
robots.txt 的作用是告诉爬虫哪些不必来,而不是让页面被收录。它能把抓取引向有价值的地址,也能在一夜之间把整站挡在门外,所以每次改动都值得留个记录、留个回滚方案。