做收录核对时经常碰到一种情况:某个页面看起来已经被收录,但站内明明只有一个页面,索引里却能对应出好几个 URL。多数时候不是内容出了问题,而是同一个页面在对外暴露时用了不止一种地址写法。
同一个页面为什么会有多个地址
搜索引擎是按 URL 分别抓取、分别入库的。只要地址字符串不同,系统就会先把它们当作可能不同的页面来处理,之后才谈得上判断内容是否重复、要不要合并。URL 归一要做的,就是把指向同一份内容的多种写法,收敛到一个主地址上。
常见的几类等价变体
主机与协议层面
- http 与 https 并存,页面两边都能打开;
- 带 www 与不带 www 的域名指向同一套内容;
- 主域、备用域、旧域名同时可访问;
- 默认端口是否显式写出,例如 :80、:443。
路径与参数层面
- 结尾斜杠:/page 与 /page/;
- 目录默认文件:/a/ 与 /a/index.html、/a/index.php;
- 路径大小写:/Page 与 /page,服务器区分大小写时这是两个真实地址;
- 参数顺序与冗余参数:?a=1&b=2 与 ?b=2&a=1,以及 utm 等跟踪参数;
- URL 编码差异:中文路径全编码与部分编码、空格的 %20 与加号。
先做一轮 URL 盘点
- 从服务器访问日志或抓取记录里,按“路径 + 参数”把同一份内容的不同写法归成一组;
- 对每组标注三件事:站内链接用的是哪种写法、sitemap 里放的是哪种、索引里出现的是哪种;
- 选一个主地址。优先选站内已经广泛引用、外链较多、语义清晰的写法,而不是凭个人偏好重选;
- 把剩下的变体分类:哪些靠 301 跳转、哪些只需要改内链、哪些留在 canonical 里声明。
主地址定下来之后怎么收敛
- 301 跳转:等价变体统一跳到主地址,避免长期用 302 顶替,跳转方向要一步到位,不要串成多级;
- canonical 声明:页面内写的主地址要和 301 指向同一个,两者方向互相打架时先修一致;
- 内链统一:导航、面包屑、分页、正文链接、分享按钮都改成主地址,站内信号不一致,收敛会很慢;
- sitemap 只放主地址:把等价变体一并提交,等于主动扩大分散;
- 参数类变体:跟踪参数优先从内链上清掉,剩下的再靠页面声明处理。
核对时容易踩的几个坑
- 只看总量数字,不看具体 URL 分布。归一的成效体现在“同一份内容对应的地址数变少”,而不是某天突然多出多少条;
- 把有独立价值的页面误当成变体合并。判断等价前先确认内容主体是否真的相同;
- 假设路径大小写不敏感。很多服务器上是敏感的,/Page 和 /page 是两个地址;
- 指望用 robots.txt 收敛地址。屏蔽抓取和地址归一是两件事,屏蔽反而可能让变体停留在索引里。
归一不是删页面,而是让同一份内容只用一个地址被引用、被抓取。
处理完站内信号后,索引里的变化通常需要一段时间才显现。核对时可以分两步:先确认 301、canonical、内链、sitemap 是否已经指向同一个主地址,再观察变体地址是否逐步减少。如果发现某个变体长期不消失,先回头看它的入站链接和跳转链,而不是反复重复提交。