蜘蛛顺着連結走,本身没有记忆,也不會判断這條路是否值得再走一遍。頁面只要提供了带參數的連結,它就會照着走;連結再生成連結,路径就可能越铺越長。日歷、篩選、排序、多條件组合這几類頁面,是最容易让蜘蛛走進循环的地方——不是抓不到内容,而是抓了大量几乎一样的頁面,把有限的抓取机會花在了重复路径上。
無限路径是怎么产生的
循环的起点通常很普通,就是頁面上的几條普通連結。問题在于這些連結能互相指向,形成一條没有终点的鏈。
日歷归档
日期归档往往是“上一月/下一月”两條連結。單看很少,但如果每一层日歷都能指向相邻月份,蜘蛛就會沿着月份一路走下去,理论上没有尽头。站点越老,這條鏈越長,抓取时被消耗的請求也越多。
篩選與排序參數
列表頁加上颜色、價格区間、排序方式之後,URL 组合會成倍增長。三個篩選维度各有五個選項,理论上就能生成上百個地址;如果這些篩選结果之間還能互相点击,组合數會繼續膨胀。對蜘蛛来说,每一個 URL 都是一個待抓任務。
無限滚動與分頁叠加
無限滚動把内容加载放在前端,如果同时又保留传统分頁連結,同一批内容就會出現多套入口。滚動触發的新 URL 一旦被记錄,抓取路径也會跟着一起變長。
循环對抓取的實际影响
- 待抓队列被低價值 URL 占住,真正有更新的頁面回訪變慢
- 同一批内容被反复抓取,日誌里出現大量结构相似的路径
- 服務器承担不必要的請求,在訪問高峰期會更明顯
這些問题不會立刻表現在收錄上,但會体現在“蜘蛛来得挺勤,新内容却總慢半拍”的体感里。
先判断站内有没有循环
日誌是最直接的證據。翻一段時間内的抓取记錄,可以留意几個信号:
- 單日被抓取的 URL 數量,明顯高于站点實际頁面總數
- 路径中出現连續叠加的參數,例如颜色、價格、排序字段反复同时出現
- 某個模板頁面的抓取次數,遠高于同目錄下的内容頁
- 新發布的頁面迟迟没有回訪,而老篩選頁却反复被抓
如果這些情况同时出現,基本可以確認抓取路径存在失控的岔口。
處理思路
- 收敛參數:篩選、排序類連結只保留少數有搜尋價值的组合,合並同义參數,固定參數顺序,避免同一结果對應多個地址。
- 给翻頁设上限:日歷、归档、列表頁只輸出到合理的頁數,超出部分不再生成連結,用戶需要时可以通過搜尋進入。
- 区分處理手段:完全不希望被抓的路径用 robots.txt 拦在门外;仍希望被發現、但不希望大量重复抓取的頁面,用頁面級 noindex 更合适。两者作用不同,別混着用。
- 保留一條主路径:無限滚動场景下,仍然保留一套清晰的分頁 URL,作為可抓取的入口,而不是只依赖前端加载。
- 用 Sitemap 标注重点:把内容頁、分類頁這些真正的主路径放進 Sitemap,让蜘蛛有一個明确的參照,而不是全靠顺着連結摸索。
堵住路径之後,別把出口一起關掉
限制抓取路径时,最容易被顺手關掉的是新内容的入口。列表頁、詳情頁、分類頁之間的正常内鏈要保留;被限制的應当只是那些可组合、會無限增長的參數路径。改完之後观察一段時間日誌,看抓取總量是否回落到接近站点頁面規模的水平,以及新頁面的首次抓取是否變快,再决定要不要繼續收紧。
抓取路径不是越短越好,而是要有邊界。给蜘蛛一條走得完的路,比给它無數條相似的路更有用。