Basierend auf dem IP-Standort A-Link setzen, Button-Weiterleitung

Autorenname:Lisa Farrell · 2026-01-19

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.php vor </head> einfügen

3.2 Joomla! / Joomla

  • In der aktuellen Template-Datei index.php das <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.liquid finden 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

Q1:Warum leitet der Button beim Klicken nicht weiter?
Häufige Ursachen sind, dass das Skript nicht ausgeführt wurde oder die API-Anfrage fehlgeschlagen ist. Es empfiehlt sich, eine Standard-URL vorzubereiten (das ist in den Beispielen bereits enthalten) und während der Entwicklung testweise console.log(info) zu nutzen, um zu prüfen, ob country wirklich erhalten wurde.
Q2:Warum wird empfohlen, beim A-Link zuerst ein Standard-href zu setzen?
Weil Nutzer auch dann noch über den Standard-Link weiterkommen, wenn die Regions-Ermittlung fehlschlägt. Andernfalls kann es passieren: „API fehlgeschlagen → Link nicht gesetzt → Nutzer hat kein Ziel“.
Q3:Kann der Button in einem neuen Fenster öffnen?
Ja. Ersetze 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.
Q4:Was, wenn mehrere Regionen wie TW, US, JP unterstützt werden sollen?
Eine Mapping-Tabelle ist die einfachste und am besten wartbare Lösung: { TW: "...", US: "..." }. Bei Treffer wird die passende URL verwendet, ansonsten die Standard-URL.
Q5:Beeinflusst CORS diese Lösung?
Ja. Wenn der Browser das JSON von 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.