Shopify 根据访客 IP 显示地区客服入口

作者名:Lisa Farrell · 2026-06-01

跨境 Shopify 商店面对不同地区用户时,客服方式往往不同。通过主题脚本调用 https://my.ipin.io/info,可以根据访客 IP 显示 LINE、邮件或本地化支持页面。

接口说明

浏览器端调用检测访客 IP,返回的是访客的 IP、国家、地区和城市信息,适合地区化内容展示。

{"ip":"185.220.236.7","country":"TW","region":"Taiwan","city":"Taipei"}

应用场景

这些场景都能体现 IP 信息接口价值,并明确区分服务器 IP 与访客 IP。

  • 根据国家显示地区化内容
  • 显示不同购买、客服或支付提示
  • 切换落地页 CTA 或活动模块
  • 引导用户进入合适的支持入口
  • 不创建多套页面也能优化地区体验

实现逻辑

实现前先确认请求发起方:服务器发起请求得到服务器 IP,浏览器发起请求得到访客 IP。

  • 先输出默认内容
  • 浏览器请求 https://my.ipin.io/info
  • 读取返回的 country、region、city、ip
  • 根据 country 从映射表选择内容或链接
  • 接口失败时保留默认内容

代码示例

以下代码都直接使用 https://my.ipin.io/info,注释和界面文字均已本地化。

theme.liquid

<a class="ipin-support-btn" href="/support">Support</a>
<script>
document.addEventListener("DOMContentLoaded", async function () {
  const buttons = document.querySelectorAll(".ipin-support-btn");
  const map = { TW: "/support/tw", US: "/support/us", JP: "/support/jp" };
  try {
    // 浏览器调用 /info:识别访客 IP。
    const info = await fetch("https://my.ipin.io/info").then(res => res.json());
    buttons.forEach(btn => btn.href = map[info.country] || "/support");
  } catch (e) {
    // 接口异常时保留默认内容。
    buttons.forEach(btn => btn.href = "/support");
  }
});
</script>

SEO 与体验建议

默认内容应完整可读,地区化内容作为增强体验出现。这样搜索引擎可以抓取稳定内容,接口失败时用户也能继续使用页面。

常见错误

以下问题会影响文章准确性、代码可运行性和接口介绍可信度。

  • 不要删除默认内容
  • 不要把服务端调用当成访客 IP 判断
  • 不要缓存最终个性化 HTML 给所有人
  • 多个模块应使用唯一 ID 或 class
  • 必须处理接口失败和网络超时

总结

该场景的重点是访客 IP 地区化。浏览器端调用接口能获得访客所在地区,并在默认内容基础上增强页面体验。

常见问题

下面的问答围绕本文场景单独整理,问题和答案都与当前文章直接相关。

问题:为什么 Shopify 适合浏览器端调用?
答案:主题脚本运行在访客浏览器中,接口返回的就是访客 IP 信息。
问题:为什么示例使用 class 而不是 id?
答案:同一页面可能有多个客服按钮,class 可以批量更新所有入口。
问题:可以支持 WhatsApp、LINE 或邮件吗?
答案:可以,只需要在映射表中配置对应国家的客服链接。
问题:接口失败时客服入口会消失吗?
答案:不会,默认客服入口会保留,用户仍然可以联系商家。
问题:这段代码应该放在哪里?
答案:可以放在 theme.liquid 的 前,或放在渲染客服入口的模板中。