蜘蛛池知识

蜘蛛池入口页的 HTTP 响应头:哪些字段会被蜘蛛当真

蜘蛛抓取入口页时,最先读到的其实是 HTTP 响应头,而不是 HTML 正文。Content-Type、Last-Modified、ETag、Cache-Control 与 X-Robots-Tag 这些字段,会直接影响蜘蛛对页面类型和更新状态的判断。本文梳理哪些字段值得留意、常见的配置失误,以及一套简单的检查方法。

蜘蛛池知识

蜘蛛池入口页的 HTTP 响应头:哪些字段会被蜘蛛当真

很多人检查蜘蛛池入口页时,习惯打开浏览器看页面长什么样,却很少看服务器返回的响应头。实际上蜘蛛在解析 HTML 之前,最先拿到的就是这一串头部字段,它决定了蜘蛛要不要继续读正文、多久之后再来、以及这一页在它眼里算什么类型的东西。

为什么响应头值得单独看一遍

页面正文可以慢慢改,响应头往往由服务器配置、程序框架或者反向代理一次性决定,改起来影响面更大。一个配置失误,可能让整批入口页被当成非 HTML 资源处理。

更现实的问题是:响应头的问题在浏览器里通常看不出来。浏览器容错能力强,蜘蛛不一定。

几个真正会被当真的字段

Content-Type 与字符集

正常的网页应该返回 text/html; charset=utf-8。如果写成 text/plain 或 application/octet-stream,蜘蛛可能直接判定这不是网页。charset 与页面内 meta 声明不一致时容易出乱码,正文里的链接也可能识别不出来。

Last-Modified 与 ETag

这两个字段是蜘蛛判断页面有没有变化的主要依据。入口页如果每次请求都返回当前时间戳,蜘蛛会认为内容一直在变,来得更勤,但抓到的其实是同一份东西;反过来,内容确实更新了而 Last-Modified 始终不动,蜘蛛可能长时间不再回访。

Cache-Control 与 Expires

设置合理的缓存时间可以减轻重复抓取带来的压力,但 max-age 设得过长,再叠加 CDN 缓存,蜘蛛拿到的可能是过期副本。

X-Robots-Tag

这个字段相当于 HTTP 版的 meta robots。noindex、nofollow、none 写在响应头里,效果和写在页面里一样。如果一批入口页共用模板,要确认有没有人在服务器层面批量加过限制。

3xx 与 Location

入口页做了跳转时,要确认跳转目标、跳转类型(301、302、307、308)以及跳转层数。链条太长,蜘蛛容易中途放弃。

日常检查做法

  • 用 curl -I 或带 -i 参数看原始响应头,而不是只看开发者工具里被简化过的版本。
  • 随机抽几台服务器、几个域名,不要只盯着主站看。
  • 把响应头与页面正文的声明对一遍,重点看 charset、canonical 和 robots。
  • 记录修改前后蜘蛛访问的变化,一次只改一项,便于判断因果。

几条实用建议

  1. Content-Type 固定为 text/html; charset=utf-8,除非确实是其他资源类型。
  2. 入口页内容没变,就别让 Last-Modified 乱跳。
  3. 谨慎使用 X-Robots-Tag,尤其是批量下发的规则。
  4. 跳转尽量只保留一层 301,并指向最终可访问的地址。
  5. 改完观察一段时间再下结论,蜘蛛的反应本身有延迟。
响应头不决定蜘蛛会不会来,但它会影响蜘蛛来的时候怎么理解这一页。把这一层理顺,往往比反复调整正文更省事。