搜索抓取

同一页面被多条路径指向:蜘蛛的重复抓取与路径收敛

很多站点的抓取问题不是页面太少,而是同一个页面被导航、面包屑、相关推荐、标签页、Sitemap 等多条路径反复指向。蜘蛛会逐条走完这些路径,抓取预算被分摊,链接信号也被打散。这篇文章讲清多路径是怎么形成的、蜘蛛实际会怎么做,以及如何在不砍掉内链的前提下把主路径收敛下来。

搜索抓取

同一页面被多条路径指向:蜘蛛的重复抓取与路径收敛

对一个页面来说,蜘蛛看到的往往不是"一个地址",而是"若干条通往它的路"。导航里有它,面包屑里有它,相关推荐里有它,标签聚合页里还有它。站内链接写得越丰富,同一个 URL 被指向的次数就越多。

这本身不是坏事,问题在于很多人默认蜘蛛会自己挑一条最短路径,然后就按这条路径来安排抓取。实际情况并非如此。

多条入口路径是怎么形成的

常见的来源大致有这几类:

  • 全局导航与页脚链接
  • 面包屑和栏目层级的上一级/下一级
  • 正文里的相关推荐、热门文章、猜你喜欢
  • 标签页、归档页、专题页
  • 列表页翻页
  • Sitemap 与站内搜索页
  • 外部站点导入的链接

每增加一处入口,就多一条蜘蛛可以排队走的路线。入口越多,发现越快,但队列里的重复项也越多。

蜘蛛面对多条路径时的实际行为

蜘蛛不会像人一样先比较哪条路更好再出发,它更接近"按发现顺序逐个入队":在导航里遇到就入队一次,在相关推荐里遇到又入队一次。如果地址完全一致,去重发生在 URL 归一化这一步;但如果路径不同,比如一个是栏目页直连、一个是经过标签页两次跳转,蜘蛛会先按遇到的顺序把链接走一遍。

写 canonical 不会让蜘蛛跳过那条链接,它减少的是后续索引与抓取优先级上的分歧,而不是这一次的抓取动作。

所以你会看到一种典型现象:一批内容页的抓取量看起来很高,但真正的新页面发现速度并不快,因为预算被大量重复路径消耗掉了。

重复路径的三个成本

  • 抓取预算被切碎。同一批 URL 反复被抓,留给新 URL 的额度就少了。
  • 链接信号被打散。同一个目标被几十处链接指向,锚文本各不相同,蜘蛛对"这个页面到底讲什么"的判断会更模糊。
  • 日志难读。排查问题时,同一页面的请求散落在多个 referer 下,不容易看出哪条路径才是真实的进入方式。

把主路径定下来:路径收敛的几种做法

1. 导航和面包屑只保留一条主干

栏目页、详情页在导航结构里应该层级清晰,面包屑严格对应目录结构,不要在面包屑里塞入标签、活动页之类的临时入口。主干稳定,蜘蛛对站点结构的判断就稳定。

2. 列表、标签与推荐位按需收敛

相关推荐不是越多越好。同一篇文章在不同标签页、不同专题里被反复链接,其实是在制造重复路径。可以限制推荐位数量,或者让标签页只在特定条件下输出链接,而不是全站无差别铺开。

3. Sitemap 只报主路径

Sitemap 的作用是发现,不是把所有可能的入口都列一遍。把带参数、带跟踪字段、带排序过滤的地址放进去,只会让蜘蛛多走一遍无效路径。Sitemap 里的 URL 应当和站内主路径保持一致。

4. 参数页与分页的处理

筛选、排序、会话跟踪这类参数,能规范就规范,不能规范就用 robots 规则或 canonical 收口。分页要保证上一页/下一页有真实链接,但归档层不必层层嵌套到很深的目录。

怎么验证收敛是否生效

  1. 按 referer 分组看日志,观察同一批 URL 的主要进入路径是不是收敛到了少数几条。
  2. 看同一 URL 的抓取频次是否下降,而新 URL 的发现速度是否上升。
  3. 检查服务端返回与前端渲染是否一致,避免蜘蛛走的是另一套内容。

别走到另一个极端

路径收敛不等于砍内链。目标是让重要页面既有若干条健康入口,又有一条清晰的主路径可循。如果为了减少重复抓取,把内链删得只剩导航,孤岛页面反而会变多。

更实际的做法是:先确认哪些页面真正需要被快速发现,再决定哪些入口保留、哪些收口。抓取路径的管理,本质上是在分配站点的注意力。