语言重定向与 SEO:URL、cookie 还是 Accept-Language?
凡是希望被搜索引擎收录的页面,都应由 URL 决定其语言,因为 Googlebot 不会发送 Accept-Language 请求头,而且大多从美国 IP 地址抓取。只有在决定 / 这类中性根路径重定向到哪里时,才应优先参考 cookie 中保存的用户选择,其次是 Accept-Language,并使用临时的 302 或 307 重定向。
Kevin Wu, Jackie Chen
Jackie is a software engineer at General Translation.
He studied Computer Science at Princeton University and worked at Meta before realizing that the real metaverse was the friends he made along the way.
He’s intermediate in Russian and fluent in Chinese. He's also the guardian of the office snack drawer.
显示 6 条,共 47 条
凡是希望被搜索引擎收录的页面,都应由 URL 决定其语言,因为 Googlebot 不会发送 Accept-Language 请求头,而且大多从美国 IP 地址抓取。只有在决定 / 这类中性根路径重定向到哪里时,才应优先参考 cookie 中保存的用户选择,其次是 Accept-Language,并使用临时的 302 或 307 重定向。
用每种语言的本语名称来标注它,例如 Deutsch 或 日本語,不要使用国旗,因为国旗代表的是国家。每个选项都应通过可抓取的链接指向该语言版本的同一页面,用 cookie 记住用户的选择,并且切勿对已本地化的 URL 自动重定向。
应按文本出现的位置及其含义来命名键,例如 checkout.summary.title,而不是照搬英文措辞。即使英文相同,不同用途也应各用一个键:德语会把按钮上的 Open 译为 Öffnen,而把状态 Open 译为 Offen。
先确定译文放在哪里:代理、CMS 插件、建站工具,还是你自己的代码;然后按照 Google 的建议,为每种语言分配独立的 URL。完整翻译页面以及标题和元描述,用 hreflang 关联各语言版本,并提供语言切换器,而不是自动重定向访问者。
只翻译 JSON 区域设置文件中的字符串值。非复数键、{{name}} 之类的占位符以及标签都应保持不变,但复数键会因语言而异:例如波兰语需要 inbox_few 和 inbox_many。请使用能识别文件格式的工具或 API,然后先解析并验证输出,再进行审校。
读取浏览器提供的有序语言列表(在 JavaScript 中为 navigator.languages,在服务器端为 Accept-Language 标头),按 q 值排序,再与你支持的语言区域进行匹配,并设置后备语言区域。Safari 和 Chrome 无痕模式只会报告一种语言,而 IP 地理定位只能反映用户所在位置,无法反映其使用的语言。