搜尋抓取

搜尋蜘蛛的URL發現:Faceted導航的URL參散發散與收敛實践

电商與分類站点常用Faceted導航帮用戶篩選商品,但篩選组合會产生大量带參數的URL,让搜尋蜘蛛在無意义的路径上浪費時間。本文從蜘蛛抓取视角剖析這類URL的识別方法,以及如何用noindex、canonical和參數配置做收敛,避免核心頁面被淹没。

搜尋抓取

搜尋蜘蛛的URL發現:Faceted導航的URL參散發散與收敛實践

很多电商、招聘、旅游類站点都依赖Faceted導航,也就是用戶通過品牌、價格、颜色等篩選條件逐級缩小结果集。這種交互让用戶更高效地找到目标,同时也给搜尋蜘蛛的URL發現带来了不小的麻烦。每一次篩選操作都可能生成一個獨特的URL,多個维度叠加後,URL數量會呈几何級增長,而其中大部分頁面並没有獨立的搜尋價值。

Faceted導航為什么會让抓取路径發散

当搜尋蜘蛛顺着某個列表頁的内鏈進入Faceted導航頁面,它會發現頁面里又存在大量指向其他篩選组合的連結。如果這些URL都返回200狀態碼,蜘蛛就會把它們当作真實的抓取目标,逐個去請求。假设一個服装站点有品牌、尺碼、颜色三個维度,每個维度有10個選項,理论上就可能产生1000個组合URL。再加上排序條件,URL數量會更多。蜘蛛的爬取预算就在這些排列组合中被快速消耗,而真正需要被收錄的商品詳情頁、品牌聚合頁反而可能得不到足够的抓取。

更嚴重的是,某些Faceted導航允许用戶组合出“無结果”狀態,但頁面仍然返回200,而不是404或软404。蜘蛛會誤以為這是一個有效頁面,反复尝试抓取,進一步浪費资源。

從蜘蛛视角识別低價值參數URL

在動手處理之前,可以先把自己想象成一只蜘蛛:每到一個頁面,试图找出有哪些連結可能進入一個無休止的篩選循环。常见的高發散模式有:

  • 同一组结果可以通過不同篩選顺序到達,比如先選品牌再選颜色,與先選颜色再選品牌指向相同的URL,但實际却有两個地址。
  • 無限累加的篩選维度,比如允许在已经選好的维度上繼續追加新的條件,每一步都生成新URL。
  • 排序、每頁數量等非關键參數被放在URL末尾,使得同一产品列表有無數變体。

這些URL的共同特点是:内容主体不變,只是參數變化,對用戶来说可能用途不大,對搜尋引擎来说更是噪音。

收敛低價值Faceted URL的操作方式

用noindex避免索引堆积

對于這些低價值篩選頁,最直接的办法是在响應头或HTML中輸出。這样蜘蛛可以繼續沿着連結發現更深的商品頁,但不會再把目前頁面放進索引库。需要注意的是,noindex並不等于不抓取,蜘蛛仍然可能訪問這些URL,所以還需要同时控制入口。

用canonical把權重還给主版本

如果某個Faceted组合頁内容质量還不错,想保留搜尋效果,但又不想让它和主目錄頁重复,可以在该頁面添加。比如一個“红颜色+运動鞋”的篩選结果,canonical可以指向對應的运動鞋分類頁。這样等于告诉蜘蛛:你顺着這個連結進来,但要把它视為分類頁的一部分,而不是一個獨立的候選頁面。

robots參數規則與抓取路径規划

在站点没有恶意使用參數的前提下,针對检索量大的普通Faceted站点,也可以考虑在robots.txt中Disallow掉含某些參數的URL,比如價格区間、排序方式等。但需要谨慎,因為如果Disallow了必要的篩選參數(比如商品ID),會導致整個站点無法被抓取。更稳妥的做法是使用搜尋引擎平台提供的“URL參數”設定工具,告诉搜尋引擎哪些參數改變頁面内容,哪些只做跟踪。不過這個工具主要依赖搜尋引擎自觉,所以站点本身的連結结构也要配合。

這里有一個容易忽视的细节:robots.txt的Disallow只禁止抓取,不禁止索引,而且如果站点存在大量外部連結指向被Disallow的URL,蜘蛛仍可能間接發現它們。因此,noindex、canonical和robots之間應该组合使用,而不是只依赖其中一個。

借助蜘蛛池驗證抓取路径是否收敛

做完調整後,需要知道蜘蛛實际還會不會在Faceted路径上游荡。你可以维護一個简易的蜘蛛池,用预先錄制的UA和IP段去模拟蜘蛛的抓取行為,重点观察:

  1. 從首頁或一級分類頁出發,沿着連結浏览,记錄所到達的URL列表。
  2. 對照日誌,检查那些带繁多參數的URL是否還频繁出現。
  3. 查看返回狀態碼:noindex頁面是否被訪問,但未被抽取。

如果發現蜘蛛依舊反复抓取無意义參數URL,則要回头检查是否還有未设限制的入口,比如頁脚或侧邊栏不加規避地輸出了所有篩選連結。也可以直接在網頁模板中,给特定篩選連結加上rel="nofollow",切断蜘蛛的传播路径。

最终目的是让蜘蛛用有限的预算,優先完成對核心内容的發現。Faceted導航可以做,但要让它服務于用戶,而不是成為内容索引的负担。