网站收录

同一个页面出现多个 URL 版本:先做归一,再谈重复收录

同一份内容被 http 与 https、带 www 与不带 www、尾斜杠、index.html 等写法拆成好几个地址,索引里留下的往往不是你希望的那一版。本文梳理常见的 URL 变体、归一的处理顺序,以及用日志和报告验证归一是否生效的方法。

网站收录

同一个页面出现多个 URL 版本:先做归一,再谈重复收录

在抓取统计或服务器日志里,你可能见过这种情况:同一篇文章对应好几条 URL,参数顺序不同、大小写不同、结尾多一个斜杠,甚至主机名都不一样。这些地址打开后是同一份内容,但在搜索蜘蛛眼里,它们是几个各自独立的 URL。索引里最终挑中哪一版,通常不完全由你决定,所以更稳的做法是在站点层面先把地址归一。

常见的 URL 变体

  • 协议与主机名:http 与 https 并存、带 www 与不带 www、带默认端口与不带端口。
  • 路径写法:结尾加不加斜杠、是否附带 /index.html 或 /index.php、目录名的大小写不同。
  • 参数部分:筛选参数顺序不同、跟踪参数被写进内部链接、会话 ID 直接拼在地址里。
  • 历史遗留:改版前的旧路径仍能访问、CDN 回源地址被页面引用、测试环境域名偶然被放出到公网。

为什么归一比删内容更优先

多个版本同时被抓取,抓取额度被同一份内容摊薄;外链和站内链接分散在几个地址上,页面获得的信号也被摊薄。更麻烦的是,索引里的选择并不固定:今天留下带 www 的那一版,过一段时间可能又换成另一个,统计口径随之变化。

URL 归一是“让同一份内容只对应一个地址”,而重复内容处理是“不同内容之间如何取舍”。前者是后者的前提。

推荐的处理顺序

  1. 选定唯一地址,把协议、主机名、路径写法、参数处理规则写成规范,并落到模板和构建流程里,而不是靠人工逐个改。
  2. 把其它版本 301 到唯一地址,尽量一跳到位,避免 A→B→C 的链式跳转。
  3. 站内链接、导航、分页、面包屑、结构化数据里的地址全部换成唯一版本。
  4. 站点地图只放唯一版本,各种变体不要出现在里面。
  5. canonical 可以作为补充声明,但它替代不了 301:canonical 是提示,服务器跳转是明确指令。
  6. 不要用 robots.txt 去挡变体。挡住抓取后,蜘蛛既看不到跳转也看不到 canonical,这些地址反而可能继续留在索引里。

验证归一是否生效

  • 在日志里按主机名和路径去重统计,观察变体地址的请求占比是否下降。
  • 用命令行工具查看变体地址的响应码和 Location 头,确认是一跳 301,而不是 200 或多跳链路。
  • 用站内查询或搜索控制台的网页报告,看同一份内容对应的地址数量变化。
  • 注意索引更新有滞后,地址替换通常需要数周,不要改完第二天就下结论。

容易踩的坑

  • 以为大小写无关:部分服务器不区分大小写,迁移到区分大小写的环境后,/Page 和 /page 就成了两个地址。
  • 忽略尾斜杠差异:有的框架把 /a 和 /a/ 当作不同资源处理。
  • 同时做了两套归一:301 指向 A,canonical 却指向 B,等于给蜘蛛一个自相矛盾的信号。
  • CDN 或反向代理把回源域名暴露在页面里,凭空多出一批可抓取的地址。

URL 归一属于一次性工程,做完之后再看重复内容、参数页、分页这些话题会清楚很多。先把地址统一,再谈索引里留下哪一版;顺序反过来,往往是事倍功半。