规范标签和语言标签别混用:多语言站最常见的收录事故
规范标签(canonical)用来标记"内容一字不差、网址不同"的页面,比如带不带参数的同一页;语言标签(hreflang)用来标记"同一篇内容的不同语言版本"。人看来翻译后是同一篇,爬虫看的是字符,就是不同的页面。最常见的事故是把所有语言版本的规范标签都指向英文页或首页,结果其他语言版本被当成重复页不收录。正确做法:每个语言页面的规范标签指向它自己,再用语言标签互相声明,加一个默认版本;用子目录做多语言,不自动跳转,只做切换提示;标题、描述这些元标签也要翻译。
两个标签解决的是两件不同的事。
很多多语言站上线后,非英文版本迟迟不被收录,甚至曝光直接归零。查下来十有八九是规范标签(canonical)和语言标签(hreflang)用混了。
先分清:人看的是意思,爬虫看的是字符
一篇文章翻译成中文、英文、西班牙文,在人看来是同一篇内容。但在爬虫看来,"狗"和"Dog"是完全不同的字符,所以这是三个不同的页面。
| 情况 | 用哪个 | 例子 |
|---|---|---|
| 内容一字不差,只是网址不同 | 规范标签 | /zh 和 /zh?from=xxx 打开是同一个页面 |
| 同一篇内容,不同语言版本 | 语言标签 | /en/about 和 /zh/about |
一句话记住:规范标签管"同一页的不同网址",语言标签管"同一篇的不同语言"。
最常见的错误
- 所有语言页的规范标签都指向英文页:等于告诉搜索引擎"中文页是英文页的副本,别收录",中文版自然出不来;
- 翻译出来的首页,规范标签都指向主站首页:同样的问题;
- 只加了规范标签,漏了语言标签:搜索引擎不知道这几页是互为语言版本,可能当成重复内容处理。
正确写法
以关于页面为例,英文页 /en/about 的 <head> 里:
<link rel="canonical" href="https://example.com/en/about" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about" />
中文页 /zh/about 里,规范标签改成指向它自己,语言标签那几行保持一样:
<link rel="canonical" href="https://example.com/zh/about" />
<link rel="alternate" hreflang="en" href="https://example.com/en/about" />
<link rel="alternate" hreflang="zh" href="https://example.com/zh/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/en/about" />
要点三条:
- 每个语言页的规范标签指向它自己;
- 语言标签每一页都要写全,互相声明,包括自己;
- 加一个
x-default,告诉搜索引擎语言不匹配时默认给哪一版。
多语言站的另外几条规矩
- 用子目录做多语言(如
/en/、/zh/),比用脚本或 Cookie 在同一个网址切换语言好得多; - 不要自动跳转,不要替用户选语言,也不要一个网址显示多种语言;
- 可以根据浏览器语言或地区在页面上提示"我们有你的语言版本,是否切换",用户点了再跳;
- 标题、描述这些元标签也要翻译,只翻正文不翻元标签,搜索结果里显示的还是外文。
已经出事故了怎么办
先把规范标签和语言标签按上面改对,重新提交网站地图,然后耐心等。这类问题修好后恢复需要时间,期间别再反复改结构,免得搜索引擎又要重新判断一遍。
小结
同一页的不同网址用规范标签,同一篇的不同语言用语言标签;每个语言页的规范标签指向自己,语言标签互相写全。用脚本切换语言的问题,见「多语言网站用脚本切换语言、网址不变,有什么问题?」。
讨论
加载中…