如何从另一个国家查看您的网站
目录

简而言之: 网站通常根据您的 IP 地址判断您所在的国家,再根据浏览器语言、时区、Cookie 和已登录的账户调整显示的内容。要从另一个国家查看您自己的网站,这些信号都必须与该市场一致。也就是说,需要一个位于该国的代理来提供地址,以及一个独立的 Chrome 配置文件,设置该市场的语言和时区,并且不带您自己的任何 Cookie。
要从另一个国家查看您的网站,请求必须像当地访客那样到达:来自该国的地址,使用该市场的浏览器语言和时区,并且不带您自己访问留下的 Cookie。代理负责地址,其余都是浏览器设置。本指南讲的是检查您自己的网站,也就是我们的地区测试页面(英文)所描述的工作:如何在 Chrome 中设置、每次运行要记录什么,以及什么时候 VPN 也能胜任。
网站根据什么判断您所在的国家?
通常是 IP 地址,并且常常结合其他信号。信号共有五个,来源各不相同。
- IP 地址。 服务器或其前面的 CDN 会在地理位置数据库中查询这个地址。例如,Cloudflare 可以通过
CF-IPCountry请求头,把访客所在国家以两字母代码传给源站(Cloudflare 请求头参考)。 - 浏览器语言。 Chrome 会根据设置中的首选语言生成
Accept-Language请求头,页面脚本则从navigator.languages读取同一份列表(MDN)。 - 时区。 脚本可以通过
Intl.DateTimeFormatAPI,在其resolvedOptions()的timeZone字段中,读到电脑的时区名称,例如Europe/Berlin(MDN)。 - 精确位置。 Geolocation API 只有在访客允许后才会报告坐标(MDN),所以大多数网站根本拿不到。
- 网站已经知道的信息。 保存您上次所选地区或币种的 Cookie,或已登录账户中的国家,可能比地址更优先。
表格“每个信号从哪里来,测试时如何设置”把每个信号与控制它的 Chrome 设置对应起来。
为什么只用代理还不够?
这些信号可能互相矛盾,而网站如何处理这种矛盾,本身就是您要测试的内容。让 Chrome 通过德国地址访问,却把语言列表留在英语(美国),那么一个从 Accept-Language 取语言、从地址取价格的网站,就会用英语显示欧元价格。德国的真实访客用德语浏览器,不会看到这样的页面。保留您平时的 Cookie,网站则可能跳过国家判断逻辑,直接显示您上个月选过的地区。
所以,在第一次运行之前就把每个信号都设置为该市场,并在之后的运行中保持不变。
如何为每个市场设置一个 Chrome 配置文件?
为每个市场创建一个独立的 Chrome 配置文件,并给它配一个专属代理。每个配置文件有自己的历史记录、密码和设置(Chrome 帮助),也有自己的 Cookie(Chromium 关于用户数据目录的说明)。德国配置文件的 Cookie 永远不会进入法国配置文件,两者也都不会影响您日常的浏览。
- 创建配置文件。 点击右上角的个人资料图片,选择添加 Chrome 个人资料,并以市场命名,例如“Test DE”。不要登录您的 Google 账号,这样主配置文件中的任何内容都不会同步过来。
- 在该配置文件中安装代理扩展。 扩展程序为其所在的配置文件设置代理(chrome.proxy API)。在扩展中添加该市场的代理。我们免费的 ProxyJam Connector就是这样一款扩展。
- 只让被测域名走代理。 为您网站的域名及其子域名添加规则,其余流量保持直连。Chrome 自身的流量和其他所有网站都使用您自己的连接,代理只承载测试流量。规则如何变成 PAC 脚本,以及为什么在 HTTPS 下规则只能匹配主机名而不能匹配路径,见 如何在 Chrome 中只让特定网站走代理。
- 加入页面调用的其他主机。 打开开发者工具,刷新页面,查看 Network 面板中的 Domain 列(如果它被隐藏了,右键点击列标题即可显示)。价格常常来自另一台主机上的 API,Cookie 同意横幅也可能向其供应商的服务器询问该显示哪个版本。规则中漏掉的主机会看到您自己的地址,页面最终会混合两个市场的内容。把它们逐一加入。
- 设置语言。 在设置的语言中,于首选语言下添加该市场的语言,并把它移到顶部(Chrome 帮助)。
Accept-Language发送的就是这个顺序。 - 设置时区。 Chrome 从操作系统获取时区,本身没有时区设置。测试时可以由开发者工具提供:在开发者工具的设置中打开 Locations,添加一个带该市场 Timezone ID 和 Locale 的位置,然后在 Sensors 面板中选择它(开发者工具文档)。这个覆盖设置只作用于打开开发者工具的那个标签页,所以请先打开开发者工具,再加载页面。修改系统时区也可以,但会同时作用于电脑上的所有程序。
- 检查配置文件。 暂时把 proxyjam.com 加入规则,打开“我的 IP 是什么”(英文)。它应显示代理的地址,并且定位在该市场。检查完后,把检查页面从规则中移除。
如果代理需要用户名和密码,而 Chrome 一再要求输入,为什么 Chrome 一再要求输入代理用户名和密码解释了原因和解决办法。
一次地区检查应记录什么?
每次运行都记录相同的字段,这样两次运行就能逐行比较。清单“每次运行都记录相同的字段”是一个起点:重定向链、价格和币种、库存、Cookie 同意横幅和语言,以及配置文件当时使用的地址。
对于重定向链,请在 Network 面板中打开 Preserve log,它会把重定向之前的请求保留在列表中(开发者工具 Network 参考)。在终端中,curl 加上 -I 和 -L 会打印每一跳的响应头,-x 让请求通过代理发送,-H 添加语言请求头(curl 手册)。示例中的代理地址来自专供文档使用的地址段(RFC 5737),请换成您自己的地址。
curl -sIL -x http://203.0.113.10:8080 -H "Accept-Language: de-DE,de;q=0.9" https://example.com/
每一个后面跟着 location: 响应头的状态行就是一跳。像这样的普通请求能看到重定向、响应头,以及写在 HTML 里的价格。由于 -I 发送的是 HEAD 请求,对 HEAD 和 GET 响应不同的服务器可能显示不同的重定向链;去掉 -I,加上 -o /dev/null -D -,即可打印普通请求的响应头。它不执行脚本,所以 Cookie 同意横幅或页面加载后才填入的价格,需要用浏览器配置文件来检查。
每次运行一行,每个市场一张表。只有当两次运行的地址、语言和时区都相同时,它们之间的差异才值得追查;如果其中任何一项变了,您比较的就是两种不同的设置。
重定向链的意义不止于质量检查。Google 表示,其爬虫默认使用的地址看起来位于美国,而且不发送 Accept-Language 请求头(Google Search Central),所以只能通过自动检测才能访问到的市场版本,Google 可能无法抓取或编入索引。为该版本提供独立的网址,就能避免这个问题。
为什么重复测试时静态地址比轮换地址更好?
比较需要一次只改变一个因素。轮换代理池每次请求或每个会话都给出不同的地址,而每个地址都有自己的地理位置记录和所属网络。当价格在周一和周四之间发生变化时,您无法判断是网站变了还是地址变了。静态地址让观察点保持固定,因此它不再是比较中的变量。持有一个地址与从代理池中取用地址的更详细对比,见 ISP 代理与住宅代理对比。
静态地址也仍然可能“移动”:地理位置数据库会更新,一个地址可能被记录到另一个国家名下。所以每次运行之前,包括第一次,都要先做“我的 IP 是什么”检查。如果您需要在同一个市场同时使用许多不同的地址,轮换代理池是更合适的工具。
什么时候 VPN 就够了,什么时候不够?
只看一次时,VPN 就够了:德国首页能否加载、横幅是否出现。它很快,而且很多人已经装了。
当检查需要重复进行时,VPN 在三个方面有所不足:
- VPN 应用通常承载设备的全部流量,所以所有程序和标签页都同时处于测试国家,两个市场无法并排比较。
- 它的出口地址由许多用户共用,在 IP 数据中属于一个已知类别:商业数据库中有一个字段,专门标记注册给匿名 VPN 服务商的地址(MaxMind 文档)。读取这个字段的网站可能会区别对待 VPN 访客,这样记录下来的就是这种区别对待。
- 出口地址可能每次连接都不同,这又带回了轮换代理池的问题。
ProxyJam 适合在哪里?
ProxyJam 销售静态住宅(ISP)代理:一个位于您所选国家的地址,注册在一家互联网服务商名下,在您付费的期间内一直归您使用。对这项工作来说,就是每个市场一个地址。可选国家列在代理地区页面上,目前共 77 个,按 IP 按周期的价格见价格页面。如果某个地址开始被定位到您所购买的国家之外,您可以在《服务条款》第 2.5 节规定的每月限额内免费更换。
该产品按国家销售,所以无法显示两个城市之间的差异。它的用途也是检查您自己的网站:使用地址去获取某个网站不向您所在国家提供的内容,是我们《可接受使用政策》第 5 节所禁止的。产品目录见 ISP 代理页面,ISP 代理究竟是什么,见 什么是 ISP 代理。
