# 测试 Shopify 加拿大本地化

Source: https://ipvolt.com/zh/guides/shopify-canada-localization
Markdown: https://ipvolt.com/zh/guides/shopify-canada-localization.md
Language: zh-CN

[ipvolt 首页](https://ipvolt.com/zh.md) / [指南](https://ipvolt.com/zh/guides.md) / 测试 Shopify 加拿大本地化

集成
审校于: 2026-09-27
阅读约 9 分钟
作者： ipvolt

用一份配置快照和成对访问来测试 Shopify 加拿大本地化，把 IP、入口 URL、语言、已保存的选择和收货地址各自的影响区分开来。

先从你的 Shopify 在线商店的配置入手，然后比较来自加拿大和非加拿大的首次访问，两次都访问**同一个中性 URL**。保持语言、浏览器状态和商品不变。明确的加拿大 URL 回答的是另一个问题，所以要单独测试。

可下载的工作表提供六组比较对和十二条空白的访问记录。选择与你的问题相关的比较对即可，不必六组全做。本地检查脚本能发现缺失的声明和指定的对照错误。这些文件没有测量任何 Shopify 或代理的行为。

下载 [JSON 工作表](/downloads/canada-localization/shopify-canada-worksheet.json)、[Python 检查脚本](/downloads/canada-localization/validate_shopify_canada.py)和 [README](/downloads/canada-localization/README.md)。如果想用电子表格查看，请把[配置 CSV](/downloads/canada-localization/shopify-canada-configuration.csv)和[访问 CSV](/downloads/canada-localization/shopify-canada-visits.csv)放在一起。检查脚本读取的是 JSON；编辑 CSV 不会更新它。

## 访问之前先记录配置

保存一份 JSON 副本，并根据你所管理的商店填写 `configuration`。为这份快照指定一个 ID、UTC 时间戳和一个私有的证据引用。记录：

- 启用的市场和货币；各市场的 URL 使用共享域名、专用域名还是混合域名。
- 实际的国家和语言重定向设置、各市场已发布的语言、选择器以及已保存选择的行为。
- 配送规则和任何第三方路由，或填 `none`。
- 测试用的商品或购物车、浏览器版本、视口、时区和一个较短的测试时间窗口。

使用未登录的浏览器，并拒绝位置权限。账户或已授权的坐标会给这套流程引入额外的输入。在一组比较期间保持配置和库存稳定；它们发生变化时，重新记录一份快照。

以你的商店中实际存在的配送设置为准。Shopify 正在逐步把配送配置文件和运费迁移为按市场划分的配送选项。它的州/省级子区域市场目前处于**抢先体验**阶段，可独立定制的内容仅限配送选项。这两项功能都不是使用本工作表的前提。[配送设置](https://help.shopify.com/en/manual/fulfillment/setup/shipping-rates/setting-up-shipping-rates)，[市场类型](https://help.shopify.com/en/manual/markets/getting-started/market-types)。

对每一组相关的比较对，把 `applicable` 设为 `true`，写下 `expected_rule` 及其证据，并在执行之前为两次访问各写一个 `expected_outcome`。未使用的比较对保留为 `applicable: false`，并填写 `inapplicable_reason`。如果配置的规则把两个输入映射到同一种体验，结果保持不变也可能是正确的。

## 先做同一 URL 的 IP 比较

把 `neutral_entry_url` 设为约定的首次访问入口，用来测试位置选择。不要用预先选定的加拿大域名或路径来代替。如果你的设置没有合适的公共入口，就把这一组标记为不适用，并说明原因。

根据你获得授权的 IP 观测结果填写 `exits.CA` 和 `exits.control`。对照出口必须位于加拿大境外。记录检查服务或目标、UTC 时间戳、观测到的国家，以及一个 `egress_id`：用于标识所观测出口地址的私有引用或摘要。独立 IP 检查工具给出的国家结果并不能确定 Shopify 自己的位置判断；Shopify 提醒说，IP 地理定位可能不准确。[本地化注意事项](https://help.shopify.com/en/manual/markets/getting-started/localization)。

| 访问 | 入口 | 出口 | 语言 | 浏览器状态 | 收货地址 |
| --- | --- | --- | --- | --- | --- |
| `ip-A` | 同一个中性 URL | 观测为 CA | `en-CA` | 全新，未登录 | 未填写 |
| `ip-B` | 同一个中性 URL | 观测为非 CA 的对照出口 | `en-CA` | 另一个全新上下文，未登录 | 未填写 |

每次访问都打开一个新的隔离上下文，不复用存储状态、购物车或旧的配置文件。在填写地址之前记录首次落地的页面，然后关闭上下文。Shopify 的文档把自动重定向描述为首个页面的行为，因此在已有会话中四处浏览属于另一种比较。[首个页面的重定向](https://help.shopify.com/en/manual/markets/getting-started/localization)。

分别记录最终 URL、所选国家、市场、语言和货币。共享域名的市场可以在不改变 URL 的情况下改变显示的内容；专用的市场域名则可能重定向 URL。因此，仅凭 URL 变化不适合作为通用的通过条件。[取决于域名的重定向](https://help.shopify.com/en/manual/international/automatic-redirection)。

作为市场证据，请截取相关选择器的状态和配置映射，或一份获得授权的店面诊断结果。国家和市场不一定一一对应：一个市场可以包含多个国家。仅凭 CAD 或 HTTP 200 并不能确定选中了哪个市场。Shopify 的 [Liquid localization 对象](https://shopify.dev/docs/api/liquid/objects/localization)会给出所选国家、语言以及适用的国家/地区市场；下载文件中不包含经过测试的 Liquid 检测代码。[国家和地区市场的范围](https://help.shopify.com/en/manual/markets/getting-started/market-types)。

## 加入与症状对应的比较

保持快照、商品或购物车以及浏览器设置不变。每次全新访问都使用自己的上下文；已保存选择的比较则有意只保留事先准备好的选择。

| 比较对 | 两次访问之间的变化 | 保持不变 | 有助于诊断什么 |
| --- | --- | --- | --- |
| `url` | 中性入口 → 已配置的加拿大入口 | CA 出口、`en-CA`、全新上下文 | 入口 URL 与已配置重定向之间的相互作用。 |
| `language` | 浏览器语言偏好 `en-CA` → `fr-CA` | 加拿大入口、CA 出口、全新上下文 | 已配置的法语体验是否出现。 |
| `saved` | 全新上下文 → 有意保留的手动选择 | 加拿大入口、CA 出口、`fr-CA` | 回访时是否沿用记录下来的选择器选择。 |
| `province` | 经批准的安大略省收货地址 → 魁北克省收货地址 | 加拿大入口、CA 出口、`en-CA`、等同的全新购物车 | 这两个目的地的配送结果。 |
| `cross_border` | 经批准的非 CA 收货地址 → 安大略省收货地址 | 对照市场入口、非 CA 出口、`en-CA`、等同的全新购物车 | 目的地改变之后结账环节的变化。 |

如果在共享域名上中性入口和加拿大入口完全相同，`url` 这组对比就不适用。`ip` 这组仍然可以检查该共享入口上的内容。对于不同的 URL，请观察你的设置中实际发生的相互作用，而不要假定 URL 与 IP 之间存在通用的优先顺序。

对于语言这一组，请核实浏览器实际的语言偏好。法语重定向要求语言重定向已启用，并且法语已添加、已分配给相关市场、已翻译并已发布。Shopify 举例说明了一个已配置的 `.ca` 店面重定向到 `.ca/fr`；这只是文档中的示例，而不是要强加给每家商店的 URL 模式。[语言要求](https://help.shopify.com/en/manual/international/automatic-redirection)。

对于 `saved-B`，从干净的状态开始，用商店的选择器手动选择目标国家和英语，然后在同一个上下文中再次访问。记录确切的步骤。导入不相关的旧配置文件会带来未知的状态。Shopify 的文档说明，手动选择会在之后的访问中保留。[已保存的选择器偏好](https://help.shopify.com/en/manual/markets/getting-started/localization)。

对于地址相关的比较对，请引用私下保存、经过批准的**完整测试地址**。两次访问之间重置购物车和结账流程，并停在你获得授权的观测点，不要下单。安大略省对比魁北克省比较的是两个目的地；它并不能把省份与邮编、街道或半径规则区分开。对于本地配送，还要保持库存、履约和结账条件不变。[本地配送的适用条件](https://help.shopify.com/en/manual/fulfillment/setup/delivery-methods/local-delivery)。

填写地址之后，再检查一次结账体验。Shopify 的文档说明，最终体验由收货目的地决定，并举了一位美国访客填写加拿大地址的例子。因此，首次落地成功并不代表跨境比较已经完成。[结账本地化](https://help.shopify.com/en/manual/markets/getting-started/localization)。

## 解读哪些变了，哪些没变

把实际输入和观测结果写入每次访问，然后把 `observation.status` 设为 `observed`。保留最终 URL、所选国家、市场证据、语言、货币、UTC 时间和证据引用。地址比较还要包含配送选项，如果没有则记录 `none`。

对照你在访问之前写下的预期，使用 `match`、`mismatch` 或 `inconclusive`。如果 `selected_country`、`market`、`market_evidence`、`language` 或 `currency` 中有一项无法获得，请记录 `unavailable`，选择 `inconclusive` 并说明缺口。`final_url` 仍然要求填写观测到的 HTTP(S) URL；没有它，记录就不完整。失败和无定论的记录也要保留。

**虚构的解读示例**：假设一份记录下来的共享域名配置把加拿大访客分配到加拿大市场，把美国访客分配到美国市场。两次访问最终停在同一个 URL。获得授权的市场证据表明 `ip-A` 是加拿大，`ip-B` 是美国。即使没有发生重定向，这也与所声明的规则相符。如果唯一的证据是一个 CAD 价格，那么市场选择仍然无法下结论。这个示例不包含任何商家的实际观测结果。

如果两个输入本应选中同一个市场，那么相同的输出可以算作相符。如果所声明的规则预测是不同的市场，而两次观测却指向同一个市场，请保留这一不符记录，并检查设置、实际入口、全新状态以及 Shopify 的位置判断。URL 不同再加上语言不同，无法单独分离出出口的影响。

把 `actual_inputs` 与计划进行比较。如果出口发生了轮换、商品变了或复用了旧会话，请恢复对照条件并重做这一组。保留原始记录。如果之后的某一组使用了不同的观测出口 ID，请使用一条新的工作表记录；先前的 IP 证据并不适用于新的地址。

## 在本地检查记录

把检查脚本放在 JSON 旁边。Python 3.10 或更高版本只用到标准库：

```sh
python3 validate_shopify_canada.py shopify-canada-worksheet.json
```

空白的下载文件返回 `INCOMPLETE_RECORD`，退出码为 `2`。填写完成的计划可以返回 `PLAN_COMPLETE`，退出码为 `0`：通过本地检查的只是它的声明和成对输入。这并不代表 Shopify 测试通过。

填入观测结果之后：

```sh
python3 validate_shopify_canada.py shopify-canada-worksheet.json --observations
```

`RECORD_COMPLETE` 表示所声明的观测字段和对照条件通过了检查脚本。其中可以包含 `mismatch` 和 `inconclusive` 结果；它并不验证商店运行正常，也不验证观测结果属实。

编辑 JSON 之后导出访问视图：

```sh
python3 validate_shopify_canada.py shopify-canada-worksheet.json --export-csv shopify-canada-visits.csv
```

把配置与导出的文件放在一起保存。检查脚本报告记录不完整时，请阅读返回的 `errors`；不要为了让命令成功而用预期值去填补缺失的观测结果。

## 方法与范围

该工作表依据文中链接的 Shopify 文档整理而成，文档核对于 2026 年 9 月 26 日（UTC）。它的检查脚本在 Python **3.14.7**、macOS **15.7.4 arm64** 上通过了**使用虚构记录的 28 项离线测试中的全部 28 项**。这些测试包括缺少市场证据、出口发生变化、IP 与语言输入混在一起、已登录状态、已授予位置权限，以及在首次访问的 IP 比较对中填写了地址。Python 3.10 的语法经过检查；实际运行使用的是 3.14.7。

这些结果只说明经过测试的记录检查。没有测试任何 Shopify 商店、浏览器、代理、结账流程或地址的适用性。该流程面向已配置的 Shopify 在线商店；无头店面、B2B 和自定义路由需要各自的规则。检查脚本无法确定 IP 定位的准确性、应用的隐藏行为、税费是否正确或实际的配送适用性。

如果对网络出口有要求，请使用[加拿大代理选择页面](/zh/proxies/canada)。本指南和下载文件无需注册即可获取。ipvolt 尚未确认是否提供加拿大代理。[获取早期访问](/zh/proxies#waitlist-closing)。开放访问时发一封邮件。仅此而已。

## 参考来源与延伸阅读

- [Shopify market localization](https://help.shopify.com/en/manual/markets/getting-started/localization)
- [Shopify domain and language redirection](https://help.shopify.com/en/manual/international/automatic-redirection)
- [Shopify market types and early-access sub-region markets](https://help.shopify.com/en/manual/markets/getting-started/market-types)
- [Shopify shipping configuration](https://help.shopify.com/en/manual/fulfillment/setup/shipping-rates/setting-up-shipping-rates)
- [Shopify local-delivery eligibility](https://help.shopify.com/en/manual/fulfillment/setup/delivery-methods/local-delivery)
- [Shopify Liquid localization object](https://shopify.dev/docs/api/liquid/objects/localization)

## 相关指南

- [加拿大代理：位置、网络与会话核查](https://ipvolt.com/zh/guides/canada-proxies.md)
- [在 Playwright 中配置代理](https://ipvolt.com/zh/guides/playwright-proxy-setup.md)
- [法国代理：网络、地区与本地化测试](https://ipvolt.com/zh/guides/france-proxies.md)

## 关于 ipvolt

示例使用通用的代理设置，并附上原始技术文档链接。具体产品的行为请向你的服务商确认。ipvolt 仍在开发中。

[阅读英文原文](https://ipvolt.com/guides/shopify-canada-localization.md)

## 了解何时开放体验。

ipvolt · 开发中

我们正在为开发者和数据团队打造代理基础设施。加入意向名单，ipvolt 就绪时第一时间收到通知。

开放体验时仅发一封通知邮件，不发送其他邮件。

[申请抢先体验](https://ipvolt.com/zh/guides/shopify-canada-localization#waitlist-closing)

[隐私政策](https://ipvolt.com/privacy)

