Em alguns casos, o objetivo não é “bloquear acesso”, e sim fazer um “roteamento por região” mais leve: na mesma página, usuários de países/regiões diferentes, ao clicar em um link ou botão, devem ir para URLs de destino diferentes. Esse tipo de roteamento costuma ser usado para: distribuição de links de download, entradas de pagamento por região, diferentes sistemas de suporte, e troca de entrada entre sites (internacional/local), etc.
Este artigo fala apenas de um ponto central: no carregamento da página, o frontend requisita GET https://my.ipin.io/info para obter o código do país do visitante country,
e então define o href do <a> ou o endereço de navegação no clique do <button> como a URL correspondente àquela região.
Por exemplo, a API pode retornar:
{"ip":"185.220.236.7","country":"TW","region":"Taiwan","city":"Taipei"}
1)Lógica e princípio de funcionamento(2 parágrafos)
Primeiro parágrafo: fluxo
A página carrega → o frontend requisita imediatamente https://my.ipin.io/info → obtém country → escolhe a URL de destino conforme suas regras (por exemplo, TW usa a URL A 1, US usa a URL A 2, outras regiões usam a URL padrão) →
atualiza o “destino” do link ou do botão para essa URL. O usuário só irá para o endereço correspondente quando clicar.
Segundo parágrafo: por que é recomendado definir primeiro uma URL padrão e depois sobrescrever por região
Porque o ambiente frontend pode ser instável: rede, CORS, extensões de bloqueio de anúncios e timeouts da API podem impedir a obtenção do country. Uma abordagem mais robusta é:
definir na página uma URL padrão funcional (landing genérica) e, quando o script conseguir identificar a região, sobrescrever para a URL específica daquela região. Assim, mesmo se a API falhar, a página ainda consegue navegar normalmente, evitando “cliquei e não aconteceu nada / URL vazia”.
2)Implementação (super simples, A e button explicados separadamente)
2.1 Link A(usando id):definir href de acordo com country
Cenário: há apenas um link principal na página e você quer que ele aponte para destinos diferentes por região. O exemplo abaixo mostra a lógica mais simples:
se for TW, usa o link de TW; caso contrário, usa o link padrão.
<a id="geoLink" href="https://example.com/default">Ir agora</a>
<script>
(async function () {
try {
const info = await fetch("https://my.ipin.io/info").then(r => r.json());
const target = (info.country === "TW")
? "https://example.com/tw"
: "https://example.com/default";
const a = document.getElementById("geoLink");
if (a) a.href = target;
} catch (e) {
// Se falhar, mantém o href padrão
}
})();
</script>
2.2 Link A(usando class):definir href em lote de acordo com country
Cenário: há vários links na página que precisam de roteamento por região. O jeito mais simples é: dar a mesma class e atualizar todos juntos. O exemplo segue minimalista: TW usa o link de TW; as demais regiões usam o link padrão.
<a class="geo-link" href="https://example.com/default">Entrada de download</a>
<a class="geo-link" href="https://example.com/default">Entrada de compra</a>
<script>
(async function () {
try {
const info = await fetch("https://my.ipin.io/info").then(r => r.json());
const target = (info.country === "TW")
? "https://example.com/tw"
: "https://example.com/default";
document.querySelectorAll(".geo-link").forEach(function (el) {
el.href = target;
});
} catch (e) {}
})();
</script>
2.3 Button(usando id):no clique, navegar de acordo com country
Cenário: botão não é link por si só, então você precisa vincular um evento de clique no frontend. O exemplo abaixo mantém apenas a lógica essencial: primeiro escolhe a URL de destino conforme country, depois no clique do botão navega para essa URL.
<button id="geoBtn" type="button">Clique para ir</button>
<script>
(async function () {
let target = "https://example.com/default"; // URL padrão
try {
const info = await fetch("https://my.ipin.io/info").then(r => r.json());
if (info.country === "TW") target = "https://example.com/tw";
} catch (e) {
// Se falhar, usa a URL padrão
}
const btn = document.getElementById("geoBtn");
if (btn) btn.onclick = function () { window.location.href = target; };
})();
</script>
2.4 Button(usando class):vincular navegação no clique em lote
Cenário: há vários botões na página e todos precisam navegar por região. O jeito mais simples: usar uma class comum e fazer um loop para vincular o clique. Atenção: botão não tem “href padrão”, então é recomendado preparar uma URL padrão no script para evitar que, quando a API falhar, o botão “não responda”.
<button class="geo-btn" type="button">Botão 1</button>
<button class="geo-btn" type="button">Botão 2</button>
<script>
(async function () {
let target = "https://example.com/default"; // URL padrão
try {
const info = await fetch("https://my.ipin.io/info").then(r => r.json());
if (info.country === "TW") target = "https://example.com/tw";
} catch (e) {}
document.querySelectorAll(".geo-btn").forEach(function (btn) {
btn.onclick = function () { window.location.href = target; };
});
})();
</script>
2.5 Várias regiões(TW、US…):usar uma tabela de mapeamento para “definir diretamente a URL de destino” (versão mais curta utilizável)
A regra mais simples: prepare primeiro uma URL padrão e depois sobrescreva com a tabela de mapeamento map pelo código do país.
Se houver mapeamento, use-o; se não, use a padrão. O ponto-chave: depois de calcular target, aplique imediatamente no href do link A ou no clique do botão.
2.5.1 Para link A(id):definir href diretamente
<a id="geoLink" href="https://example.com/default">Ir agora</a>
<script>
(async function () {
const defaultUrl = "https://example.com/default";
const map = { TW: "https://example.com/tw", US: "https://example.com/us" };
try {
const info = await fetch("https://my.ipin.io/info").then(r => r.json());
const target = map[info.country] || defaultUrl;
document.getElementById("geoLink").href = target; // ✅ Chave: escrever target no href
} catch (e) {
// Se falhar, manter o href padrão
}
})();
</script>
2.5.2 Para button(id):ao clicar, navegar para target
<button id="geoBtn" type="button">Clique para ir</button>
<script>
(async function () {
const defaultUrl = "https://example.com/default";
const map = { TW: "https://example.com/tw", US: "https://example.com/us" };
let target = defaultUrl;
try {
const info = await fetch("https://my.ipin.io/info").then(r => r.json());
target = map[info.country] || defaultUrl;
} catch (e) {}
document.getElementById("geoBtn").onclick = function () {
window.location.href = target; // ✅ Chave: navegar com target no clique
};
})();
</script>
3)Implementação em WordPress / Joomla / Magento / Shopify etc.(abordagem frontend + código)
Esse tipo de “alterar destino de link A / destino de clique de button por região” na prática é inserir o script no Head global do site ou no arquivo de layout para que ele execute o mais cedo possível. Você não precisa mexer na lógica do servidor: desde que o script rode ao carregar a página, dá para preparar o destino antes do clique do usuário.
3.1 WordPress
- Usar um plugin de “inserir scripts no header/footer” e colar o script no Header(vale para o site todo)
- Ou inserir antes de
</head>no arquivo do temaheader.php
3.2 Joomla! / Joomla
- No template atual, encontrar
<head>emindex.phpe colar o script antes de</head> - Ou usar a opção do template de “código head personalizado” (varia conforme o template)
3.3 Magento
- Adicionar o script no head global do tema(área head em theme/layout)
- Objetivo: saída unificada no site todo para facilitar a manutenção das regras de mapeamento por região
3.4 Shopify
- Online Store → Themes → Edit code
- Encontrar
theme.liquide colar o script antes de</head>(vale para o site todo)
3.5 Regra geral
- Qualquer sistema que permita editar o
<head>global ou o arquivo de layout pode implementar “definir destino de links/botões por região IP” da mesma forma - Recomenda-se manter uma URL padrão para que continue funcionando quando a API externa falhar
4)Resumo
> Ao carregar a página, requisitar https://my.ipin.io/info para obter country, escolher a URL de destino conforme country e atualizar o href do link A ou o destino de navegação do clique do botão, realizando uma solução frontend de “roteamento por região IP para diferentes destinos”.
Na prática, os dois pontos mais importantes são: primeiro, colocar o script o mais cedo possível no head para concluir a configuração do destino rapidamente; segundo, sempre preparar uma URL padrão para evitar links inválidos ou botões sem resposta quando a API falhar. Mantendo bem as regras de mapeamento por região, essa solução funciona de forma estável para entradas de download, pagamento e suporte.
5)Perguntas frequentes
console.log(info) para confirmar se o country foi obtido.
window.location.href = target por window.open(target, "_blank"). Normalmente, dentro do evento de clique, o navegador não bloqueia.
{ TW: "...", US: "..." }. Se houver correspondência, usa a URL correspondente; se não, usa a URL padrão.
https://my.ipin.io/info por causa de CORS, ele não obtém country e no fim só consegue usar a URL padrão. Antes de publicar, é recomendado validar no console se a requisição está funcionando.