页面代码中的hreflang标记是一回事,而来自德国、波兰或巴西的访问者实际获得的内容则完全不同。谷歌可能会忽略标签,CDN可能会重定向到错误的位置,而服务器可能会根据IP提供错误的版本。确保一切正常工作的唯一方法是从不同国家“实时”检查网站,而不是相信纸面上的标记。
什么是hreflang,为什么代码中的标签不足
hreflang是一个属性,用于告知搜索引擎哪个语言或地区版本的页面适合哪些用户。从技术上讲,这看起来像是在<head>或sitemap.xml中的一组链接,其中每个页面都引用其替代版本:ru-RU、en-US、de-DE等等。
问题在于,通过代码验证器(如Screaming Frog、Ahrefs、Semrush)进行检查仅显示标记中写的内容。它没有回答一个主要问题:当来自华沙或马德里的真实用户打开您的网站时,实际发生了什么?重定向是否触发到所需的地区?CDN是否因缓存而将用户重定向到英文版本?如果用户通过移动运营商访问,geo-IP是否正确识别国家?
对于测试多区域网站、不同地区的着陆页或针对特定国家的Google Ads和Facebook Ads广告活动的营销人员和SEO专家来说,这一点至关重要。如果hreflang设置不正确,来自所需国家的用户可能会看到错误版本的网站,导致转化率下降,而搜索引擎则会在该国的结果中索引错误的URL。
为什么hreflang“撒谎”:5个典型原因
在实践中,标记与网站实际行为之间的差异是由几个原因造成的,其中大多数无法仅通过查看页面代码来发现。
- Geo-IP重定向覆盖了hreflang。服务器根据IP确定国家,并强制重定向到地区,即使用户明确通过直接链接打开了另一种语言版本。
- 缓存的CDN提供过时版本。Cloudflare或其他CDN可能会缓存HTML,而不考虑请求的国家,因此所有用户都获得相同的版本,无论地理位置如何。
- 语言和地区代码不匹配。标记中指定了
en,而实际上需要en-GB和en-US分开——结果是来自英国和美国的用户看到的是同一版本。 - 缺少自引用标签。页面在hreflang列表中没有引用自己,这可能导致谷歌不将标记视为有效。
- 不同的URL变体,包括www和不带www,http和https。标签指向一个协议,而服务器实际上重定向到另一个,这破坏了检查链。
所有这些问题仅在从所需国家的IP实际访问时才会显现。因此,唯一可靠的测试方法是模拟来自每个目标国家的访问者,查看网站实际提供的内容。
检查10个国家所需的内容
要“实时”检查hreflang,必须物理或程序性地获取每个目标国家的IP地址,并查看服务器为该IP提供的版本。为此,有三种有效的方法:
- 与目标国家地理绑定的代理服务器——最灵活和可扩展的方法,适合手动检查和自动化。
- 反检测浏览器(Dolphin Anty、AdsPower、Multilogin、GoLogin、Octo Browser)——在需要为每个国家保存单独的浏览器配置文件并进行视觉比较时非常方便,避免了cookies和缓存的混淆。
- 命令行工具(curl、httpie)与代理——用于快速检查HTTP头、重定向和服务器响应,而无需加载界面。
对于来自10个国家的hreflang测试,最适合使用住宅代理——它们使用特定国家真实用户的IP,因此geo-IP服务和CDN将其视为普通网站访问者。数据中心代理有时会被地理服务列入黑名单,可能会给出错误结果,因为服务器根据其声明的国家而不是“数据中心,国家未知”来识别它们。
在反检测浏览器中设置代理
对于没有编程技能的营销人员来说,最实用的方法是为10个目标国家在反检测浏览器中创建单独的配置文件,并通过这些配置文件进行hreflang的视觉检查。
在Dolphin Anty或AdsPower中的步骤如下:
- 创建一个新的浏览器配置文件,按国家命名,例如“hreflang-DE”用于德国。
- 在配置文件设置中打开“代理”部分,选择类型为
HTTP/SOCKS5。 - 插入与德国地理绑定的代理数据:IP或主机、端口、登录名和密码。
- 保存配置文件并等待检查——反检测浏览器将显示特定的地理位置、时区和IP。
- 启动配置文件并通过直接URL打开您的网站,而不是通过搜索进入。
- 检查打开的版本:地址栏中的URL、内容语言、通过“查看页面源代码”检查的hreflang值。
- 对每个目标国家重复此操作,为每个国家创建单独的配置文件。
这种方法的便利之处在于,配置文件会被保存,您可以在一周或一个月后返回检查网站在更新CDN或部署新版本后是否行为有所变化。对于此任务,适合使用住宅代理,并绑定到特定城市,而不仅仅是国家——这提供了更准确的真实访问者模拟。
通过命令行和curl进行检查
如果需要快速检查的不是视觉版本,而是HTTP头、重定向和服务器响应,浏览器并不总能提供完整的画面——部分逻辑隐藏在响应头中。为此,使用带代理的curl非常方便。
通过与目标国家绑定的代理进行基本检查:
curl -x http://login:password@proxy-host:port \
-I https://example.com/ \
-H "Accept-Language: de-DE"
标志-I仅显示响应头,而不包括页面主体。这使您能够快速查看重定向代码(301或302)、指示服务器重定向位置的Location头,以及指示Accept-Language是否在缓存中被考虑的Vary头。
要提取HTML并在服务器响应中找到hreflang标签,请去掉-I并过滤输出:
curl -x http://login:password@proxy-host:port \
-s https://example.com/ | grep -i hreflang
此请求将直接从服务器返回的HTML中提取所有提到hreflang的行,而不是根据文档预期的内容。如果结果因请求通过哪个国家的代理而有所不同,则意味着服务器确实根据IP更改内容,而不仅仅是在静态标记中声明。
为了自动化检查所有10个国家,可以编写一个简单的脚本,遍历代理列表,并将每个请求的响应保存到单独的文件中以供比较:
for country in de fr es it pl nl br mx jp kr; do
curl -x "http://login:password@${country}.proxy-host:port" \
-s https://example.com/ | grep -i hreflang > "result_${country}.txt"
done
执行脚本后,只需比较文件——如果所有文件中的hreflang标签集合相同,则意味着服务器没有根据地理位置更改标记,这可能是预期的行为(标记是静态和通用的)或问题(如果预期不同地区的不同规范化)。
通过浏览器和开发者工具进行检查
对于视觉检查和用户体验分析,使用配置了代理和打开开发者工具的普通浏览器更为方便。这不需要代码,适合希望亲眼看到用户所见内容的营销人员。
操作步骤:
- 通过扩展(例如FoxyProxy)或通过系统网络设置配置浏览器中的代理,指定检查国家的IP。
- 打开网站并立即按F12打开开发者工具,然后转到“网络”选项卡。
- 刷新页面并找到第一个文档请求(通常与网站域名相同)。
- 在右侧面板中打开“头部”选项卡,并检查“响应头”部分是否存在重定向和
Content-Language的值。 - 打开“元素”选项卡,并通过Ctrl+F查找页面源代码中所有出现的
hreflang。 - 将地址栏中的URL与您预期在该国家看到的URL进行比较。
这种方法特别有用,因为它可以同时检查标记的技术正确性和内容的视觉显示——例如,货币、日期格式或特定国家的本地化横幅是否正确。
选择哪些代理进行地理定位测试
并非所有类型的代理都同样适合检查hreflang。差异在于地理定位服务如何识别IP,以及代理保持与声明国家的绑定的稳定性。
| 代理类型 | Geo-IP准确性 | 何时使用 |
|---|---|---|
| 住宅代理 | 高,真实提供商的IP | 精确模拟来自特定国家和城市的真实访问者 |
| 移动代理 | 高,通信运营商的IP | 检查移动流量和AMP版本的行为 |
| 数据中心代理 | 较低,有时被标记为数据中心 | 通过curl快速检查头部和重定向,地理准确性不关键 |
在启动多语言网站或国际广告活动之前,进行最终验收检查时,最好使用住宅或移动代理——它们提供的结果最接近目标国家的真实用户所看到的内容。
10个国家的hreflang检查清单
为了确保在大规模检查中不遗漏任何内容,请使用以下清单针对每个国家:
- 连接到具有该国家IP的代理,地理位置通过IP检查确认。
- 打开网站的直接URL(不通过搜索进入且没有referrer)。
- 检查所有重定向后的最终URL——是否与预期的地区匹配。
- 页面代码中存在自引用的hreflang标签。
- hreflang列表中列出了所有其他9个语言版本,没有遗漏。
- 语言和地区代码符合ISO标准(例如,
pt-BR,而不是简单的pt,如果需要区分巴西和葡萄牙)。 - 如果内容依赖于浏览器语言,则存在
Vary: Accept-Language头。 - 页面内容(货币、价格、横幅)与声明的地区相符。
- 规范标签
rel="canonical"指向自身,而不是其他地区。 - 一周后进行重复检查——在CDN缓存更新后,结果没有意外变化。
测试中的常见错误
在通过代理手动检查hreflang时,营销人员常常会犯一些重复的错误,这些错误会扭曲测试结果。
首先,检查是在登录账户或保存的会话中进行的——在这种情况下,服务器可能会显示个性化内容,而不是新访问者所看到的内容。始终在隐身模式或没有历史记录的反检测浏览器的干净配置文件中进行检查。
其次,忘记在切换代理之间清除DNS和浏览器缓存,导致旧版本页面继续显示,尽管IP已经更改。每次更改地理位置时,请使用强制刷新页面(Ctrl+Shift+R)。
第三,仅测试主页,忽略内部部分和产品卡——而正是在这些地方,hreflang标记由于动态生成URL而经常出现问题。
第四,使用相同的代理进行所有10个国家的测试,仅更改Accept-Language头——这并不等同于真实的geo-IP,可能会导致假阳性结果,如果服务器确实依赖于IP而不是浏览器语言。
结论
通过页面代码检查hreflang仅提供了一半的画面。要了解特定国家的用户实际获得的内容,需要通过该国的IP模拟其访问——使用代理、反检测浏览器或简单的curl请求。这种方法揭示了在静态审核中无法发现的问题:geo-IP重定向、CDN缓存未考虑地区、语言代码不一致和自引用标签失效。
如果您定期测试多语言网站或为10个及以上国家准备广告活动,建议尝试住宅代理——它们为每个目标国家提供最准确的真实访问者模拟,并允许检查hreflang,就像真实用户看到的那样,而不是搜索引擎机器人。