英文站、中文站页面内容和域名都不同,但查看源代码,canonical全部指向主站。先判断canonical来自Magento核心产品或分类配置、SEO扩展还是主题模板;多个来源同时输出时还会出现两条canonical。
从HTML反查生成者
grep -R "rel=.canonical\|addRemotePageAsset\|canonical_url" app/code app/design vendor -n
浏览器Elements里看到的标签可能被JS后插入,SEO审计要以服务器返回的HTML为准。用curl分别请求两个域名并比较:
curl -s https://en.example.com/product.html | grep -i canonical curl -s https://cn.example.com/product.html | grep -i canonical
核对每个Scope的Base URL
bin/magento config:show web/secure/base_url --scope=stores --scope-code=en_store bin/magento config:show web/secure/base_url --scope=stores --scope-code=cn_store
在后台切到具体Website或Store View保存,不要只改Default Config。确认Nginx按Host设置正确的MAGE_RUN_CODE与MAGE_RUN_TYPE。
自定义代码常犯的错
Cron或Block里用默认StoreManager获取Base URL,或做store emulation后没有在finally中stopEnvironmentEmulation,后续请求就可能沿用错误Store。生成canonical时使用当前页面的Store与URL Rewrite,不要硬编码主域名。
缓存层也必须按域名隔离
检查Varnish hash包含Host,CDN缓存键也要区分Host与必要的Store cookie。若两个域共用缓存键,先访问主站的人会把带主域canonical的HTML缓存给其他站。清理修复前缓存并逐域预热。
验收不只看首页
- 两个Store的同一商品;
- 分类分页和筛选参数;
- 带URL rewrite的旧地址;
- 缺少翻译而回退默认内容的页面;
- sitemap中的URL与canonical一致;
- 页面只存在一条canonical。
若使用hreflang,同时确认每个alternate URL能返回200并自指正确canonical,避免搜索引擎收到互相矛盾的信号。

