Geolokalizacja w sklepie internetowym — jak wykrywać lokalizację klienta i po co

08.10.2026 | Autor: Marcin Wiercioch

Klient z Berlina wchodzi do Twojego sklepu i widzi ceny w złotówkach, koszty dostawy do Polski i regulamin po polsku. Statystycznie właśnie go straciłeś. Geolokalizacja — czyli wykrywanie, skąd łączy się użytkownik — pozwala reagować na to automatycznie: przełączyć walutę, pokazać właściwe metody dostawy, policzyć podatek. W tym artykule porządkujemy temat od strony praktycznej: jak wykrywać lokalizację, po co właściwie to robić, co działa dobrze, a co jest mitem — oraz ile kosztują poszczególne rozwiązania, od zupełnie darmowych po komercyjne bazy.

Po co sklepowi lokalizacja klienta?

  • Waluta i język — zaproponowanie EUR i niemieckiej wersji odwiedzającemu z Niemiec to najniżej wiszący owoc konwersji,
  • dostawa — pokazanie od razu właściwych przewoźników i kosztów (a w Polsce: mapy Paczkomatów w okolicy klienta),
  • podatki — przy sprzedaży B2C do krajów UE procedura VAT-OSS wymaga naliczania stawki kraju konsumenta; kraj trzeba czymś ustalić,
  • treści regionalne — promocje, dostępność produktów, zgodność z lokalnym prawem,
  • bezpieczeństwo — zamówienie z karty polskiego banku składane z drugiego końca świata to sygnał do dodatkowej weryfikacji.

Metoda 1: GeoIP, czyli lokalizacja po adresie IP

Podstawowa i najczęściej wystarczająca technika: adres IP odwiedzającego sprawdzamy w bazie przypisującej zakresy adresów do krajów i miast. Kluczowa rzecz, którą trzeba rozumieć: na poziomie kraju GeoIP jest bardzo skuteczne (dokładność rzędu 98–99%), ale na poziomie miasta bywa loterią. Sieci komórkowe i CGNAT potrafią „umieścić” użytkownika z Wrocławia w Warszawie, bo tam stoi brama operatora. Wniosek projektowy: podejmuj po IP decyzje krajowe (waluta, VAT, język), nigdy uliczne.

Metoda 2: nagłówek od CDN — najtańsze dobre rozwiązanie

Jeśli strona stoi za Cloudflare (albo innym CDN-em), problem jest w zasadzie rozwiązany: Cloudflare sam ustala kraj każdego żądania i przekazuje go w nagłówku CF-IPCountry. Zero baz do aktualizowania, zero opóźnień, koszt zerowy:

function okinet_customer_country(): string {
    // dwuliterowy kod ISO, np. PL, DE, XX gdy nieznany
    $country = $_SERVER["HTTP_CF_IPCOUNTRY"] ?? "";
    if ($country === "" || $country === "XX" || $country === "T1") {
        return "PL"; // rozsądny domyślny
    }
    return strtoupper($country);
}

if (okinet_customer_country() !== "PL") {
    // pokaż baner z propozycją zmiany waluty/języka
}

W planach płatnych Cloudflare potrafi dodać też miasto i region. Uwaga praktyczna: nagłówek ustawia CDN, więc gdy testujesz lokalnie (bez proxy), pole będzie puste — stąd wartość domyślna.

Metoda 3: HTML5 Geolocation API — GPS za zgodą

Przeglądarkowe API potrafi podać współrzędne z dokładnością do metrów, ale wymaga jawnej zgody użytkownika (wyskakujące pytanie przeglądarki). To narzędzie do konkretnych funkcji — „pokaż najbliższe Paczkomaty”, „znajdź salon w Twojej okolicy” — a nie do cichego profilowania:

document.querySelector("#find-pickup-point").addEventListener("click", function () {
  navigator.geolocation.getCurrentPosition(
    function (pos) {
      showPickupPoints(pos.coords.latitude, pos.coords.longitude);
    },
    function (err) {
      // odmowa zgody lub brak sygnału: fallback na kod pocztowy
      showZipCodeForm();
    },
    { enableHighAccuracy: false, timeout: 8000 }
  );
});

Dwie żelazne zasady: pytaj o lokalizację dopiero po akcji użytkownika (przycisk), nie przy wejściu na stronę, i zawsze miej fallback — spora część osób odmówi.

Metoda 4: pozwól klientowi powiedzieć samemu

Najbardziej niezawodny „detektor” to selektor kraju w nagłówku sklepu, zapamiętany w ciasteczku. Geolokalizacja powinna tylko podpowiadać wartość domyślną — decyzję zostawiamy człowiekowi. Antywzorzec, który wciąż widujemy: sztywne przekierowanie na wersję językową po IP, bez możliwości zmiany. Turysta z niemieckim SIM-em nie kupi u Ciebie, jeśli nie da się wrócić do polskiej wersji.

Co działa, a co nie — ściąga

  • kraj z IP / nagłówka CDN — skuteczne, rób śmiało (waluta, język, VAT),
  • miasto z IP — zawodne; nadaje się co najwyżej do sortowania listy salonów, nigdy do decyzji,
  • Accept-Language — to preferencja językowa przeglądarki, nie lokalizacja; świetne do wyboru języka, mylące jako „skąd jest klient”,
  • VPN i proxy — kilka procent ruchu zawsze będzie „nie stamtąd”; dlatego sugeruj, nie wymuszaj,
  • automatyczne przekierowania po IP — groźne także dla SEO: Googlebot indeksuje głównie z USA i może nigdy nie zobaczyć polskiej wersji; lepszy jest baner z propozycją,
  • cache a personalizacja — jeśli strona jest cache’owana, warianty per kraj muszą być rozdzielone (klucz cache z krajem albo personalizacja JS-em/edge workerem) — inaczej Niemiec zobaczy stronę „polską z cache”.

