站点运营

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

robots.txt 通常只有几行,却决定了蜘蛛能看到多大的世界。本文梳理常见的配置误伤、规则冲突时的处理方式、不同状态码对抓取的影响,以及 Sitemap 声明和上线前的检查清单,帮你把根目录这个容易被忽视的文件管起来。

站点运营

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

先弄清楚 robots.txt 的权限边界

robots.txt 是放在站点根目录下的纯文本文件,用来告诉遵守协议的爬虫「哪些目录不必来抓」。它有三个常被误解的地方:第一,它只是建议,不遵守协议的采集程序照样会来;第二,它不能用来保护隐私或封住后台,真正的权限要靠登录态和 IP 限制;第三,它是「不要抓」,不是「不要收录」——页面已经被收录时,光加一条 Disallow 并不会让它从搜索结果里消失,蜘蛛抓不到页面,反而看不到页面上写着的 noindex 指令。

想把页面从索引里拿掉,顺序应当是:先保持可抓、加上 noindex,等它从索引中消失后,再考虑是否屏蔽。

最容易踩的几类配置错误

  • 整站屏蔽:测试环境的配置被顺手带到线上,只留下一句 Disallow: /,蜘蛛会安静地停止抓取。表现通常是索引量缓慢下滑,而不是立刻报错,所以很难第一时间发现。
  • 误伤渲染资源:把 /js/、/css/、/static/ 一起屏蔽,蜘蛛能拿到 HTML 却拿不到样式和脚本,渲染结果可能是空白或错版,与用户看到的差别很大。
  • 规则过于宽泛:Disallow: /*? 会连带挡掉所有带参数的地址,包括有收录价值的分页与详情页;Disallow: /search 也可能误伤 /search-guide 这类正常栏目。
  • 大小写与路径写错:robots.txt 中的路径区分大小写,/Admin/ 与 /admin/ 不是一回事,写错等于没屏蔽,或者屏蔽了不该动的目录。
  • 通配符堆得过密:* 和 $ 能提高精度,但同一行里堆三四个之后,几个月后没人能读懂这条规则到底放行了什么。

规则冲突时谁说了算

同一目录既被 Disallow 覆盖、又有 Allow 指向其中某个子路径时,多数主流蜘蛛按「最长匹配优先」处理;路径长度相同时,Allow 通常优先。也就是说,从屏蔽目录里单独放行一个子路径在技术上可行,但不要把这种技巧当成日常手段,规则越少、越直白,将来越好维护。改完之后,用各搜索引擎提供的 robots 测试工具跑几个关键 URL,确认放行和屏蔽都符合预期,而不是凭感觉判断。

状态码直接决定蜘蛛怎么理解这个文件

  1. 返回 200 且内容正常:按文件中的规则执行。
  2. 返回 404 或其他 4xx:多数蜘蛛视为「没有任何限制」,全站可抓。测试站误删文件时就属于这种情形。
  3. 返回 5xx 或连接超时:主流蜘蛛会暂停抓取,过一段时间再试。这个窗口期偏长,期间新页面基本不会被发现。

因此它是一个值得监控的关键文件。不要让它依赖后端应用实时生成,也不要放在需要登录、会被 WAF 拦截、或者随每次发版抖动的路径后面。放在 CDN 上时,确认缓存策略不会让旧版本长期生效——这类问题在排查抓取异常时经常被漏掉。

Sitemap 声明只是提供线索

很多站点会在这里用 Sitemap 指令声明地图地址。有两个细节值得注意:一是必须写完整的绝对地址,带上协议和域名;二是分片地图要逐一列出,别只写一个索引文件,却指望蜘蛛自己把子文件都找全。声明只是给出发现路径,并不等于收录,蜘蛛仍会按自己的节奏和预算决定抓多少。

上线前后的自查清单

  • 文件能直接访问,返回 200,内容类型为纯文本。
  • 没有 Disallow: / 这类整站屏蔽残留,测试环境配置未被同步到线上。
  • 关键 CSS、JS、图片目录处于放行状态,页面渲染不受影响。
  • 规则中用到的通配符有注释说明,每次改动都有记录可查。
  • 需要从索引移除的页面走 noindex 流程,而不是先屏蔽了事。
  • Sitemap 指令为绝对地址,分片文件齐全且互相一致。
  • CDN 与缓存层不会长期返回旧版本文件。
  • 改动后一到两周复查日志,确认关键目录仍有正常抓取。

robots.txt 通常只有几行,却决定了蜘蛛眼里的站点有多大。把它当作一份需要版本管理的配置文件,每次改动前后都验证一次,比等到索引量出现异常再回头排查要省事得多。