蜘蛛取一個頁面,不止取一個文件
很多站点把抓取理解成“蜘蛛来一次,取走一個 HTML”。實际鏈路中,蜘蛛解析 HTML 後還會請求頁面引用的 CSS、JS、图片、字体等资源。搜尋引擎蜘蛛對單個站点的並發连接數是有限的,這些附加請求會和 HTML 争抢同一批连接。当静態资源体积大、數量多、响應慢时,真正决定内容的那份 HTML 就會被排在後面。
连接被占满时,日誌會是什么样
比較典型的現象是:蜘蛛訪問 HTML 的次數没降,但單次耗时明顯變長;同一時間段里,资源 URL 的請求量遠高于頁面 URL;抓取總時間被拉長,單位時間内實际覆盖的頁面數反而下降。這不是蜘蛛“變懒”,而是它在等资源。
另一種情况是资源返回 404 或超时。蜘蛛會重试,重试同样占用连接,進一步挤压 HTML 的抓取窗口。
几個可以調整的方向
- 合並與压缩静態资源:减少請求數量往往比單纯减小單個文件体积更直接,尤其是小图标、零散脚本。
- 给静態资源設定長效缓存:带指纹的静態文件可以返回較長的 Cache-Control 和 ETag,蜘蛛二次抓取时通過协商复用,不必重复下载全量内容。
- 把资源放到 CDN 或獨立域名:连接從主域分摊出去,HTML 的抓取窗口會宽松一些;但要確認 CDN 不拦截蜘蛛 UA,也不要让资源域變成新的瓶颈。
- 首屏内容別依赖延迟加载:正文图片懒加载、内容靠滚動触發,蜘蛛可能拿不到;至少让文本内容在 HTML 里直接可见。
- 清理無意义资源:埋点、統計、废弃组件引用的脚本如果長期返回 404,會在日誌里持續消耗抓取次數,值得清理,而不是靠屏蔽了事。
服務器侧的稳定性同样是變量
蜘蛛的抓取节奏會參考服務器的响應情况。首字节時間波動大、错誤率高时,它會主動放慢,甚至暫停對该目錄的回訪。這时候即使你把资源優化到位,恢复也需要時間。带宽被其他业務占满、源站临时扩容失敗、防火墙對高频 IP 做了限速,都會让蜘蛛的连接被重置。稳定的响應時間和可控的错誤率,是抓取效率的基础。
把抓取效率全部归因于“蜘蛛不愿来”,往往會漏掉连接层的問题。先看服務器日誌里的响應時間分布,再谈内容。
怎么驗證調整是否有效
- 在日誌里按蜘蛛标识統計頁面 URL 與资源 URL 的請求比例,观察一段時間的變化。
- 關注 HTML 請求的平均响應時間,而不是站点整体平均响應時間。
- 看單位時間内被抓取的不同 URL 數量,這個數字比總請求數更接近真實覆盖。
- 調整一次只改一個變量,否則無法判断是哪一項起了作用。
抓取本质上是一次资源調度:连接、带宽、响應時間都是有限的。让蜘蛛用最少的连接拿到最有價值的内容,比一味追求“蜘蛛来得更多”更實际。