Rozwiązania darmowe

  • Cloudflare CF-IPCountry — darmowy na każdym planie; jeśli używacie Cloudflare, zacznijcie tutaj,
  • MaxMind GeoLite2 — bezpłatne bazy (kraj/miasto) do pobrania po rejestracji, aktualizowane co tydzień; mniej dokładne niż wersja płatna, ale do decyzji krajowych w zupełności wystarczą,
  • ip-api.com — proste API JSON, darmowe do użytku niekomercyjnego (limit zapytań),
  • ipapi.co / ipinfo.io (free tier) — ograniczone pule darmowych zapytań miesięcznie, wygodne do prototypów.

Praca z lokalną bazą GeoLite2 w PHP to kilka linijek z oficjalną biblioteką:

require "vendor/autoload.php";
use GeoIp2\Database\Reader;

$reader = new Reader("/var/lib/geoip/GeoLite2-Country.mmdb");
try {
    $record = $reader->country($_SERVER["REMOTE_ADDR"]);
    $country = $record->country->isoCode; // np. "DE"
} catch (Exception $e) {
    $country = "PL";
}

Rozwiązania płatne

  • MaxMind GeoIP2 — komercyjne bazy i API; wyższa dokładność, dane o ISP i typie połączenia; standard branżowy, ceny od kilkudziesięciu dolarów,
  • ipinfo.io / ipdata.co — API z bogatym kontekstem (ASN, wykrywanie VPN/proxy — przydatne antyfraudowo), abonamenty zależne od wolumenu,
  • IP2Location — alternatywne bazy do pobrania, licencje roczne,
  • Google Geolocation API — lokalizacja po sieciach Wi-Fi i nadajnikach — świetna w aplikacjach mobilnych, w klasycznym sklepie WWW rzadko potrzebna.

Dobra wiadomość dla sklepów na WooCommerce: wbudowana integracja z MaxMind obsługuje geolokalizację podatków i domyślnego kraju klienta „z pudełka” (wraz z trybem zgodnym z cache stron) — wystarczy klucz licencyjny GeoLite2. Przy sklepach na Sylius czy rozwiązaniach dedykowanych analogiczną logikę wpinamy w warstwę aplikacji albo — najwydajniej — na edge’u, o czym pisaliśmy w artykule o Cloudflare Workers.

Blokowanie ruchu z niechcianych krajów

Geolokalizacja działa też w drugą stronę: czasami ruch z części świata trzeba ograniczyć. Powody bywają prawne i praktyczne: towar z licencją wyłącznie na Polskę (wydawnictwa, suplementy, produkty z ograniczeniami regionalnymi), usługi świadczone tylko w jednym kraju, ale też zwykła higiena — fale botów, spamu w formularzach i prób logowania przychodzą zwykle z kilku konkretnych regionów, z których i tak nie ma ani jednego klienta.

Jak to robić dobrze:

  • na poziomie zapory (najskuteczniej) — reguły WAF w Cloudflare blokują lub kierują na dodatkową weryfikację (challenge) ruch z wybranych krajów, zanim w ogóle dotrze do serwera; podobne możliwości dają moduły GeoIP dla nginx i Apache,
  • na poziomie aplikacji (najprzyjaźniej) — zamiast blokować całą stronę, ogranicz samą transakcję: pozwól przeglądać katalog, a przy kasie poinformuj, że dostawa możliwa jest wyłącznie do Polski; pełna blokada odcina też tych, którzy kupują na polski adres, siedząc akurat za granicą,
  • challenge zamiast twardej blokady — dla „szarych” kierunków lepsza jest weryfikacja (np. managed challenge) niż odcięcie: człowiek przejdzie, bot nie.

O czym pamiętać: blokada po kraju to filtr masowego szumu, nie zabezpieczenie prawne — VPN omija ją w minutę, więc formalną ochronę zapewnia regulamin i walidacja adresu dostawy. Nie blokuj też na ślepo ruchu z USA — stamtąd indeksuje Googlebot i łączą się systemy płatności; dodawaj wyjątki dla zweryfikowanych botów. I loguj odrzucone żądania, żeby wiedzieć, kogo faktycznie odcinasz.

Podsumowanie

Geolokalizacja w e-commerce to nie jedna technologia, tylko drabinka: nagłówek od CDN albo GeoLite2 do decyzji krajowych, Geolocation API tam, gdzie użytkownik świadomie chce podać dokładne położenie, i zawsze — możliwość ręcznej zmiany. Wdrożona z głową podnosi konwersję na rynkach zagranicznych i porządkuje podatki; wdrożona siłowo — irytuje i psuje SEO. Planujesz sprzedaż zagraniczną albo chcesz dodać wykrywanie kraju do swojego sklepu? Chętnie pomożemy.

Marcin Wiercioch Marcin Wiercioch

full stack developer

Współzałożyciel Okinet, programista PHP, Full stack developer, administrator linux i pasjonat technologii z 20 letnim stażem. Ostatnimi czasy szczególnie rozwijam umiejętności związane z optymalizacją i automatyzacją środowisk developerskich dzięki czemu budowane przez nas aplikacje internetowe są wydajne, bezpieczne i łatwo rozwijalne.

Wszystkie artykuły autora

Udostępnij

Oceń artykuł

Porozmawiaj z nami
o swoim projekcie

+48 506 160 480
biuro@okinet.pl

lub napisz