搜尋抓取

抓取速率與服務器负载:把蜘蛛的訪問节奏控制在站点能承受的区間

抓取速率不是越快越好,也不是越慢越好。本文說明蜘蛛的抓取节奏受哪些因素影响、什么信号說明该主動放慢、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 的首次抓取耗时:這是判断限速是否過头的直接證據。
把抓取速率理解成一個区間:低于下限,新内容迟迟不被發現;高于上限,服務器開始出错。目标是让蜘蛛稳定待在這個区間里,而不是追求某個固定數值。

最後提醒一句:任何調整都需要一到两周才能從日誌里看出趋势,频繁改動反而让节奏更乱。先记錄現状,再小步調整,用資料確認效果。