网站收录

http 与 https、www 与裸域:主机名层面的规范化与收录处理

同一份内容通过 http、https、带 www 和不带 www 四种地址都能打开,是收录问题里很常见的一类来源。本文说明主机名不统一会怎样分散抓取与页面信号,并按顺序给出 301、canonical、内链与 sitemap 的处理方法,以及事后的检查方式。

网站收录

http 与 https、www 与裸域:主机名层面的规范化与收录处理

不少站点在收录上遇到的麻烦,并不是页面质量或内容本身,而是同一个页面同时存在多个主机名可访问。蜘蛛抓到的是哪一个、外链指向的是哪一个、内部链接又链到哪一个,一旦不统一,就会出现同一份内容被拆成好几份的情况。

先列清楚站点一共有几种可达地址

以 example.com 为例,常见的组合有四种:

  • http://example.com
  • http://www.example.com
  • https://example.com
  • https://www.example.com

如果服务器对这四个地址都返回 200,那就等于把一份内容摊成了四份。即使看上去是同一套页面,对搜索引擎来说它们也是不同的地址。

主机名不统一会带来什么

  • 抓取被分散:蜘蛛在多个主机名之间来回爬,日志里能看到重复抓取相同内容。
  • 信号被拆分:同一页面的外链、内链分别指向不同主机名,页面获得的信号被摊薄。
  • 规范化变难:canonical 写了 https,可实际返回的是 http,或者反过来,容易造成冲突。
  • 统计口径混乱:站点查询和索引报告里的数字对不上,难以判断收录是否真的出了问题。

规范化的顺序

比较稳妥的做法是先定一个唯一的主机名,再把其他所有形式 301 过去。顺序大致如下:

  1. 确定最终的协议和主机名,通常是 https 加一个固定前缀,带 www 或不带,二选一即可。
  2. 把 http 全部 301 到 https,把另一种前缀 301 到选定前缀,注意避免链式跳转,尽量一步到位。
  3. 页面内的 canonical、sitemap、内链、外链,全部改成最终地址。
  4. 旧地址的 301 保持长期有效,不要图省事改回 200,也不要直接 404。

301 和 canonical 的分工

301 处理的是地址层面的跳转,蜘蛛访问旧地址时会直接被送到新地址;canonical 处理的是页面层面的声明,用于说明“如果这些地址都被访问到了,以哪个为准”。两者不冲突,但能靠 301 解决的问题,尽量不要只靠 canonical 兜着。

相对链接是个隐蔽的坑

如果页面通过 http 访问,页面里的相对链接、图片地址也会被解析成 http。这时候就算 canonical 写了 https,蜘蛛从页面里发现的仍然是 http 版本,等于每次抓取都在制造新的重复入口。切换协议之后,把内部链接统一检查一遍。

几个容易被忽略的地方

  • 证书:https 站点的证书要覆盖所有用到的主机名,否则会出现访问告警,蜘蛛也可能抓取失败。
  • 混合内容:https 页面里引用了 http 资源,浏览器会提示不安全,尽量全部替换。
  • CDN 与回源:缓存规则、回源协议如果和源站不一致,可能让某些旧主机名意外继续可访问。
  • HSTS:开启后浏览器会强制走 https,但这不能代替 301,蜘蛛的行为并不完全等同于浏览器。
  • 多语言、多地区站点:如果按子域划分,注意每个子域本身的主机名也要统一,别在规范化上再叠一层问题。

怎么确认已经处理干净

  • 用不带跳转的方式访问各个旧地址,确认返回 301,且最终落到同一个地址。
  • 抽查服务器日志,看蜘蛛近期访问的是哪个主机名,是否还有旧地址在被反复抓取。
  • 在站点查询和索引报告里分别看两个前缀的数量,确认旧前缀在逐步减少。
  • 检查页面源码里的 canonical、内链和 sitemap,是否已经全部换成新地址。
主机名规范化本身不复杂,难的是坚持:只要有一个入口没改,蜘蛛就会沿着它继续发现旧版本。