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.
Geolokalizacja w sklepie internetowym — jak wykrywać lokalizację klienta i po co
08.10.2026 | Autor: Marcin Wiercioch
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.



