同一个页面,如果可以通过几种不同的 URL 打开,搜索引擎很可能把它们当成几个不同的地址分别处理。这不会立刻引发故障,但时间一长,索引里同一份内容占掉多条位置,外链权重被摊薄,抓取配额也花在了重复地址上。URL 规范化的目标很简单:让每个页面只有一个稳定、唯一的地址,其余写法都用跳转收口。
常见的几类 URL 变体
- 协议与主机名:http 与 https、带 www 与不带 www,甚至测试域名也能打开同一套内容。
- 大小写:/About 与 /about 在部分服务器配置下是两个地址。
- 末尾斜杠:/news 与 /news/ 指向同一页,却各自被访问、被引用。
- 默认文件名:/news/ 与 /news/index.html 并存。
- 参数顺序:?a=1&b=2 与 ?b=2&a=1 内容一致,地址不同。
- 追踪与来源参数:utm_source、from、ref 这类参数被完整写进链接。
- 编码写法:中文路径、空格、%20 的编码方式前后不统一。
- 锚点片段:带 #section 的链接被当成新地址提交或引用。
这些变体往往不是一次产生的,而是随功能迭代、栏目搬迁、外链投放慢慢积累出来的。所以在核对之前,先接受一个前提:站点里已经存在多少种写法,靠肉眼扫首页是看不全的。
为什么值得单独处理
收录分散的直接后果不是“收录变多”,而是报表失真。索引量看着涨了,实际可用的页面并没有增加;同一条内链在不同入口指向不同版本,权重被拆成几份;爬虫反复抓取同一份内容的不同写法,留给新页面的抓取机会就变少。对用户来说,收藏、分享出去的地址也可能落到非主域版本上,跳转层级一多,体验也随之打折。
收口的顺序
- 先定主版本:确定唯一的协议、主机名和端口,例如全站统一到 https 加主域名。这一步是后面所有动作的基准,定下来之前不要急着改链接。
- 用 301 收口:把其余版本(http、非 www、旧域名、带默认文件名)永久跳转到主版本。优先做一步到位的跳转,避免 A 跳 B、B 再跳 C 的链条。
- 站内链接统一写法:导航、面包屑、正文内链、栏目列表都按主版本输出。站内链接是最稳定的信号来源,它一致了,许多变体会自然减少被发现的次数。
- sitemap 与 canonical 对齐:站点地图里只放主版本地址;canonical 指向的地址必须能正常打开,并且和 301 的落点一致,不要出现 canonical 指 A、跳转落 B 的冲突。
- 处理参数:追踪参数在服务端或前端拼链接时尽量去掉;确有必要的筛选参数,按页型决定是放行还是挡在索引之外。
- 统一大小写与斜杠规则:明确全小写、目录带斜杠、文件不带斜杠之类的规则,并在服务端做兜底跳转。
容易忽略的细节
旧变体在跳转上线后不会立刻从索引里消失,需要一段时间自然更替,期间不要反复改动跳转目标。外链是最难控制的部分,投放前先核对落地地址,事后如果发现大量外链指向非主版本,可以考虑联系对方更新,或者靠 301 承接,不必追求一次性清零。
另一个常见问题是测试域名和预发环境对外可访问。它们能被打开,就可能被抓到。给这类环境加访问限制,比事后处理索引里的重复地址省事得多。
收口之后看什么
- 抽查:用站点查询或站内搜索,看看同一内容是否还以多种写法出现。
- 站长平台:按 URL 前缀筛选,观察非主版本的地址数量是否在减少。
- 抓取日志:看请求命中的主机名与路径写法,主版本占比是否上升。
- 内链:随机抽几十条站内链接,确认写法与主版本一致。
URL 规范不是一次性项目,而是每次上线新功能、新栏目时顺手核一遍的习惯。发现一处不一致就顺手改掉,比攒到几百条再统一处理要轻松得多。