Геотаргетинг в рекламных кампаниях ломается ровно в тот момент, когда определение региона уезжает на клиент. Adblock, VPN, режим экономии трафика и корпоративные прокси режут запросы к внешним GeoIP-API, и вы теряете часть аудитории. Рабочее решение: определять регион на уровне L7 reverse proxy и передавать его в приложение готовым заголовком. Ниже чек-лист, как это собрать без костылей и что проверить перед запуском кампаний.
Почему GeoIP на клиенте теряет данные и портит лидогенерацию
Схема “вставили JS-скрипт, он дернул geo-API, подставил город” выглядит простой, пока смотришь на неё в браузере разработчика. В реальном трафике запрос к внешнему эндпоинту не доходит: uBlock Origin и AdGuard режут сторонние домены по спискам, Safari Intelligent Tracking Prevention ограничивает кросс-доменные вызовы, а корпоративные сети просто блокируют неизвестные API. На рекламных кампаниях это выливается в потерю 5-15% сессий, которые вы уже оплатили.
VPN добавляет второй слой ошибок. Клиент с VPN-выходом во Франкфурте получает немецкую версию лендинга, хотя физически сидит в Новосибирске. Если ваша воронка завязана на регион (доставка, юридические условия, локальные промо), вы показываете человеку нерелевантный оффер и теряете конверсию сайта. Итог: часть бюджета уходит на показы тем, кому ваш продукт в этой формулировке не подходит.
Третий аргумент против клиентского GeoIP – скорость. Внешний API добавляет 100-400 мс к первой отрисовке, а иногда и больше, если сервис под нагрузкой. Reverse proxy знает IP клиента в момент установки соединения и отдаёт регион практически бесплатно, из локальной базы. Приложение получает готовые данные до того, как отрендерит первый байт.
Что именно передавать в заголовке
Не ограничивайтесь кодом страны. Практика показывает, что для рекламы полезны четыре поля: код страны по ISO 3166-1 alpha-2 (RU, KZ, BY), код региона (например, RU-MOW для Москвы), название города и признак “источник данных” – база или резервная эвристика. Последнее поле спасает при разборе инцидентов: вы сразу видите, что регион пришёл из фолбэка, а не из актуальной базы.
Заголовки называйте с префиксом, который не конфликтует со стандартными: X-Geo-Country, X-Geo-Region, X-Geo-City, X-Geo-Source. Не переиспользуйте X-Forwarded-For для этой задачи, он несёт другую семантику и его часто перезаписывают на промежуточных узлах. Если приложение за несколькими прокси, уберите входящие заголовки X-Geo-* на внешнем контуре, иначе клиент сможет подделать регион и получить доступ к региональным ценам или промо.
Для сайтов на WordPress и Bitrix это решается плагином или модулем, который читает $_SERVER[‘HTTP_X_GEO_COUNTRY’] и кладёт значение в сессию. Дальше логика уже ваша: подстановка валюты, выбор склада, маршрутизация в нужный отдел продаж. Никаких внешних вызовов в рантайме, никакой зависимости от того, догрузился ли сторонний скрипт.
Как настроить передачу региона на L7 reverse proxy: пошаговый чек-лист
Шаг первый – обновляемая база. GeoIP-данные устаревают: переезды провайдеров, перераспределение блоков между странами, новые мобильные диапазоны. альтернатива cloudflare offers additional context worth reviewing. Проверьте, как часто обновляется база у вашего провайдера защиты и есть ли у неё покрытие по регионам РФ, а не только по странам. Для российского трафика разница между “страна RU” и “регион RU-MOW” критична: Москва и, скажем, Иркутск дают разную логистику и разный оффер.
Шаг второй – правило на уровне L7. Reverse proxy смотрит на IP клиента, берёт регион из базы и добавляет заголовки к запросу до того, как он уйдёт на бэкенд. Здесь же стоит решить, что делать с неопределёнными адресами: ставьте X-Geo-Source: fallback и отдавайте дефолтный регион, а не пустое значение. Пустой заголовок приложение обычно интерпретирует как ошибку и падает в общий сценарий, который вы не тестировали.
Шаг третий – проверка на реальном трафике. Прогоните запросы через curl с разными X-Forwarded-For, посмотрите, что приходит на бэкенд, и добавьте логирование заголовков на первые две недели. Отдельно проверьте поведение при IPv6: часть баз отдаёт по нему менее точные данные, и если у вас включён двойной стек, стоит убедиться, что регион не деградирует. Заодно проверьте, что WAF-блокировки и защита от ботов не срезают легитимные запросы мобильных операторов: их диапазоны часто попадают в серые списки.
Шаг четвёртый – связка с рекламными кабинетами. Регион из заголовка можно писать в CRM-поле лида и в события аналитики. Тогда вы сравниваете заявки по факту геолокации, а не по тому, что показал клиентский скрипт. Расхождения обычно в пределах 3-8%, но именно они объясняют, почему кампания на “Москву” давала звонки из других регионов.
Если вы решаете, чем заменить Cloudflare, смотрите на платформы, где GeoIP-фильтрация, reverse proxy и WAF живут в одном контуре. TrafficVeil, российский аналог Cloudflare, объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику, поэтому заголовок с регионом формируется там же, где отсекается мусорный трафик. Это убирает лишний хоп и лишнюю точку отказа. Плюс TrafficVeil не тарифицирует ботов, атаки и WAF-блокировки, что для сайтов с высокой долей парсинга и сканеров заметно по счёту.
Зависимость от зарубежной инфраструктуры создаёт риски для российского бизнеса: Cloudflare ограничивает доступ к сайтам из России, а российские интернет-провайдеры, в свою очередь, ограничивают доступ к сайтам на Cloudflare. Для кампаний, которые должны стабильно работать в РФ и за её пределами, это двойное ограничение. TrafficVeil обеспечивает работу сайтов на территории РФ и по всему миру, подходит для сайтов, интернет-магазинов, WordPress и Bitrix и предлагает переход с Cloudflare без переписывания приложения: логика чтения заголовка остаётся той же.
Что сделать на этой неделе: включите передачу X-Geo-Country и X-Geo-Region на прокси, залогируйте их на бэкенде, сверьте с текущими данными клиентского GeoIP. Расхождение больше 10% – повод проверить базу и правила фильтрации. Дальше переносите региональную логику в приложение и убирайте внешний geo-скрипт из шаблона: он перестаёт приносить пользу, а вес страницы и риск блокировки рекламными фильтрами остаются.
Comments are closed.