做蜘蛛池时,很多人把注意力放在 URL 结构、内容质量和链接层级上,却很少检查入口页返回的 HTTP 响应头。实际上,蜘蛛在解析 HTML 之前,先读到的是状态行和响应头。这些字段会影响它是否继续解析、是否缓存页面、隔多久再来,以及是否把页面纳入后续抓取队列。
为什么响应头值得单独看
响应头是服务器与蜘蛛之间的第一层对话。状态码告诉蜘蛛请求结果,Content-Type 告诉它怎么解码,缓存相关字段告诉它下次要不要重新请求,X-Robots-Tag 则可以直接改变页面的索引和跟随行为。入口页数量一多,任何一个字段配置不一致,都可能在日志里表现为抓取异常或重复请求。
几个容易踩坑的字段
Content-Type 与字符集
入口页最好是 text/html; charset=utf-8。如果 Content-Type 缺失、写成 text/plain,或者字符集与实际编码不一致,蜘蛛可能无法正确解析页面里的链接。中文入口页尤其要注意,编码声明错误会让链接文本和 URL 提取出现偏差。
Cache-Control 与 Expires
这两个字段影响蜘蛛再次访问的间隔。如果入口页设置了很长的 max-age,蜘蛛可能在一段时间内不再回访,新增或更新的链接就难以及时被发现。对于需要频繁轮换的入口页,建议设置较短的缓存时间,或者用 no-cache、must-revalidate 让蜘蛛每次回源确认。但也不要全部设成 no-store,否则每次请求都完整拉取,会增加服务器压力。
Last-Modified 与 ETag
这两个字段用于协商缓存。蜘蛛再次请求时,如果带上 If-Modified-Since 或 If-None-Match,服务器可以返回 304,告诉它页面没变。304 能减少传输量,但如果入口页内容经常变,而 Last-Modified 没有同步更新,蜘蛛可能误以为页面没变,从而错过新链接。建议让这两个字段与实际内容更新保持一致,不要长期返回固定值。
X-Robots-Tag
X-Robots-Tag 可以在响应头里写 noindex、nofollow、noarchive 等指令,效果和 meta 标签类似,但优先级和适用范围不同。常见误区是:只在 meta 里写 noindex,却忘了响应头里还有一条 noindex;或者反过来,以为响应头只对当前 URL 生效,实际上它可能被继承到同目录下的其他资源。排查时要把响应头和页面 meta 一起看。
Retry-After 与 429、503
当入口页触发限流或临时维护时,返回 429 或 503 并带上 Retry-After,可以告诉蜘蛛多久之后再来。这比直接返回 403 或 404 更合适,因为后两者可能让蜘蛛降低对整站的抓取频率,甚至移除已有链接。注意 Retry-After 的时间不要设置得过长,否则蜘蛛可能真的很久不回来;也不要滥用 503,长期返回 503 会被视为站点不可用。
Set-Cookie 与 Vary
如果入口页对每个请求都下发 Set-Cookie,蜘蛛可能会因为 Cookie 变化而把同一 URL 视为不同状态,增加重复抓取。Vary 字段则告诉蜘蛛缓存键包含哪些请求头。如果 Vary 设置过宽,比如 Vary: User-Agent,可能导致同一入口页按不同 UA 缓存多份,影响命中率。蜘蛛池入口页通常不需要复杂的 Cookie 和 Vary 策略,保持简单更稳妥。
常见误区
- 只看状态码,不看其他头:200 不代表蜘蛛一定能正确解析和继续抓取。
- 所有入口页用同一套缓存策略:更新频率不同的页面应该区别对待。
- 用 403 代替 429:限流场景下,403 更容易让蜘蛛误判为永久拒绝。
- X-Robots-Tag 和 meta 指令冲突:两者不一致时,蜘蛛可能按更严格的执行,导致入口页不被索引或不传递链接。
排查顺序建议
- 先用 curl 或浏览器开发者工具查看入口页的完整响应头,确认状态码和 Content-Type。
- 检查 Cache-Control、Expires、Last-Modified、ETag 是否与页面更新节奏匹配。
- 核对 X-Robots-Tag 与页面 meta 中的 robots 指令是否一致。
- 查看是否有不必要的 Set-Cookie 和过宽的 Vary。
- 如果日志里出现大量 429、503,检查 Retry-After 是否合理,以及限流规则是否误伤正常蜘蛛。
响应头不是配置一次就不用管的东西。入口页轮换、内容更新、服务器迁移时,都值得重新看一眼这些字段,避免蜘蛛因为一个小字段而少抓或错抓。
把响应头纳入日常检查清单,不会立刻带来收录或排名变化,但能减少无效抓取和重复请求,让蜘蛛池的入口页更稳定地承担 URL 发现的任务。尤其当入口页规模较大时,统一、清晰的响应头策略比事后从日志里逐个排查要省力得多。