搜尋抓取

站内無限 URL 空間:蜘蛛在連結循环里绕圈,怎么收口

同一份内容可以被無數種 URL 表達,蜘蛛跟着連結走就會不断發現新地址。本文梳理無限 URL 空間的常见成因,以及從“不生成”到“拦在门外”的收口顺序,並给出調整後该观察哪些指标。

搜尋抓取

站内無限 URL 空間:蜘蛛在連結循环里绕圈,怎么收口

蜘蛛沿着連結走,站点每多出一種連結组合,就等于多開了一條路。大部分路通向有用頁面,但有些路會不断分出新的分支,让蜘蛛在有限時間里一直走、一直發現新 URL,却始终到不了有價值的頁面。這類结构通常被称為無限 URL 空間,或者爬虫陷阱。

無限 URL 空間是怎么形成的

根源不在蜘蛛,而在站点自身:同一份内容可以被無數種 URL 表達,站点又愿意為每一種寫法都返回 200。蜘蛛看到連結就跟着走,看到新地址就记下来,循环自然出現。

常见的几種形態

  • 日歷與归档:按年月日生成归档頁,每頁又鏈向“上一月”“下一年”,這些連結會跟着目前日期持續向後延伸。
  • 篩選與排序叠加:颜色、尺寸、價格区間、排序字段互相组合,再叠加分頁參數,URL 數量呈乘积增長。
  • 分頁首尾互鏈:列表頁同时提供“第一頁”“最後一頁”“下一頁”,蜘蛛在頁與頁之間来回跳。
  • 會话與跟踪參數:session id、来源跟踪碼被寫進每一條内鏈,同一條路径因此生成成千上萬個變体。
  • 站内搜尋與结果頁:搜尋结果本身是可抓取的 URL,而结果頁里又带着新的搜尋入口。
  • 相對路径在深层目錄被反复拼接:寫错的相對連結會在不同层級拼出越来越長的地址。

它带来的實际影响

最直接的是抓取時間被分散。蜘蛛每天来站点的次數有限,大量相似 URL 占掉這些請求,真正需要复查的新頁面、更新頁面就要排队。其次是日誌难讀,同一份内容出現几十種 URL,很难判断哪個才是有效入口。第三是服務器压力,重复請求本身也要消耗带宽和 CPU。需要注意,這不一定表現為抓取總量上涨——有些站点總抓取量没變,但有效頁面的抓取次數明顯下降。

怎么找出這類路径

  • 按路径前缀統計日誌里的 URL 數量,看哪一段的 URL 密度明顯偏高。
  • 看參數:同一路径下出現了多少種參數组合,其中多數是不是只有參數顺序不同。
  • 對比 Sitemap 與内鏈:Sitemap 只列了几百個 URL,日誌里却出現上萬條同前缀地址,說明入口在篩選或分頁。
  • 观察蜘蛛的停留位置:抓取集中在中层列表頁,很少到達詳情頁,通常意味着中間层生成了太多岔路。

收口的思路

處理顺序建议從“不生成”開始,再到“不把它變成連結”,最後才是“拦在门外”。

  1. 减少组合维度:把篩選收窄到少數几個真正有需求的组合,其余组合通過表單提交或点击後异步加载,不直接輸出静態連結。
  2. 去掉無意义參數:跟踪碼、會话标识不進内鏈;參數顺序统一,重复參數合並。
  3. 给分頁设邊界:分頁只保留“上一頁/下一頁”,去掉“跳到最後”這類跨頁連結;深度過大的分頁不再生成連結。
  4. 用 robots.txt 屏蔽已確認的模式:規則要寫得窄,只针對明确的參數前缀,避免誤伤正常路径。
  5. 空结果返回 404 或 410:不存在的篩選组合如果返回 200 的空頁面,蜘蛛會繼續保留並复查。
  6. Sitemap 只放有意义的 URL:把參數變体塞進 Sitemap,等于主動扩大空間。

收口之後看什么

調整後的一两周,重点看三件事:同前缀 URL 在日誌里的數量是否下降;詳情頁的抓取次數是否上升;服務器因蜘蛛訪問产生的负载是否變轻。如果總抓取量下降但有效頁面小幅上升,這通常是好現象,不必因為總數字變小而紧張。

抓取路径的管理不是把蜘蛛挡在门外,而是让它在有限的時間里少走岔路。

最後提醒一点:無限 URL 空間很难完全清零,篩選、分頁、日歷都是正常功能。目标不是零,而是让這些分支不超過蜘蛛能承受的比例,让主要内容路径始终清晰可辨。