先看现象。站点迁到新域名后,404 模板没换,页面里的 canonical 和静态资源仍指向旧域名。蜘蛛抓到死链后跟着 canonical 回到旧站,新站的 404 反而把权重送了出去。

排查方向其实有限,先把可能性排一排。404 模板里的域名是硬编码的旧地址。也可能是静态资源路径写成绝对地址,没有走当前 Host。

少数情况下是旧域名仍在解析,canonical 指向后还能打开。

不容易想到的是,CDN 缓存了旧模板渲染的 404 页面。

先看 404 页输出的 canonical

curl -s https://www.example.com/not-exist | grep -o 'rel="canonical"[^>]*'

模板改用当前站点地址

<link rel="canonical" href="<?php echo home_url('/'); ?>">

旧域名统一 301 到新域

return 301 https://www.example.com$request_uri;

末了清掉边缘缓存的 404 页

curl -X PURGE https://www.example.com/not-exist

中途换过一次思路,把范围缩到最小的那一层,反而快了。

改完先别撤,确认这几项。404 页的 canonical 指向新域名,旧域名请求全部 301,死链不再把权重带回旧站。

提醒一点。迁移时最容易漏的是错误页和静态资源,它们同样输出域名,同样会被蜘蛛读走。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189