搜索抓取

抓取速率与服务器负载:把蜘蛛的访问节奏控制在站点能承受的区间

抓取速率不是越快越好,也不是越慢越好。本文说明蜘蛛的抓取节奏受哪些因素影响、什么信号说明该主动放慢、robots.txt 的 Crawl-delay 与服务端限速各自能做什么,以及从日志里看哪些指标来调整,让抓取稳定停在站点能承受的区间内。

搜索抓取

抓取速率与服务器负载:把蜘蛛的访问节奏控制在站点能承受的区间

很多站长只关心蜘蛛有没有来,却很少关心它来得有多急。抓取速率是搜索引擎根据站点一段时间内的响应表现自动调整的,站点能做的是配合它、影响它,而不是单方面命令它。

抓取速率大致由什么决定

蜘蛛不是均匀地访问全站,它更像是在试探站点的承受力:

  • 服务器响应时间:返回得越慢,蜘蛛越倾向于降低并发。
  • 历史抓取表现:过去一段时间 5xx 和超时越多,后续抓取越保守。
  • URL 总量与更新频率:经常更新的栏目会被更频繁地回访。
  • 出口带宽的占用:蜘蛛的请求和大图、大文件下载共享同一条链路。

什么情况下应该主动放慢

如果日志里出现下面这些信号,说明站点已经在被压着走:

  • 来自蜘蛛的请求中,500、503 的比例明显上升;
  • 响应时间从几十毫秒涨到几百毫秒,甚至开始超时;
  • 数据库连接被打满,正常用户访问也跟着变慢。

这种情况继续放任抓取,短期看像是蜘蛛很活跃,实际结果是它抓走大量错误页,随后自己降速,重要页面反而更晚被发现。

可以用的几种调节手段

robots.txt 里的 Crawl-delay

Crawl-delay 只对部分爬虫有效,一些主流搜索引擎已经不再参考这个字段。它更像是一种礼貌提示,不能当成限流开关。写不写要看你面对的是谁,写完也要用日志验证是否真的生效。

服务器与 CDN 层面限速

更可靠的做法是在入口做限制:对已知蜘蛛 IP 段设置并发上限或每秒请求数上限,超限时返回 429 或 503 并带上 Retry-After。这样节奏由站点自己决定,而不是等蜘蛛来降速。

减少无效抓取

放慢的另一面是少让它抓些没用的。参数组合页、空结果页、重复列表页被反复抓取,会占掉本可以留给新内容的额度。用 robots.txt 挡住无意义路径、用 canonical 收敛重复 URL、把 Sitemap 里已经失效的地址清理掉,都是在给抓取腾空间。

用 Sitemap 和内链引导顺序

想让重要页面先被抓到,靠的不是提高整体速率,而是让它在发现队列里排得更靠前:首页与栏目页提供稳定入口,Sitemap 保持准确,新页面发布后尽快从已有页面链出去。

什么时候不必刻意压速

如果响应时间稳定、错误率接近零、带宽有富余,站点反而应该欢迎蜘蛛多来。此时人为限速只会让新内容在队列里多等几天。判断标准不是服务器看起来累不累,而是日志里的实际指标。

看哪些指标来调整

  1. 5xx 与超时占比:按天统计,出现尖峰就回查那一时段发生了什么。
  2. 平均响应时间:区分蜘蛛请求与用户请求,避免互相掩盖问题。
  3. 抓取频次变化:蜘蛛主动降速往往先于你的监控告警。
  4. 新 URL 的首次抓取耗时:这是判断限速是否过头的直接证据。
把抓取速率理解成一个区间:低于下限,新内容迟迟不被发现;高于上限,服务器开始出错。目标是让蜘蛛稳定待在这个区间里,而不是追求某个固定数值。

最后提醒一句:任何调整都需要一到两周才能从日志里看出趋势,频繁改动反而让节奏更乱。先记录现状,再小步调整,用数据确认效果。