搜尋抓取

抓取陷阱:URL 無限展開时蜘蛛會怎么走

站点在分頁、篩選、會话參數上稍有不慎,就會生成可以無限展開的 URL,让蜘蛛顺着連結一路爬下去。本文拆解几類常见的抓取陷阱,說明它們如何挤占抓取容量,並给出從日誌识別、參數收口到 robots 與 canonical 配合的處理思路。

搜尋抓取

抓取陷阱:URL 無限展開时蜘蛛會怎么走

如果一個站点的 URL 是有限的,蜘蛛迟早會爬完;但如果 URL 能無限生成,蜘蛛就會一直爬下去。抓取陷阱指的就是後者——站点在無意中提供了一條可以自我繁殖的抓取路径,蜘蛛顺着走下去,越走越遠,却始终碰不到真正的尽头。

常见的几種無限展開

  • 日歷分頁:日期归档里给每一天都生成「下一天」的連結,可以一直点到很久以前或未来。
  • 參數组合:篩選、排序、视图切換、每頁條數叠加在一起,同一批商品能拼出成百上千個 URL。
  • 會话與追踪參數:地址上挂着 sessionid、from、ref 之類的值,同一個頁面每次訪問看起来都像新地址。
  • 站内搜尋结果頁:搜尋框可被任意關鍵詞触發,蜘蛛顺着連結就能穷举出無數個结果頁。
  • 多版本頁面:打印版、移動版、分享短鏈各自成 URL,内容却几乎一样。

為什么蜘蛛會一直爬下去

蜘蛛没有「這個站我爬够了」的判断,它靠的是連結和信号。只要一個 URL 返回 200,並且頁面上還有其他没见過的連結,它就會被放進待抓队列。URL 生成的成本越低,队列就越長,而站点的抓取容量是有限的——被這些低價值地址占掉的份額,正是深层内容拿不到的那部分。

另一個容易被忽略的点是重复内容。同一套内容分散在几十個 URL 上,搜尋引擎需要在它們之間做選擇,權重被摊薄,頁面之間也很难形成清晰的主版本。

從日誌里認出来

看几组數字就够了:蜘蛛訪問的 URL 里,带參數的比例有多高;同一路径下不同參數组合被訪問的次數,是否遠高于正文頁;單個會话里蜘蛛连續訪問的地址,是否呈現明顯的排列组合特征。如果某類 URL 的抓取量占比很高、但带来流量的比例很低,基本可以確認是陷阱。

處理思路

  1. 先判断價值:有搜尋需求、有轉化價值的參數组合留着,纯排列组合的砍掉。
  2. 用參數規范收口:站内連結统一只保留必要的參數,视图、排序類參數尽量用前端方式處理,不寫進 href。
  3. 加上抓取约束:對無價值路径用 robots.txt 的 Disallow 拦住,但要清楚它只是不让抓,並不等于 URL 不會被索引,必要时配合 noindex,而 noindex 需要頁面能被抓取才生效,两者的作用范围要分開處理。
  4. 管住會话與追踪參數:内部連結里不要带 sessionid、utm 等值,让蜘蛛看到的地址是干净的。
  5. 明确主版本:多版本内容用 canonical 指向主頁面,让重复的地址有统一出口。
  6. 给蜘蛛留出目錄:用 Sitemap 主動提交真正需要被發現的 URL,让蜘蛛不必自己去穷举。

改完之後怎么驗證

調整後不要指望隔天见效,抓取结构的重建需要一段時間。可以持續观察蜘蛛對各目錄的訪問占比是否變化,正文頁的抓取频次有没有回升。也可以用站内日誌對比調整前後同一批 URL 的訪問次數,看排列组合類的地址是否明顯减少。

抓取陷阱很少是有人故意造的,多數是分頁、篩選、追踪參數在日常迭代里一点点堆出来的。定期翻一次日誌,比事後花几個月清理要省力得多。