同一个页面,在服务器上往往能对应好几个地址:带 www 和不带 www、http 和 https、结尾有没有斜杠、字母大小写不同、后面还挂着跟踪参数。对访客来说打开的内容没有区别,但在搜索蜘蛛眼里,每一个地址都是一条独立 URL。抓取预算被这些重复地址分掉,页面之间积累的信号也被摊薄。下面是适合站点运营定期执行的 URL 规范化自查流程。
为什么同一页面会裂成多个地址
大多数重复地址不是有人故意造出来的,而是服务器配置、CMS 默认行为和日常调用习惯叠加的结果。常见的来源有:
- 服务器同时监听 www 与非 www,两个域名都返回 200;
- HTTP 没有强制跳转到 HTTPS,两套协议各有一套地址;
- 首页既可以用根目录访问,也可以用 /index.html 访问;
- 栏目页 /list 与 /list/ 都能打开,且都返回正常状态;
- URL 大小写混用,而服务器对大小写敏感;
- 分页、排序、筛选参数被随手拼接,产生大量近似地址;
- 对外分享时自动附带 utm 等跟踪参数,被外部站点引用后固化下来。
先定唯一规范形式
动手改之前,先把规则写清楚,避免边改边乱:
- 协议固定为 https;
- 主机名固定为带 www 或不带 www 的其中一种;
- 目录类地址固定结尾带斜杠或不带斜杠的其中一种;
- 文件名统一小写,避免大小写变体;
- 参数只保留业务必需的,跟踪参数不进入内链和站点地图。
这份规则最好落在文档里,而不是只存在于某个人的记忆里。改版、换人、上新栏目时都需要它作为对照。
自查动作清单
- 从服务器访问日志或站长工具里抽样,看看同一批内容是否被多个地址反复抓取。
- 用 curl -I 逐个请求各变体,正常对外服务的应该只有一个返回 200,其余应为 301 指向它。
- 查看页面源码里的 canonical,确认它指向自身规范地址,并且与重定向的最终目标保持一致。
- 抽查内链、导航、分页、站点地图和分享按钮生成的地址,是否都已经是规范形式。
- 确认 CMS、框架的自动补斜杠规则与服务器重写规则不冲突,避免出现来回跳转。
几个容易踩的坑
canonical 和重定向互相打架
如果 /a 已经 301 到 /b,但 /a 页面里的 canonical 仍然写着 /a,蜘蛛会收到互相矛盾的信号。改动后要同步更新,而不是只改一半。
用前端脚本做跳转
JS 跳转对蜘蛛的指引不如服务端 301 明确,抓取预算仍然花在了旧地址上。能用服务端处理的,就放在服务端。
只处理首页,不管内层页
列表页、标签页、分页往往才是重复地址的重灾区。规范化要从首页一路查到最深的栏目页。
规范化的目标不是消灭所有地址变体,而是让每个变体都用最明确的方式告诉蜘蛛:真正的地址只有一个。
把它变成日常习惯
一次整理完不等于永久有效。新栏目上线、模板调整、CDN 或跳转规则改动之后,重复地址都可能重新冒出来。建议把 URL 规范化写进上线检查清单,季度性地抽样一轮日志,观察是否有新的变体开始被大量抓取。发现问题就补 301 或修正 canonical,让站点的地址体系长期保持干净。