现场是这样的。站点早期做过 AMP,后来只保留标准页,amphtml 链接忘了删。canonical 指向标准页,amphtml 指向已经 404 的 amp 地址,GSC 里标准页被标成重复。

中间走过弯路,把「sitemap 里还留着 amp 条目」当成主因,改完现象没变。

原因不止一个,得分开看。amphtml 残留指向已删除的地址;canonical 与 amphtml 给出互相矛盾的信号;CDN 缓存了旧 head,模板删了仍输出。

上来先看 head 里的两个标签

curl -s https://www.example.com/post/1 | grep -i -E 'canonical|amphtml'

接着确认 amp 地址的状态

curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/amp/post/1

摘掉 amphtml 输出并清缓存

curl -X PURGE https://www.example.com/post/1

等前面都确认过,再重

新

报错是间歇性的,我蹲守了半小时才抓到一次完整现场。

白天有业务在跑,能验证的部分都压到了晚上做。

当时还开着另一个排查窗口,两边日志对照着看才定位到。

恢复的判定其实很直接。清掉残留声明后标准页不再被判重复,索引在两周内恢复,sitemap 里的 amp 条目也一并消失。

容易忽略的是,下线 AMP 时先摘 amphtml 再删模板,顺序反了会留下一串指向 404 的声明。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189