很多站点為了多做出一些入口頁,會顺手上线分頁、日歷、篩選、排序這類功能。對用戶来说這是方便,但對蜘蛛来说,如果缺少邊界控制,它們會變成一條條走不完的路径——這就是常说的爬虫陷阱。蜘蛛池入口頁本身數量就多,一旦再叠加上無邊界路径,抓取资源會被大量消耗在重复、低價值的组合上。
爬虫陷阱的典型表現
爬虫陷阱不是什么攻击,而是頁面结构與連結規則共同造成的“走不完”。常见表現是:日誌里蜘蛛抓取量看着不低,但落在核心入口頁上的次數反而變少;同一组參數被反复组合抓取;索引中出現大量内容雷同的頁面。
入口頁常见的三類陷阱
1. 分頁没有终点
列表頁的“下一頁”如果永遠存在,即使後面已经没有資料,也仍然返回 200 並带着下一頁連結,蜘蛛就會一直跟下去。比較稳妥的做法是最後一頁不再輸出下一頁連結,或者對超出范围的頁碼返回 404、410。
2. 日歷與時間篩選
日期選擇器生成的 URL 往往是無限组合:任意年月、任意区間都能拼出一個可訪問頁面,内容却是空的或高度重复。這類 URL 建议不要放進可抓取的連結里,或者限制只開放有限的日期范围。
3. 多條件篩選與排序
篩選條件相乘後會产生指數級的 URL 组合。蜘蛛並不需要遍歷所有组合,只保留有内容、有實际需求的少數组合即可,其余可以靠 robots、canonical,或者干脆不在頁面上輸出連結来控制。
為什么蜘蛛池场景要格外注意
蜘蛛池入口頁通常走的是批量生成、批量维護的路子,域名與頁面數量本身已经摊薄了抓取资源。這时候再让陷阱路径分走一部分抓取,核心入口頁被發現和回訪的概率就會下降。換句话说,陷阱吃掉的不只是带宽,還有入口頁的更新机會。
排查思路
- 拉一段時間的訪問日誌,按 URL 模式聚合,看哪些參數组合被高频抓取。
- 检查列表頁與篩選頁,確認是否存在“没有資料也返回 200 並带下一頁連結”的情况。
- 站内抽样或看索引狀態,判断是否有大量内容雷同的頁面被收錄。
- 對比陷阱路径與核心入口頁的抓取占比,估一下影响程度。
處理建议
- 给分頁設定明确上限,超出的頁碼返回 404 或 410,不要用 200 兜底。
- 篩選、排序、日歷參數尽量不要出現在可抓取的 a 标簽 里,改用表單或 JS 触發。
- 對确實想保留的组合頁,补上唯一的 title、正文與 canonical,避免和主列表頁重复。
- 在 robots 里屏蔽纯參數路径时注意粒度,屏蔽過宽會连带挡掉有價值的頁面。
- 改動上线後观察一段時間的抓取分布,確認核心入口頁的抓取次數是否回升。
爬虫陷阱的關键不是“蜘蛛来了”,而是“蜘蛛走不掉”。把路径邊界画清楚,通常比單纯堆入口頁數量更划算。
最後提醒一句:抓取分配是動態的,任何調整都需要時間观察,很难改完第二天就见效。把结构理顺、把邊界定清楚,長期看更省心。