很多站点不是没有内容,而是内容被大量低價值URL稀释了。搜尋蜘蛛在站内爬行时,會顺着連結一层层發現新地址。如果頁面里存在可以無限组合的參數,比如篩選條件、排序方式、日歷翻頁、會话标识,蜘蛛就可能在這些地址上反复打轉。這通常被称為爬虫陷阱。
常见的爬虫陷阱形態
它們往往不是單個頁面,而是一套可以不断生成地址的机制:
- 多维篩選:颜色、尺寸、品牌、價格区間等條件任意组合,每換一组就生成一個新URL。
- 排序與视图參數:按價格、销量、新品排序,或列表、網格视图切換,内容相同但地址不同。
- 日歷翻頁:活動日歷、归档日期可以向前或向後翻很多年,生成大量空结果頁。
- 會话與跟踪參數:sessionid、from、utm 等參數被寫進連結,同一頁面出現多個版本。
- 打印、導出與分享連結:為方便用戶生成的一次性地址,没有收錄價值,却可能被蜘蛛抓到。
為什么參數组合比頁面數量更麻烦
頁面數量是有限的,參數组合却可能接近無限。假设一個列表頁有五個篩選维度,每個维度有十種取值,组合起来就是十萬級地址。蜘蛛的抓取预算有限,如果把這些地址大量抓走,真正需要更新的文章、栏目和詳情頁就可能排到後面。更麻烦的是,這些地址往往返回相似内容或空结果,容易让蜘蛛對站点质量产生誤判。
抓取预算不是靠“提交更多URL”換来的,而是靠“减少無效URL”省出来的。
先自查:日誌和站点地图里能看到什么
治理之前,先確認問题是否真實存在。服務器日誌里可以观察蜘蛛訪問的路径模式:如果大量請求集中在带參數的列表頁、日歷頁,且响應内容相似,就值得處理。站点地图和站内連結也要检查,看是否主動把參數地址暴露给了蜘蛛。
- 同一内容是否有多個參數版本同时被訪問?
- 空结果頁、排序頁是否被频繁抓取?
- 是否存在蜘蛛深挖日歷、翻頁到很遠位置的记錄?
- 站内搜尋结果的URL是否被站内連結或站点地图引用?
治理顺序:從連結层開始,再考虑規則
很多运营人員第一反應是寫 robots.txt。robots 可以阻止抓取,但已经發現過的URL仍可能出現在索引里,顯示為無描述的结果。更稳妥的做法是先减少連結暴露,再配合其他信号。
- 梳理參數用途:区分哪些參數影响内容、哪些只影响展示。只影响展示的參數,尽量不進入可抓取連結。
- 限制组合入口:可以保留一两個核心篩選维度,多维组合改為表單提交或前端加载,不生成稳定的可抓取地址。
- 規范連結:對同一内容的不同參數版本,用 canonical 指向主版本;站内連結尽量直接指向規范地址。
- 處理日歷與翻頁:给翻頁設定合理上限,超過上限的連結不輸出,或加上 nofollow 與 noindex。對确實没有内容的日期頁,不要生成連結。
- 清理跟踪參數:站内跳轉不要携带 sessionid、utm 等參數;外部投放連結也要注意,不要让這些參數進入站内爬行路径。
- 持續观察:治理後過一段時間再看日誌,確認高频參數請求是否下降,核心頁面的抓取是否更集中。
几個容易忽略的细节
nofollow 和 robots 並不是一回事。nofollow 主要影响連結權重和發現,robots 是抓取层面的禁止。對于不想被抓取、也不想被索引的地址,通常需要组合使用。另外,空结果頁如果返回 200 狀態碼,容易被当作正常頁面,建议返回合适的狀態或明确提示無结果,避免蜘蛛反复訪問。
爬虫陷阱的治理不是一次性任務。栏目調整、篩選功能上线、活動頁面改版,都可能带来新的參數入口。把URL發現纳入日常运营检查,比事後清理更省力。