入口页里写出了目标链接,不等于搜索蜘蛛一定读得到。中间还隔着一次 HTTP 请求是否顺利完成:如果请求在搜索蜘蛛的超时阈值内没有拿到完整响应,它很可能直接放弃这次抓取,页面里写了多少条目标 URL 都无从谈起。
超时发生时,搜索蜘蛛实际经历了什么
一次抓取大致经过几个步骤:解析域名、建立连接(含 TLS 握手)、发送请求、等待响应头、下载响应体、解析 HTML 并提取链接。任何一个环节超时,后面的步骤都不会执行。
- 连接阶段超时:DNS 解析慢、服务器不回 SYN、TLS 握手拖太久,抓取器会直接断开。
- 响应头超时:服务端迟迟不返回首字节,抓取器等不到就开始放弃。
- 下载中途超时或中断:响应体过大、传输速度过低,HTML 没下完就被切断,能解析到的链接可能只有前半部分。
无论哪种情况,结果都一样:这次抓取没有产出链接,目标 URL 也就没有被发现。
偶尔超时和长期慢响应,影响完全不同
单次超时通常会被记录为抓取错误,搜索蜘蛛之后可能重新安排抓取,但重试的间隔并不公开、也不固定。真正麻烦的是长期稳定地慢:
- 抓取失败率上升,入口页数量越多,这个比例带来的绝对值越大;
- 抓取预算会向响应更稳定的站点倾斜,本站被访问的频率可能下降;
- 入口页中位置靠后的链接,更容易因为传输被截断而漏读。
也就是说,超时对蜘蛛池的影响不是“少抓了一个页面”,而是整体发现效率被拉低。
怎么判断入口页是不是慢在了超时线上
可以先用命令行看首字节时间:curl -o /dev/null -s -w "%{time_starttransfer}\n" 入口页地址,连续跑几次取中位数,别只看单次结果。再看服务器日志中搜索蜘蛛 UA 的响应耗时分布,而不是只看平均值。
常见的拖慢原因包括:
- 入口页每次请求都查数据库或调接口实时拼接链接;
- 没有开启压缩,HTML 体积偏大;
- CDN 回源慢或缓存命中率低,请求大量打回源站;
- 同一台机器上站点过多,连接排队;
- TLS 配置老旧,握手往返次数偏多。
把入口页做得快而稳的几个动作
- 静态化:入口页生成静态 HTML 落盘或交给 CDN,链接列表定期更新,不要每次动态组装。
- 控制体积:入口页只放链接和少量说明,把目标 URL 尽量放在 HTML 前部,降低被截断时漏读的概率。
- 限制单页链接数量:一页塞几千条链接既拖慢页面,也分散抓取预算,分批、分页更实际。
- 监控 TTFB:把入口页响应时间纳入日常监控,一旦持续升高就优先排查,而不是等发现量掉了才回头看。
抓取超时不是“这次没抓到”这么简单,它会让搜索蜘蛛对整站形成“慢”的印象,而蜘蛛池恰恰依赖大量入口页被反复访问。
需要说明的是,把入口页调快只能提高被正常抓取、进而解析出链接的概率,并不能保证目标 URL 一定会被抓取或收录。搜索蜘蛛是否跟进、多久跟进,还受链接所在位置、站点整体质量等因素影响,任何工具都无法承诺结果。