英文站、德文站使用不同域名,但所有商品页 canonical 都指向英文主站。这样可能让搜索引擎把其他语言页面当成重复内容。修复不能简单把当前 URL 原样塞进 canonical,因为参数、分类路径和分页也需要统一策略。

先定义每类页面的唯一地址

商品页是否包含分类路径?同一商品在多个分类下是否统一到无分类路径?分页、排序、筛选参数是否应该 canonical 到自身、第一页或上级分类?先把规则写清楚,再看代码。没有策略时,技术修改只会从一个错误变成另一个错误。

检查 Store View 的 Base URL 与产品分配

分别在每个 Store Scope 读取 secure Base URL,确认域名、路径和尾斜杠。商品必须真正分配到对应 Website,并有该 Store 的启用状态和 URL Key。若德文站只是前端代理英文 Store,Magento 自然生成英文上下文。

查看最终 HTML head 中所有 canonical 和 hreflang。主题、核心功能和第三方 SEO 模块可能同时输出标签,出现两个 canonical 比没有更糟。搜索源码时不仅找 rel=canonical,也要检查 layout block 与 head additional。

hreflang 不是 canonical 的替代品

不同语言页面通常各自 self-canonical,再用 hreflang 相互关联。每个 hreflang 目标应返回 200,并最好形成互相引用;不存在翻译时,不要凭 URL 规则生成一个 404。x-default 是否使用,取决于站点的语言选择策略。

缓存上下文容易造成串域

自定义 canonical block 如果 cache key 不包含 Store ID,首次由英文站缓存后,德文站也可能拿到英文域名。Varnish/CDN host key 配置错误也会造成跨域缓存。用不同 Host 连续交叉请求,检查响应 Age 和标签是否跟随 Store。

验收选商品、分类、CMS、分页和带筛选参数页面,在每个域名检查唯一 canonical、hreflang 互链、状态码和最终跳转。再用站点爬虫生成矩阵,避免只手工检查首页。SEO 标签看似一行 HTML,背后其实是完整的多商店 URL 模型。