不少站点在收录上遇到的麻烦,并不是页面质量或内容本身,而是同一个页面同时存在多个主机名可访问。蜘蛛抓到的是哪一个、外链指向的是哪一个、内部链接又链到哪一个,一旦不统一,就会出现同一份内容被拆成好几份的情况。
先列清楚站点一共有几种可达地址
以 example.com 为例,常见的组合有四种:
- http://example.com
- http://www.example.com
- https://example.com
- https://www.example.com
如果服务器对这四个地址都返回 200,那就等于把一份内容摊成了四份。即使看上去是同一套页面,对搜索引擎来说它们也是不同的地址。
主机名不统一会带来什么
- 抓取被分散:蜘蛛在多个主机名之间来回爬,日志里能看到重复抓取相同内容。
- 信号被拆分:同一页面的外链、内链分别指向不同主机名,页面获得的信号被摊薄。
- 规范化变难:canonical 写了 https,可实际返回的是 http,或者反过来,容易造成冲突。
- 统计口径混乱:站点查询和索引报告里的数字对不上,难以判断收录是否真的出了问题。
规范化的顺序
比较稳妥的做法是先定一个唯一的主机名,再把其他所有形式 301 过去。顺序大致如下:
- 确定最终的协议和主机名,通常是 https 加一个固定前缀,带 www 或不带,二选一即可。
- 把 http 全部 301 到 https,把另一种前缀 301 到选定前缀,注意避免链式跳转,尽量一步到位。
- 页面内的 canonical、sitemap、内链、外链,全部改成最终地址。
- 旧地址的 301 保持长期有效,不要图省事改回 200,也不要直接 404。
301 和 canonical 的分工
301 处理的是地址层面的跳转,蜘蛛访问旧地址时会直接被送到新地址;canonical 处理的是页面层面的声明,用于说明“如果这些地址都被访问到了,以哪个为准”。两者不冲突,但能靠 301 解决的问题,尽量不要只靠 canonical 兜着。
相对链接是个隐蔽的坑
如果页面通过 http 访问,页面里的相对链接、图片地址也会被解析成 http。这时候就算 canonical 写了 https,蜘蛛从页面里发现的仍然是 http 版本,等于每次抓取都在制造新的重复入口。切换协议之后,把内部链接统一检查一遍。
几个容易被忽略的地方
- 证书:https 站点的证书要覆盖所有用到的主机名,否则会出现访问告警,蜘蛛也可能抓取失败。
- 混合内容:https 页面里引用了 http 资源,浏览器会提示不安全,尽量全部替换。
- CDN 与回源:缓存规则、回源协议如果和源站不一致,可能让某些旧主机名意外继续可访问。
- HSTS:开启后浏览器会强制走 https,但这不能代替 301,蜘蛛的行为并不完全等同于浏览器。
- 多语言、多地区站点:如果按子域划分,注意每个子域本身的主机名也要统一,别在规范化上再叠一层问题。
怎么确认已经处理干净
- 用不带跳转的方式访问各个旧地址,确认返回 301,且最终落到同一个地址。
- 抽查服务器日志,看蜘蛛近期访问的是哪个主机名,是否还有旧地址在被反复抓取。
- 在站点查询和索引报告里分别看两个前缀的数量,确认旧前缀在逐步减少。
- 检查页面源码里的 canonical、内链和 sitemap,是否已经全部换成新地址。
主机名规范化本身不复杂,难的是坚持:只要有一个入口没改,蜘蛛就会沿着它继续发现旧版本。