同一个页面,因为协议、域名前缀、大小写、尾斜杠、默认端口、入口文件名的不同写法,可能在服务器上对应出好几个都能返回 200 的地址。这些地址各自被抓取,也各自进入判断流程,索引里就可能出现重复条目。
先分清抓取与收录在这件事上的区别
URL 变体被抓取,只能说明蜘蛛拿到了这份 HTML;能不能进入索引,还要看该变体是否符合收录条件。抓取量上涨不等于收录量上涨,当同一份内容以多个地址被反复抓取时,抓取预算被摊薄,真正需要被收录的规范版本反而可能更新变慢。
变体通常从这几处冒出来
- 协议:http 与 https 并存,站内链接没有全部替换。
- 主机名:带 www 与不带 www 各自可访问。
- 路径大小写:/About 与 /about 在大小写敏感的服务器上是两个地址。
- 尾斜杠:/list 与 /list/ 都被返回 200。
- 默认端口与入口文件::80、:443、/index.html 被显式写进链接。
- 反向代理与 CDN:回源域名、临时域名被外部链接引用。
核对顺序
- 先确认索引里到底有几个变体。用 site 查询与索引报表按主机名、协议分别统计,不要只看总量。
- 再测服务器的跳转行为。对每个非规范变体发起请求,看它是 301 到唯一版本,还是直接返回 200。返回 200 的变体越多,需要收敛的工作量越大。
- 检查站内链接与模板。导航、面包屑、分页、结构化数据里的 URL 是否统一使用规范版本。模板一处混用,就会在全站铺开。
- 检查 sitemap 与 canonical。sitemap 里只应出现规范 URL;canonical 指向应与 301 目标一致,两者指向不同版本时,蜘蛛会拿到矛盾的信号。
- 回看日志中的命中口径。按主机名统计抓取次数,判断哪个变体在被反复抓取,优先处理高频的那个。
- 确认外部来源。站长后台的外链、合作方投放、旧活动页是否还在引用废弃变体。
处理时的原则
一个页面只保留一个入口 URL,其余变体用 301 永久跳转到它。canonical 是补充说明,不是 301 的替代品:服务器能做的归一,优先在服务器层完成,canonical 留给无法直接跳转的场景。
- 跳转目标应是最终版本,不要串成 http → 带 www → https 的多跳链条。
- 跳转上线后,把站内链接改成直接指向最终版本,减少一次跳转。
- 更新 sitemap 并重新提交,让蜘蛛尽快看到规范地址。
- CDN 与反向代理的缓存需要同步刷新,避免旧跳转规则被缓存住。
几个容易踩的坑
- 只改了首页,内页模板依旧输出旧域名。
- canonical 写着 A 版本,服务器却把 A 301 到 B 版本。
- 大小写不做统一,外链带来的大写地址长期留在索引里。
- 把测试域名直接 301 到正式站,把测试页面的关联一并带过去。
URL 规范化的目标是让判断对象变少、让更新更集中,并不保证某个版本一定被收录。核对时以日志和索引报表的实际数据为准,逐项确认后再动手改。