对一个页面来说,蜘蛛看到的往往不是"一个地址",而是"若干条通往它的路"。导航里有它,面包屑里有它,相关推荐里有它,标签聚合页里还有它。站内链接写得越丰富,同一个 URL 被指向的次数就越多。
这本身不是坏事,问题在于很多人默认蜘蛛会自己挑一条最短路径,然后就按这条路径来安排抓取。实际情况并非如此。
多条入口路径是怎么形成的
常见的来源大致有这几类:
- 全局导航与页脚链接
- 面包屑和栏目层级的上一级/下一级
- 正文里的相关推荐、热门文章、猜你喜欢
- 标签页、归档页、专题页
- 列表页翻页
- Sitemap 与站内搜索页
- 外部站点导入的链接
每增加一处入口,就多一条蜘蛛可以排队走的路线。入口越多,发现越快,但队列里的重复项也越多。
蜘蛛面对多条路径时的实际行为
蜘蛛不会像人一样先比较哪条路更好再出发,它更接近"按发现顺序逐个入队":在导航里遇到就入队一次,在相关推荐里遇到又入队一次。如果地址完全一致,去重发生在 URL 归一化这一步;但如果路径不同,比如一个是栏目页直连、一个是经过标签页两次跳转,蜘蛛会先按遇到的顺序把链接走一遍。
写 canonical 不会让蜘蛛跳过那条链接,它减少的是后续索引与抓取优先级上的分歧,而不是这一次的抓取动作。
所以你会看到一种典型现象:一批内容页的抓取量看起来很高,但真正的新页面发现速度并不快,因为预算被大量重复路径消耗掉了。
重复路径的三个成本
- 抓取预算被切碎。同一批 URL 反复被抓,留给新 URL 的额度就少了。
- 链接信号被打散。同一个目标被几十处链接指向,锚文本各不相同,蜘蛛对"这个页面到底讲什么"的判断会更模糊。
- 日志难读。排查问题时,同一页面的请求散落在多个 referer 下,不容易看出哪条路径才是真实的进入方式。
把主路径定下来:路径收敛的几种做法
1. 导航和面包屑只保留一条主干
栏目页、详情页在导航结构里应该层级清晰,面包屑严格对应目录结构,不要在面包屑里塞入标签、活动页之类的临时入口。主干稳定,蜘蛛对站点结构的判断就稳定。
2. 列表、标签与推荐位按需收敛
相关推荐不是越多越好。同一篇文章在不同标签页、不同专题里被反复链接,其实是在制造重复路径。可以限制推荐位数量,或者让标签页只在特定条件下输出链接,而不是全站无差别铺开。
3. Sitemap 只报主路径
Sitemap 的作用是发现,不是把所有可能的入口都列一遍。把带参数、带跟踪字段、带排序过滤的地址放进去,只会让蜘蛛多走一遍无效路径。Sitemap 里的 URL 应当和站内主路径保持一致。
4. 参数页与分页的处理
筛选、排序、会话跟踪这类参数,能规范就规范,不能规范就用 robots 规则或 canonical 收口。分页要保证上一页/下一页有真实链接,但归档层不必层层嵌套到很深的目录。
怎么验证收敛是否生效
- 按 referer 分组看日志,观察同一批 URL 的主要进入路径是不是收敛到了少数几条。
- 看同一 URL 的抓取频次是否下降,而新 URL 的发现速度是否上升。
- 检查服务端返回与前端渲染是否一致,避免蜘蛛走的是另一套内容。
别走到另一个极端
路径收敛不等于砍内链。目标是让重要页面既有若干条健康入口,又有一条清晰的主路径可循。如果为了减少重复抓取,把内链删得只剩导航,孤岛页面反而会变多。
更实际的做法是:先确认哪些页面真正需要被快速发现,再决定哪些入口保留、哪些收口。抓取路径的管理,本质上是在分配站点的注意力。