运营中常遇到这种情况:内容只写过一次,站点却有几个地址都能把它打开。http 和 https 各一份,带 www 和不带 www 各一份,结尾加不加斜杠又能分出两份,URL 里字母大小写再变一下,数量还会继续翻。这些地址如果都能正常访问,又没有被明确分出主次,搜索引擎可能把它们当成不同页面分别抓取,甚至分别放进索引。
先看清站点自己产生了哪些变体
不用急着改,先把变体列出来。常见的几类:
- 协议:http:// 与 https:// 同时能打开同一个页面。多数站点做过跳转,但跳转是否覆盖了所有路径、是否用的 301,需要逐个确认。
- 主机名:example.com 与 www.example.com 各自能打开同样的内容。
- 结尾斜杠:/about 与 /about/ 返回一样的内容,且都是 200 状态。
- 大小写:/News/2024 与 /news/2024 显示相同页面。有的服务器区分大小写,有的会自动转换,行为不统一时更容易出问题。
- 默认文件:/list 与 /list/index.html 都能访问。
- 参数:排序、筛选、追踪参数生成的大量地址。这一类处理方式不同,本文不展开,但排查时要注意它们是否混在里面,导致误判。
为什么值得花时间统一
最直接的影响是判断变难。你在站长工具里看收录量,数字里混着重复地址,就很难判断真实的内容规模,也不清楚哪些目录真的被收录了。内链和外链同时被分散到不同版本上,同一份内容收到的信号被摊薄。
另一个常见问题是 canonical 写歪。比如页面自己声明规范地址是带 www 的版本,而站内大部分链接指向不带 www 的版本,蜘蛛每次抓到的线索互相矛盾,反而更犹豫。canonical 是提示而不是强制指令,它必须和跳转、内链、sitemap 的方向保持一致才有意义。
一致性比单点技巧更重要:跳转、canonical、内链、sitemap、外链,最终指向的应该是同一个地址。
处理顺序
- 确定唯一的规范版本。选一个主机名和一种协议,全站统一,通常建议 https 加一个固定的主机名写法。
- 用 301 把其他版本跳过去。协议、主机名、结尾斜杠、大小写这几类,尽量在服务器层做 301。不要长期用 302 顶着,也不要用 JS 跳转代替。
- 页面 canonical 指向自己所在的规范地址。注意是“自己”,不是随手指向首页或另一个内容相近的页面。
- 内链、导航、面包屑统一使用规范地址。这一步最容易被忽略,模板里残留的一个旧链接,就会持续给蜘蛛送出错误线索。
- sitemap 只放规范地址,不要同时提交多个版本。
- 外链能改的尽量改,改不动的不必强求,靠站内跳转慢慢收敛即可。
要不要用 robots.txt 挡住变体
不建议。被 robots.txt 挡住的地址,蜘蛛看不到内容,也就看不到上面的 canonical 和跳转关系,反而可能因为仍有外链存在而留在索引里,显示成没有摘要的结果。挡住不等于消失,能跳转就跳转。
怎么确认处理生效
处理完之后隔一段时间再查:手动访问不带协议的域名加路径,看是否都跳到同一地址;在站长工具里观察已收录的地址形态是否逐渐收敛;翻日志看蜘蛛是否还在抓旧版本。这个过程通常需要经过几次回访周期,不会立刻反映出来。
站点规模大的话不必一次改完。先处理流量高、被抓取多的目录,再逐步铺开,比一次性大改更容易定位问题,也方便对比改动前后的差异。