很多人检查入口页,只看浏览器里能不能正常打开,打得开就认为没问题。但蜘蛛拿到的并不是渲染后的画面,而是 HTTP 响应本身。响应头、字符集声明、压缩方式、缓存策略和响应时间,都会影响它能否顺畅解析、是否愿意继续跟进页面里的链接。
一、Content-Type 与字符集:先让蜘蛛知道这是什么
最常见的坑是 Content-Type 缺失或写错。把 HTML 页面返回成 text/plain,或者干脆不声明 charset,浏览器通常会猜,蜘蛛大多也能猜,但猜测就意味着不确定。如果页面含中文,响应头写的是 charset=gbk,实际文件却是 UTF-8,蜘蛛可能拿到一段乱码文本,页面里的文字和链接都失去意义。
检查方式
- 用 curl -I 查看响应头,确认返回 200 且 Content-Type 为 text/html,并带上正确的 charset。
- 响应头里的 charset 与页面 meta charset 保持一致;两者冲突时,一般以响应头为准。
- 如果入口页返回的是 JSON、纯文本或文件下载类型,蜘蛛不会把它当作可索引的 HTML 页面处理。
二、压缩:省的不只是带宽,还有抓取时间
gzip 和 brotli 能明显减小 HTML 的传输体积。一个 200KB 的入口页,不压缩就要完整传完才算一次抓取;开启压缩后可能只有三五十 KB。对于入口页数量多、抓取配额有限的池子,这是成本很低的改善。
有两点要注意:一是别对图片、视频这类已经压缩过的文件再压一遍,白耗 CPU;二是部分 CDN 或反向代理默认不开压缩,改完配置后要用实际请求验证,而不是只看面板上的开关。
三、缓存头:它决定蜘蛛重访时看到什么
Cache-Control、ETag、Last-Modified 名义上是给浏览器用的,蜘蛛同样会参考。常见误区有两个方向:
- 把所有入口页设成 no-store 或 no-cache,每次请求都重新生成。蜘蛛重访成本高,服务器压力也大。
- 反过来设了很长的 max-age,页面内容其实已经变了,蜘蛛拿到的还是旧版本,链接更新会明显滞后。
如果入口页结构稳定、只是偶尔换几条目标链接,比较稳妥的做法是保留 ETag 或 Last-Modified,让蜘蛛带着 If-None-Match / If-Modified-Since 来问,内容没变就返回 304。这样既省流量,也不容易让它拿到过期内容。
四、响应时间与超时:慢一点还能忍,超时就白来
各家蜘蛛的超时上限不同,但基本都有一个门槛。如果一个入口页要十秒以上才返回首字节,被抓取的机会会明显下降。常见原因包括:后端每次请求都查库、DNS 解析慢、TLS 握手耗时、CDN 回源不稳定。
把入口页当成静态文件处理,或者做好页面级缓存,让大多数请求在几百毫秒内返回 HTML,比事后抱怨蜘蛛不来有用得多。
五、上线前的快速检查清单
- 用 curl -I 看状态码与 Content-Type,确认没有异常返回。
- 对比压缩前后的响应体积,确认真实生效而不是只在配置里打开。
- 确认 ETag 或 Last-Modified 存在,且不会每次请求都变化。
- 查看首字节时间,尽量控制在 1 秒以内。
- 确认响应头没有把页面标成 noindex,也没有返回非 HTML 类型。
- 抽查几台不同 IP 的机器,避免只有某一台配置特殊、表现不一致。
六、别指望这些能直接换来收录
响应头、压缩和缓存属于把路修平,不是把车开过去。它们能减少蜘蛛在抓取环节遇到的阻力,但页面值不值得被索引、链接会不会被跟进,仍取决于内容质量、链接结构和站点整体情况。这些细节的意义在于:当其他条件相差不大时,它不会成为最先掉链子的那一环。