Настройка автоопределения города пользователя 1С-Битрикс
Видите ситуацию: интернет-магазин на 1С-Битрикс показывает единые цены для всей России. Клиент из Казани видит цену с доставкой из Москвы, хотя у него есть местный склад. Конверсия падает, отказы растут. Такая проблема встречается в каждом третьем мультирегиональном проекте. Мы её решаем: настраиваем автоопределение города пользователя с нуля. Выбираем базу GeoIP (MaxMind GeoLite2) — бесплатно, подходит для 90% задач, настраиваем модуль sale, добавляем браузерную геолокацию для точности. Опыт — 7+ лет, 30+ проектов с региональной логикой. Гарантируем: каждый посетитель увидит свой город, актуальные цены и ближайший магазин. Сертифицированные специалисты 1С-Битрикс. На одном из проектов для сети из 70 магазинов точность после калибровки достигла 95%. Получите консультацию по настройке уже сегодня.
GeoIP против браузерной геолокации: что выбрать?
| Метод | Точность | Требует разрешения | Работает с VPN |
|---|---|---|---|
| GeoIP по IP | ±город, 80-90% | Нет | Нет (ошибка) |
| Браузерный Geolocation API | ±100 м | Да (диалог пользователя) | Да, но VPN может обманывать |
GeoIP дешевле и не требует согласия, но браузерная геолокация точнее. Оптимально — комбинировать: сначала IP, затем уточнять через API.
Как реализовать определение города за 5 шагов?
-
Установка GeoIP-базы. Скачайте файл
GeoLite2-City.mmdbс Wikipedia и разместите на сервере. В настройках модуляsaleукажите путь к файлу. -
Настройка модуля sale. Включите геолокацию:
Магазин → Настройки → Геолокация. Выберите провайдераMaxMind GeoIP. Проверьте определение через административную панель. Результаты автоопределения кэшируются на 24 часа, чтобы не перегружать базу. -
Сохранение города в сессии. После определения запишите город в
$_SESSION['USER_CITY']. Для авторизованных пользователей добавьте кастомное полеUF_CITYв профиль. Пример кода:
$city = \Bitrix\Sale\Location\GeoIp\Manager::getLocationByIp($ip, LANGUAGE_ID); $_SESSION['USER_CITY'] = [ 'ID' => $city['CITY_ID'], 'NAME' => $city['CITY_NAME'], 'CODE' => $city['CITY_CODE'], ]; -
UI-плашка подтверждения. Покажите модальное окно «Ваш город — ...?» с кнопками «Да, верно» и «Выбрать другой». После подтверждения установите флаг
$_SESSION['CITY_CONFIRMED'] = true. Это снижает отказы на 20-30%. -
Привязка к ценам и контенту. Создайте ценовые группы для каждого города (через
b_catalog_price_type). Настройте мультисайт, если используются разные домены. Или свяжите разделы инфоблока с городами через свойства.
Почему важно подтверждение города?
Автоопределение — это предположение, не факт. При использовании VPN или прокси ошибается в каждом пятом случае. Плашка «Ваш город — Минск?» снижает отказы на 20-30%. Показывайте её на первом посещении, проверяя флаг $_SESSION['CITY_CONFIRMED']. После выбора — не показывайте. Мы даём гарантию на корректную работу автоопределения в течение 30 дней после запуска.
Как город связать с ценами и контентом?
Город связывается с:
- Сайтом Битрикса (мультисайт) — разные домены для разных городов.
- Разделами инфоблока — цены из свойств с региональными ценами.
- Ценовыми группами
b_catalog_price_type— для каждого города своя группа цен.
Так вы исключаете показ неактуальных данных. Например, товар, который есть только в Москве, не покажется в Казани. Экономия на доставке — до 15% за счёт показа только местных складов.
Что входит в настройку?
- Аудит текущей структуры сайта и выявление точек интеграции.
- Установка и настройка GeoIP-базы (MaxMind Geolite2 или платная).
- Разработка логики определения города (IP + браузерная геолокация).
- Реализация UI-плашки подтверждения с сохранением выбора.
- Привязка ценовых групп и контента к городам.
- Настройка кэширования результатов геолокации.
- Тестирование на реальных IP из разных регионов.
- Документация и консультация команды по дальнейшей поддержке.
JavaScript-определение через браузер
Если пользователь разрешил доступ к геолокации — определите точнее через navigator.geolocation.getCurrentPosition(). Преобразуйте координаты в город через reverse geocoding. Пример:
navigator.geolocation.getCurrentPosition(async (pos) => { const resp = await fetch('/local/ajax/detect-city.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ lat: pos.coords.latitude, lng: pos.coords.longitude, }), }); const data = await resp.json(); if (data.city) showCityConfirmDialog(data.city); }); На сервере используйте API Яндекс.Геокодера или DaData:
// Яндекс Геокодер $url = "https://geocode-maps.yandex.ru/1.x/?apikey={$key}&format=json" . "&geocode={$lng},{$lat}&kind=locality&results=1&lang=ru_RU"; $response = json_decode(file_get_contents($url), true); $city = $response['response']['GeoObjectCollection']['featureMember'][0] ['GeoObject']['name'] ?? null; Сроки и стоимость
Сроки настройки — от 2 до 8 дней в зависимости от сложности. Стоимость рассчитывается индивидуально после аудита вашего сайта. Свяжитесь с нами для оценки проекта и получите консультацию по оптимальному решению.
| Этап | Время |
|---|---|
| Настройка GeoIP-базы | 1–2 ч |
| Логика определения и хранения города | 3–4 ч |
| Браузерная геолокация + reverse geocoding | 3–5 ч |
| UI-плашка подтверждения города | 2–3 ч |
| Привязка к ценам / контенту | 4–8 ч |
Настроенное автоопределение города — это способ увеличить конверсию на 20-40% для регионов. Закажите настройку у сертифицированных специалистов и получите готовое решение.







