现场是这样的。站点早期做过 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 的声明。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
