搭建蜘蛛池时,很多人把注意力放在入口页内容、链接和 IP 上,却忽略了一个更基础的问题:服务器返回的响应头。蜘蛛访问一个 URL,最先拿到的不是正文,而是状态码和一组 HTTP 头。这些信息决定了它接下来是继续解析、放弃,还是过段时间再来。
状态码:先让蜘蛛知道页面是否正常
入口页面向蜘蛛时,最理想的返回是 200,并且正文与状态一致。常见问题集中在几类:
- 200 配空页面或错误提示:蜘蛛会当成正常页面,但抓不到有效内容,次数多了会降低对该路径的信任。
- 404 配 200:也就是常说的软 404。入口页已经下线,却仍返回 200,蜘蛛会反复抓取无效页面。
- 403 或 503 频繁出现:可能是防火墙、程序异常或维护导致。蜘蛛遇到大量 403,通常会降低抓取频率,甚至暂时停止访问。
- 跳转链过长:301、302 本身没有问题,但入口页跳目标页、目标页再跳一次,会增加抓取成本。能一步到位就不要多层中转。
如果入口页确实要下线,建议返回真实的 404 或 410,而不是继续给 200。维护窗口则用 503,并配合 Retry-After 告诉蜘蛛多久后再来,比直接关闭服务器更友好。
缓存头:影响的是回源和负载,不是收录开关
Cache-Control、Expires、ETag、Last-Modified 主要影响浏览器和 CDN 的缓存行为。它们不会直接决定页面是否被索引,但会影响蜘蛛反复访问时的回源压力。
- 入口页内容更新不频繁,可以设置合理的 max-age,让 CDN 承担一部分重复请求。
- 不要轻易使用 no-store。它会让每次请求都回源,入口页数量多时容易把源站拖慢。
- ETag 和 Last-Modified 配置正确时,蜘蛛再次抓取可能收到 304,减少带宽消耗。但不要为了制造 304 而随意改动时间戳。
X-Robots-Tag:批量控制时最容易误伤
X-Robots-Tag 是在 HTTP 头里写 noindex、nofollow 等指令的方式,适合非 HTML 资源或需要批量控制的场景。问题在于,它和页面里的 meta robots 同时存在时,搜索引擎通常取更严格的那一个。
入口页如果依赖蜘蛛抓取和传递发现路径,就要确认响应头里没有误加的 noindex。常见误伤来源是:服务器全局配置、安全插件默认规则、CDN 的某些优化选项。上线前用工具看一下响应头,比事后排查省事得多。
Content-Type 与字符集:别让解析在第一步出错
入口页应返回 text/html,并声明正确的字符集,例如 text/html; charset=utf-8。如果字符集写错,蜘蛛可能拿到乱码,影响它对页面主题的判断。对入口页来说,正文可以简单,但基础解析不能出问题。
另外,如果根据 User-Agent 返回不同内容,要留意 Vary 头和缓存策略。配置不当可能导致蜘蛛拿到给浏览器准备的版本,或者 CDN 缓存了错误版本。
上线前后的检查清单
- 用 curl -I 或浏览器开发者工具查看入口页响应头。
- 确认状态码是 200;跳转页确认 Location 正确,且没有链式跳转。
- 确认没有意外的 X-Robots-Tag: noindex。
- 确认 Content-Type 和字符集正确。
- 抽查缓存头是否导致每次请求都回源。
- 观察服务器日志中 5xx、403 的比例,异常升高时先查程序与防护规则。
响应头不是排名因素,但它是入口页能否被正常抓取和解析的前提。把状态码、缓存和放行规则做对,比在无关细节上做伪装更实际。