搜尋抓取

篩選參數、日歷與分頁叠加:蜘蛛走進無限抓取路径时怎么收口

蜘蛛顺着連結走,一旦篩選、排序、日歷和分頁互相叠加,URL 數量就會成倍膨胀,抓取预算被消耗在大量近似頁面上。本文梳理這類路径的常见生成方式,以及從連結、參數到 Sitemap 的收口思路,並给出日誌层面的判断方法。

搜尋抓取

篩選參數、日歷與分頁叠加:蜘蛛走進無限抓取路径时怎么收口

蜘蛛在站点里是靠連結走的。連結越規整,路径越短;連結一旦出現排列组合,同一個頁面就會被拆成成百上千個地址。篩選參數、排序參數、日歷归档和分頁這几類结构叠加在一起时,最容易出現所谓的“無限抓取路径”——蜘蛛每次都能發現新 URL,于是不断往下走,抓取次數上去了,真正有内容的頁面却没多几個。

無限路径是怎么長出来的

單個參數通常不致命,問题出在叠加。下面這些元素單獨看都合理,组合之後 URL 空間是乘法增長的。

  • 篩選條件支持多選,颜色、尺寸、品牌、價格区間任意搭配;
  • 排序參數(價格、時間、销量、好评)再與篩選自由组合;
  • 日歷按年、月、日逐級展開,每一层都是可点击連結;
  • 分頁用參數控制,頁碼又和篩選、排序拼在同一個地址里;
  • 會话 ID、来源追踪參數附着在每條站内連結上。

三類常见结构

篩選與排序的排列组合

類似 /list?color=red&size=40&sort=price&page=2 這样的地址,颜色、尺寸、排序、頁碼任意组合都能得到一個能正常打開的頁面,而内容與主列表差別很小。蜘蛛無法判断哪一條才是主地址,只能一條條抓過去。

日歷式归档

日期归档在内容站很常见,年、月、日三层嵌套,再叠加分頁,路径會越走越深。多數日期頁内容稀疏,甚至只有一條记錄,却同样占用一次抓取。

分頁與參數混用

同一份列表既可以用路径形式的分頁訪問,也可以用带 page 參數的地址訪問,两條路径通向相同内容。蜘蛛會当作两個入口分別抓取,路径數量随之翻倍。

怎么判断已经踩進去了

這類問题在收錄面板上不一定明顯,但在訪問日誌里很容易看出来。可以按 URL 模板归類,逐個观察數量變化:

  • 大量 URL 只有參數顺序或取值不同,頁面标题模板完全一致;
  • 抓取次數持續上升,索引量和有效流量没有同步變化;
  • 某個模板的 URL 數量在几天内不断增長,看不到上限;
  • 蜘蛛停留的目錄层級越来越深,新增内容頁却很少。

從几處收口

收口的原則是让蜘蛛只看到一類稳定地址,其余组合尽量不让它顺着連結走到。可以按下面的顺序處理:

  • 用 robots.txt 有選擇地屏蔽參數,注意只屏蔽确實不需要被搜到的组合;
  • 列表入口固定成一條干净路径,分頁尽量用路径形式而不是參數;
  • 用 canonical 指向規范地址,避免同一份内容被当成多個頁面處理;
  • 站内連結只提供有限组合,例如只给單選篩選做連結,多選组合交由用戶表單提交;
  • Sitemap 只放内容頁和稳定的列表頁,不要把參數组合寫進去;
  • nofollow 和 robots 屏蔽都有效果,但都會影响連結權重的传递,用之前想清楚。
收口不等于一刀切屏蔽所有參數。真正有搜尋需求、能当作落地頁的篩選结果,值得保留並给出規范地址;需要挡住的是剩下那批大批量的近似组合。

服務器與抓取预算的连带影响

參數组合爆炸不只浪費抓取预算,也會给服務器带来压力。蜘蛛並發上来後,如果每個請求都要實时查询資料库,响應變慢,整体抓取节奏會被拖下来,重要頁面反而抓得更少。给列表頁加缓存、限制無意义的深翻頁,往往比調整服務器配置更直接。

定期把日誌按 URL 模板归類看一眼,比等到索引出問题再處理省事得多。發現某個模板的 URL 數量在持續增長,基本就是该收口的信号。