蜘蛛池知识

蜘蛛池入口页的 robots.txt 与 meta robots:放行、屏蔽与高频误配

robots.txt 与 meta robots 是入口页能否被抓取的前置条件,却常被当成上线后再说的小事。本文梳理这两类指令在蜘蛛池场景下的作用范围、缓存延迟、与 sitemap 的配合方式,列出几类高频误配,并给出改完之后可以执行的验证思路。

蜘蛛池知识

蜘蛛池入口页的 robots.txt 与 meta robots:放行、屏蔽与高频误配

排查“蜘蛛不来”的时候,很多人第一反应是服务器、DNS 或者入口页数量不够,但真正卡住蜘蛛的往往是更靠前的一道闸门:robots.txt 和页面级的 robots 指令。这两处不解决,后面准备多少域名、多少内容都是白做工。

robots.txt 在蜘蛛池里到底管什么

入口页通常挂在独立域名或子域名下,robots.txt 放在根目录,对该域名下的所有路径生效。它决定的是“允不允许抓”,而不是“抓了之后排不排”,很多人把这两件事混为一谈,于是用屏蔽索引的指令去解决抓取问题,方向从一开始就是错的。

最常见的误配是把测试环境的 Disallow: / 直接带上线。这个写法让所有蜘蛛整站止步,而页面本身依然返回 200,日志里看不到任何报错,排查时极易被跳过。建议在上线检查清单里固定加一条:用 curl 拉一次入口域名的 robots.txt,肉眼确认内容。

缓存延迟要提前考虑

蜘蛛会缓存抓到的 robots.txt,更新周期因引擎而异,从几小时到一天以上都有可能。这意味着改完配置之后,抓取量不会立刻恢复曲线,不要因为当天没变化就再改一遍,反复改动反而让状态更难判断。

另一个反直觉的点是状态码:robots.txt 返回 404 时,多数引擎按“无限制”处理,等于全站放行;返回 5xx 或超时,则可能触发短期的抓取暂停。所以“不小心把 robots.txt 干掉”未必是坏事,但“服务器抖动导致 robots.txt 超时”确实会连带影响整站抓取。

meta robots 与 X-Robots-Tag 的分工

meta robots 写在 HTML 的 head 里,作用于单个页面;X-Robots-Tag 写在 HTTP 响应头里,同样作用于该响应,但优势是不用改模板,特别适合批量生成的入口页——在服务端配置里统一加一行即可覆盖整个目录。

两者同时存在且互相冲突时,一般按更严格的那条执行。所以不要一边在响应头写 noindex,一边在模板里写 index,最后看到的结果和预期不一致,还会浪费大量时间猜原因。

noindex 和 nofollow 是两件事

入口页如果定位是链接中转站,本身不需要进入索引,用 noindex, follow 是常见做法:页面不占索引位,但页面上的链接仍然被跟进。如果误写成 noindex, nofollow,蜘蛛可能照常抓取页面,却不继续走链接,发现通道就此断掉。

也要注意,如果一个入口页域名下几乎所有页面都是 noindex,蜘蛛的回访频率往往会在几周内慢慢走低。这时需要靠稳定的更新节奏、正常的内部链接结构去维持抓取意愿,而不是靠堆页面数量补回来。

几类高频误配

  • robots.txt 里用 User-agent: * 加 Disallow: /,把包括目标引擎在内的所有蜘蛛一起挡掉。
  • 放行了页面路径,却屏蔽了 CSS、JS 所在目录,蜘蛛拿到的页面结构不完整。
  • 只放行了无参数路径,带参数的入口页 URL 被整段屏蔽,实际可抓页面所剩无几。
  • robots.txt 里写了 Sitemap 地址,但该地址返回 404 或指向另一个域名,白白浪费一次发现机会。
  • 跳转页上同时用了 302 加 noindex,蜘蛛对“要不要跟进”的判断变模糊,抓取节奏明显放缓。
  • 模板复制时把测试域名的 noindex 一起复制过去,线上大片页面无法进入索引。

一套可参考的配置思路

入口路径放行;后台、日志、临时目录、接口路径全部屏蔽;robots.txt 中声明 sitemap 地址并确认可访问;入口页按用途决定是否 noindex,但保留 follow;全局性的指令优先用 X-Robots-Tag 在服务端统一处理,避免模板遗漏。

这套思路的核心是“先明确每个入口页的角色”,再决定给什么指令。角色没定清楚就套模板,误配几乎是必然的。

改完之后怎么验证

  1. 用搜索引擎提供的 robots 测试工具跑一遍,看具体 URL 是被允许还是被屏蔽。
  2. 用 curl -I 查看响应头,确认 X-Robots-Tag 的值与预期一致,没有多层配置互相覆盖。
  3. 在抓取日志里按状态码和路径分组,观察改动后目标路径的请求量是否回升。
  4. 观察窗口至少留够一两周,把缓存延迟和已有队列的消化时间算进去。

指令层面的问题往往花费不高却能堵住大量无效工作。与其在入口页数量上不断加码,不如先把“允许抓、允许跟”这两个前提确认清楚。