Vue、React 和 Next.js 营销落地页非常适合按访客地区展示不同活动模块。页面加载后由浏览器调用接口,再根据返回的 country 切换 Banner、CTA 和注册链接。
接口说明
浏览器端调用检测访客 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,注释和界面文字均已本地化。
React
import { useEffect, useState } from "react";
const defaultCampaign = { title: "欢迎访问本站,这是默认内容。", url: "/signup" };
const campaignMap = { TW: { title: "台湾地区用户内容", url: "/tw" }, US: { title: "美国地区用户内容", url: "/us" }, JP: { title: "日本地区用户内容", url: "/jp" } };
export default function GeoCampaign() {
const [campaign, setCampaign] = useState(defaultCampaign);
useEffect(() => {
let cancelled = false;
fetch("https://my.ipin.io/info")
.then(res => res.json())
.then(info => { if (!cancelled) setCampaign(campaignMap[info.country] || defaultCampaign); })
.catch(() => { if (!cancelled) setCampaign(defaultCampaign); });
return () => { cancelled = true; };
}, []);
return <a href={campaign.url}>{campaign.title}</a>;
}
Vue
<template>
<a :href="campaign.url">{{ campaign.title }}</a>
</template>
<script>
const defaultCampaign = { title: "欢迎访问本站,这是默认内容。", url: "/signup" };
const campaignMap = { TW: { title: "台湾地区用户内容", url: "/tw" }, US: { title: "美国地区用户内容", url: "/us" }, JP: { title: "日本地区用户内容", url: "/jp" } };
export default {
data() { return { campaign: defaultCampaign }; },
mounted() {
fetch("https://my.ipin.io/info")
.then(res => res.json())
.then(info => { this.campaign = campaignMap[info.country] || defaultCampaign; })
.catch(() => { this.campaign = defaultCampaign; });
}
};
</script>
SEO 与体验建议
默认内容应完整可读,地区化内容作为增强体验出现。这样搜索引擎可以抓取稳定内容,接口失败时用户也能继续使用页面。
常见错误
以下问题会影响文章准确性、代码可运行性和接口介绍可信度。
- 不要删除默认内容
- 不要把服务端调用当成访客 IP 判断
- 不要缓存最终个性化 HTML 给所有人
- 多个模块应使用唯一 ID 或 class
- 必须处理接口失败和网络超时
总结
该场景的重点是访客 IP 地区化。浏览器端调用接口能获得访客所在地区,并在默认内容基础上增强页面体验。
常见问题
下面的问答围绕本文场景单独整理,问题和答案都与当前文章直接相关。
问题:为什么 Vue 和 React 适合这个接口?
答案:请求来自访客浏览器,接口返回的就是访客 IP 信息。
问题:页面会先显示默认活动内容吗?
答案:会,这是推荐做法,可以保证首屏稳定和接口失败时可用。
问题:React 示例为什么使用 cancelled 变量?
答案:它可以避免组件卸载后继续 setState,减少潜在警告。
问题:Vue 初始 campaign 为什么不能是空对象?
答案:空对象会导致首次渲染出现空标题或空按钮。
问题:Next.js 可以使用这种方式吗?
答案:可以,建议在客户端组件中调用接口。