搜索抓取

搜索蜘蛛的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导航可以做,但要让它服务于用户,而不是成为内容索引的负担。