正式域名下的文章页,源代码里 canonical 写的是 https://staging.example.com/post/123,搜索后台把正式地址当成副本,收录数从 420 掉到 90。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

define("WP_HOME", "https://www.example.com");
define("WP_SITEURL", "https://www.example.com");
curl -s https://www.example.com/post/123 | grep -o "canonical[^>]*"

预发布环境复制了生产库,站点地址常量没有改,模板读到的还是 staging,canonical 跟着一起输出。上线时只换了数据库连接,没动这处配置。这一点先确认清楚,后面就不用反复试。

「canonical 预发布域名」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,把生产环境的 home 和 siteurl 常量写进配置文件,不要依赖数据库里的旧值;模板里用 home_url 拼 canonical,禁止硬编码域名;上线前用 curl 抓一遍头部,逐页确认 canonical 的主机名;重新提交地址后观察索引覆盖的变化。

改完照着核一遍,每篇文章的 canonical 与地址栏的主机名完全一致,搜索后台不再把正式页判为重复。

作者 9823189