先分清:慢不会直接扣分,但会改变抓取节奏
爬虫在单位时间内能请求的 URL 数量是有限的。服务器响应变慢之后,同样的抓取窗口里能拿到的页面会变少。对页面数量多、更新频繁的站点,这会直接影响两件事:新 URL 被发现的速度,以及老页面被重新抓取的周期。
所以更准确的说法是:响应慢不一定让某个页面被拒绝收录,但它可能让整站的抓取节奏变慢,进而让收录的推进看起来“卡住了”。判断时要把这两层分开。
三个可以量化的观察点
1. 首字节时间(TTFB)
用 curl 的 -w 参数,或者从服务器访问日志里的 upstream 时间来看 TTFB。经验上,动态页面的 TTFB 控制在几百毫秒以内比较从容,持续超过 1 秒就值得查。这里要区分两种问题:慢但不报错,和超时、5xx、429。后者对抓取的影响通常更直接。
2. 日志里的响应时间分布与状态码
- 统计 5xx、超时、429 在爬虫请求中的占比,哪怕只有百分之几也要单独看;
- 看平均响应时间和 P95、P99,平均值正常但长尾很慢,同样会拖住抓取;
- 看慢请求集中在哪些 URL 上,是列表页、搜索页,还是某个依赖外部接口的详情页。
3. 抓取频次与待抓取积压
如果响应变慢的时间点和“每日抓取量下降”“已发现但尚未抓取的 URL 持续堆积”大致重合,这三件事很可能同源。把时间线画出来,比单独看某一天的报表更有说服力。
慢的常见来源,按排查顺序
- 数据库慢查询、缺少索引,或列表页做了全表统计;
- 页面渲染同步依赖第三方接口,对方一慢,HTML 就出不来;
- 没有缓存,每个请求都回源重算;
- 图片、CSS、JS 体积过大,对依赖渲染的页面影响尤其明显;
- 服务器带宽或并发连接数触顶,高峰期整体变慢。
可以做的几件事
- 给可缓存的页面加缓存或做静态化,并设置合理的缓存头,让回源请求降下来;
- 把慢接口异步化或做降级,保证 HTML 主体先返回,次要模块后补;
- 用 CDN 分流静态资源,减少对源站的压力;
- 检查 robots.txt 有没有误挡渲染所需的资源,导致爬虫拿到的内容不完整——这类问题常被误当成“收录问题”;
- 改完之后观察两到四周,对比抓取频次、待抓取积压和索引量的变化,别一两天就下结论。
不建议同时做太多动作
常见误区是:一发现收录不理想,就同时提高提交频率、反复改站点地图、放宽服务器限流。这些动作叠加在一起,会让数据更难归因。更稳妥的做法是先记录基线,一次只改一到两项,留出足够的观察窗口。
响应变快不等于页面就会被收录。它只是让爬虫有机会多抓几个 URL。内容质量、URL 规范、重复内容、内链入口这些问题,仍然需要单独排查。
小结
把“服务器变慢”当成一个独立的、可量化的变量来测:TTFB、日志里的响应时间与状态码分布、抓取频次与待抓取积压。先确认它们之间有没有时间上的关联,再决定是优化服务器,还是回头去查 URL 与内容层面的问题。这样比笼统地说“收录变差了”更容易找到真正的原因。