Manche Anwendungsfälle wollen nicht „Zugriff verbieten“, sondern ein leichteres „Geo-Routing“ umsetzen: Auf derselben Seite sollten Nutzer aus unterschiedlichen Ländern/Regionen beim Klicken auf einen Link oder Button zu unterschiedlichen Ziel-URLs gelangen. Dieses Routing wird häufig verwendet für: Zuweisung von Download-URLs, regionenspezifische Zahlungseinstiege, unterschiedliche Support-Systeme, sowie das Umschalten von Einstiegen zwischen verschiedenen Sites (International/Local) usw.
Dieser Artikel behandelt nur einen Kernpunkt: Das Frontend sendet beim Laden der Seite eine Anfrage GET https://my.ipin.io/info, um den Ländercode country des Besuchers zu erhalten,
und setzt anschließend das href eines <a> oder die Klick-Weiterleitungsadresse eines <button> auf die URL der entsprechenden Region.
Zum Beispiel kann die API Folgendes zurückgeben:
{"ip":"185.220.236.7","country":"TW","region":"Taiwan","city":"Taipei"}
1)Logik und Funktionsweise (2 Absätze)
Erster Absatz: Ablauf
Seite lädt → Frontend fragt sofort https://my.ipin.io/info an → erhält country → wählt anhand deiner Regeln die Ziel-URL (z. B. TW nutzt A-Adresse 1, US nutzt A-Adresse 2, andere Regionen nutzen eine Default-Adresse) →
aktualisiert das „Ziel“ des Links oder Buttons auf diese Ziel-URL. Erst wenn der Nutzer klickt, wird die entsprechende Adresse geöffnet.
Zweiter Absatz: Warum empfohlen wird, zuerst eine Standardadresse zu setzen und dann je Region zu überschreiben
Weil die Frontend-Umgebung instabil sein kann: Netzwerk, CORS, Ad-Blocker-Plugins und API-Timeouts können dazu führen, dass country nicht verfügbar ist. Eine robustere Vorgehensweise ist:
Auf der Seite zunächst eine standardmäßig nutzbare URL (eine generische Landingpage) zu hinterlegen und sie erst nach erfolgreicher Regions-Ermittlung durch eine regionsspezifische URL zu ersetzen. So kann die Seite selbst bei API-Fehlern weiterhin normal weiterleiten, und es entstehen keine Probleme wie „Klick ohne Reaktion / leere Adresse“.
2)Code-Implementierung (super einfach, A und Button getrennt erklärt)
2.1 A-Link (mit id): href anhand von country setzen
Szenario: Auf der Seite gibt es nur einen wichtigen Link, und du möchtest, dass er je nach Region auf unterschiedliche Ziele zeigt. Das folgende Beispiel demonstriert nur die einfachste Logik:
Wenn TW, dann den TW-Link verwenden, sonst den Standard-Link.
<a id="geoLink" href="https://example.com/default">Jetzt öffnen</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) {
// Bei Fehler den Standard-href beibehalten
}
})();
</script>
2.2 A-Links (mit class): href gesammelt anhand von country setzen
Szenario: Auf der Seite gibt es mehrere Links, die Geo-Routing benötigen. Die einfachste Methode ist: allen dieselbe class geben und dann gemeinsam aktualisieren. Das Beispiel bleibt minimal: TW nutzt den TW-Link, andere Regionen nutzen den Standard-Link.
<a class="geo-link" href="https://example.com/default">Download-Einstieg</a>
<a class="geo-link" href="https://example.com/default">Kauf-Einstieg</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 (mit id): nach Klick anhand von country weiterleiten
Szenario: Ein Button ist nicht selbst ein Link, daher musst du im Frontend ein Click-Event binden. Das folgende Beispiel behält ebenfalls nur die Kernlogik: Zuerst wird anhand von country die Ziel-URL gewählt, und beim Button-Klick wird zu dieser URL weitergeleitet.
<button id="geoBtn" type="button">Klicken zum Weiterleiten</button>
<script>
(async function () {
let target = "https://example.com/default"; // Standardadresse
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) {
// Bei Fehler die Standardadresse verwenden
}
const btn = document.getElementById("geoBtn");
if (btn) btn.onclick = function () { window.location.href = target; };
})();
</script>
2.4 Buttons (mit class): Klick-Weiterleitung gesammelt binden
Szenario: Auf der Seite gibt es mehrere Buttons, die je Region weiterleiten sollen. Die einfachste Lösung: eine gemeinsame class und dann im Loop die Click-Events binden. Hinweis: Buttons haben kein „Standard-href“, daher empfiehlt es sich, im Skript zuerst eine Standard-URL vorzubereiten, damit bei API-Fehlern der Button nicht „ohne Reaktion“ bleibt.
<button class="geo-btn" type="button">Button 1</button>
<button class="geo-btn" type="button">Button 2</button>
<script>
(async function () {
let target = "https://example.com/default"; // Standardadresse
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 Mehrere Regionen (TW, US…): Ziel-URL per Mapping-Tabelle „direkt setzen“ (kürzeste brauchbare Version)
Die einfachste Regel: zuerst eine Standard-URL festlegen, dann per Mapping-Tabelle map anhand des Ländercodes überschreiben.
Gibt es ein Mapping, wird es genutzt; sonst die Standard-URL. Der entscheidende Punkt: nachdem target berechnet ist, muss es sofort auf das href eines A-Links oder auf den Click-Handler eines Buttons angewendet werden.
2.5.1 Für A-Link (id): href direkt setzen
<a id="geoLink" href="https://example.com/default">Jetzt öffnen</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; // ✅ Wichtig: target in href schreiben
} catch (e) {
// Bei Fehler: Standard-href beibehalten
}
})();
</script>
2.5.2 Für Button (id): beim Klick zu target wechseln
<button id="geoBtn" type="button">Klicken zum Öffnen</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; // ✅ Wichtig: beim Klick mit target navigieren
};
})();
</script>
3)Umsetzung in WordPress / Joomla / Magento / Shopify usw. (Frontend-Ansatz + Code)
Bei dieser Art von „A-Link-Ziel / Button-Weiterleitungsziel je Region ändern“ geht es im Kern darum, das Skript in den globalen Head oder die Layout-Datei der gesamten Site einzufügen, damit es so früh wie möglich ausgeführt wird. Du musst keine Backend-Logik anpassen; solange das Skript beim Laden der Seite läuft, kannst du das Ziel bereits vor dem Klick des Nutzers vorbereiten.
3.1 WordPress
- Mit einem Plugin zum „Einfügen von Header/Footer-Skripten“ das Skript in den Header einfügen (siteweit)
- Oder das Skript in der Theme-Datei
header.phpvor</head>einfügen
3.2 Joomla! / Joomla
- In der aktuellen Template-Datei
index.phpdas<head>finden und das Skript vor</head>einfügen - Oder einen Template-Optionseintrag für „Custom Head Code“ nutzen (je nach Template unterschiedlich)
3.3 Magento
- Das Skript in den globalen Head des Themes einfügen (Head-Bereich in Theme/Layout)
- Ziel ist eine siteweite Ausgabe, damit du Regions-Mapping-Regeln zentral pflegen kannst
3.4 Shopify
- Online Store → Themes → Edit code
theme.liquidfinden und das Skript vor</head>einfügen (siteweit)
3.5 Allgemeine Regel
- Jedes System, das das Bearbeiten des globalen
<head>oder der Layout-Datei erlaubt, kann „Ziele für Links/Buttons nach IP-Region setzen“ auf die gleiche Weise umsetzen - Eine Standard-URL beibehalten, damit die Seite bei Ausfall der externen API weiterhin nutzbar bleibt
4)Zusammenfassung
> Beim Laden der Seite wird https://my.ipin.io/info angefragt, um country zu erhalten. Danach wird anhand von country eine Ziel-URL gewählt und entweder das href des A-Links oder die Klick-Weiterleitungsadresse des Buttons aktualisiert, wodurch eine Frontend-Lösung für „Weiterleitung zu unterschiedlichen Zielen je IP-Region“ entsteht.
In der Praxis sind die zwei wichtigsten Punkte: Erstens, das Skript möglichst weit vorne im Head platzieren, damit das Ziel früh gesetzt ist; zweitens, immer eine Standard-URL bereithalten, um ungültige Links oder nicht reagierende Buttons bei API-Fehlern zu vermeiden. Solange du deine Regions-Mapping-Regeln gut pflegst, funktioniert diese Lösung stabil für Download-Einstiege, Zahlungseinstiege und Support-Einstiege.
5)Häufige Fragen
console.log(info) zu nutzen, um zu prüfen, ob country wirklich erhalten wurde.
window.location.href = target durch window.open(target, "_blank"). Wenn es innerhalb eines Klick-Events ausgelöst wird, wird es in der Regel nicht vom Browser blockiert.
{ TW: "...", US: "..." }. Bei Treffer wird die passende URL verwendet, ansonsten die Standard-URL.
https://my.ipin.io/info aufgrund von CORS nicht lesen kann, kann er country nicht erhalten und fällt letztlich auf die Standard-URL zurück. Vor dem Livegang wird empfohlen, in der Konsole zu prüfen, ob die Anfrage erfolgreich ist.