服务器上明明只有一份内容,蜘蛛看到的却可能是好几个 URL:带大写字母的、结尾多一个斜杠的、挂着默认参数的。这些变体一旦同时出现在内链、导航或 Sitemap 里,抓取请求就会被拆散。日志里看着抓取量不低,实际被完整覆盖的页面却没增加多少。
一、重复入口通常从哪来
1. 大小写混用
在区分大小写的服务器环境下,/Article/1001 与 /article/1001 是两个不同路径,可能返回两份内容,也可能一个正常一个 404。链接由编辑手工填写、后台自动拼接、旧版程序生成时,很容易混用。
2. 末尾斜杠差异
栏目页常写成 /news,详情页写成 /news/2024/,模板里再补一个斜杠,就出现了带与不带两种形式。如果服务器对两者都返回 200,重复入口就固定下来了。
3. 默认参数与排序参数
列表页的 ?page=1、?sort=default、?from=nav 这类参数,对用户没有实际差别,却会生成一批独立 URL。分页、筛选、来源标记叠加后,同一个列表可以派生出几十个地址。
4. 主机名与协议
http 与 https、带 www 与不带 www、绑定的备用域名,如果没有统一跳转,都会各自被当成入口。这类问题在换域名或上 CDN 之后尤其容易出现。
二、怎么把变体找出来
- 把抓取日志按路径聚合,统计含大写字母、结尾斜杠、带 query 的请求各占多少,哪些路径同时有多种写法;
- 把 Sitemap 中的 URL 与内链、导航、面包屑抽出的 URL 做集合对比,看规范形式是否一致;
- 抽查分页、相关推荐、标签聚合模块的链接生成规则,很多变体是从模板里批量产生的;
- 观察变体是只被抓一次就跳转,还是被反复抓取,后者说明跳转缺失或内链还在指向旧形式。
核对时不必追求绝对完整,先把请求量靠前的变体挑出来处理,收益通常更明显。
三、归并的做法
- 先确定唯一的规范形式,例如全小写、无末尾斜杠、不带无意义参数;
- 旧形式统一用 301 指向规范形式,只跳一次,避免形成跳转链条;
- 内链、导航、分页、面包屑按规范形式生成,模板改一次比逐条改链接更省事;
- Sitemap 只提交规范形式,不要再把变体混进去;
- 如果页面用了 canonical 标注,结论要与跳转方向一致,不要一边跳向 A 一边声明 B。
对于确实有独立价值的参数(例如不同的筛选结果),可以保留,但要控制组合数量,避免同一份内容被无限展开。
四、改完之后看什么
上线后重点看三件事:同一路径的请求是否收敛到一种写法;变体请求是否以 301 为主而不是 200;抓取总量里,重复命中的比例是否下降、新路径的发现是否变多。如果变体仍在被大量抓取,通常是内链或 Sitemap 里还有残留入口没有清理。
归并属于大范围改动,建议按栏目分批上线,每批观察几天日志再继续,避免一次性改完难以判断问题出在哪一步。
URL 形式统一不会直接带来排名变化,但它能让有限的服务端资源与抓取请求集中在真正需要被发现的页面上,这本身就是抓取效率的一部分。