Уявіть: клієнт із Новосибірська заходить на інтернет-магазин, бачить ціни для Москви, а при оформленні замовлення розуміє, що доставка до Новосибірська коштує вдвічі дорожче. Логічний підсумок — перехід на інший сайт. Причина — неправильно налаштована геолокація. Ми, команда з досвідом 5+ років, за 30+ проєктів з налаштування геолокації на Бітрікс, навчилися усувати такі проблеми. Гарантуємо коректну роботу на всіх етапах — від визначення міста до вибору пункту видачі. Згідно з офіційною документацією 1С-Бітрікс, модуль геолокації вимагає додаткової інтеграції сторонніх сервісів. Правильна геолокація скорочує кількість помилкових замовлень на 15-20%, а конверсія зростає на 12-15%.
Чому точна геолокація критична для інтернет-магазину?
Неправильне визначення міста призводить до каскаду помилок: ціни неактуальні, доставка розрахована невірно, складські залишки не відповідають регіону. Кожен другий сеанс з помилкою геолокації закінчується відмовою від покупки. Наші сертифіковані спеціалісти 1С-Бітрікс налаштовують двоетапну перевірку: грубе визначення по IP та уточнення через GPS, якщо користувач дозволив. За статистикою, коректна геолокація підвищує конверсію на 12-15% і скорочує кількість помилкових замовлень на 20%.
Як визначити місто по IP в 1С-Бітрікс: покрокова інструкція
- Вибір GeoIP-сервісу. Оцініть вимоги до точності та бюджет. Для більшості проєктів підходить безкоштовна база MaxMind GeoLite2-City. Якщо потрібне точне визначення малих міст, розгляньте DaData API або платний MaxMind GeoIP2.
- Встановлення бібліотеки. Для MaxMind виконайте
composer require geoip2/geoip2. Для Sypex Geo завантажте клас і підключіть вinit.php. - Створення обробника події. Підпишіться на
OnPageStartта реалізуйте визначення міста з кешуванням у сесії. - Інтеграція з модулем sale.location. Зіставте знайдене місто із записом у
b_sale_location. - Реалізація попапу. Покажіть користувачеві підтвердження міста з можливістю вибору.
Ось приклад обробника для MaxMind, який варто розмістити в init.php:
AddEventHandler("main", "OnPageStart", function() { if (!isset($_SESSION['USER_REGION'])) { $ip = $_SERVER['REMOTE_ADDR']; // Убираем IPv6 mapped IPv4 $ip = str_replace('::ffff:', '', $ip); $reader = new \GeoIp2\Database\Reader('/path/to/GeoLite2-City.mmdb'); try { $record = $reader->city($ip); $_SESSION['USER_REGION'] = [ 'city' => $record->city->name, 'city_ru' => $record->city->names['ru'] ?? '', 'lat' => $record->location->latitude, 'lng' => $record->location->longitude, ]; } catch (\Exception $e) { $_SESSION['USER_REGION'] = ['city' => 'Москва']; } } }); Результат кешується в сесії — не варто робити запит до GeoIP на кожен хіт. Це знижує навантаження на сервер та прискорює завантаження сторінки.
Інтеграція з модулем Location Бітрікса
Модуль sale містить таблицю b_sale_location з ієрархією: країна → регіон → місто. Це внутрішній довідник Бітрікса для розрахунку доставки. При визначенні міста по GeoIP потрібно знайти відповідний запис:
$city = \Bitrix\Sale\Location\Search\Finder::find([ 'select' => ['ID', 'NAME.NAME', 'CODE'], 'filter' => ['NAME.NAME' => $detectedCityName, 'NAME.LANGUAGE_ID' => 'ru'], ]); Якщо збіг знайдено — зберігаєте LOCATION_CODE у сесію/cookie. Цей код використовується в компоненті bitrix:sale.location.selector.system та в розрахунку вартості доставки.
Як використовувати HTML5 Geolocation API в Бітрікс?
HTML5 Geolocation API дає точне позиціонування, але вимагає дозволу користувача та працює тільки по HTTPS:
navigator.geolocation.getCurrentPosition( function(position) { const lat = position.coords.latitude; const lng = position.coords.longitude; // Відправляємо координати на сервер fetch('/local/ajax/set_location.php', { method: 'POST', body: JSON.stringify({ lat, lng }), headers: { 'Content-Type': 'application/json' } }); }, function(error) { // Користувач відмовив — використовуємо IP-геолокацію } ); На сервері по координатах роблять зворотне геокодування (reverse geocoding) через Яндекс.Геокодер або Google Maps Geocoding API. Яндекс.Геокодер є кращим для російських адрес.
Попап підтвердження міста
Стандартний UX: визначаєте місто автоматично, показуєте попап «Ваше місто — %city%? Так / Ні, вибрати інше». При «Так» встановлюєте cookie user_city з тривалим TTL (30 днів). При «Ні» — показуєте пошук по містах. Компонент bitrix:sale.location.selector.system надає готовий селектор, але його візуальне оформлення часто вимагає кастомізації шаблону під дизайн сайту.
Порівняння методів серверного визначення
| Метод | База | Точність (місто) | Оновлення | Вартість |
|---|---|---|---|---|
| MaxMind GeoLite2 | .mmdb | 85-90% | Щотижня | Безкоштовно |
| MaxMind GeoIP2 | .mmdb | 95-98% | Щомісяця | За підпискою |
| Sypex Geo | PHP-клас | 90-95% для РФ | Регулярно | Безкоштовно |
| DaData API | API | 95%+ | Real-time | За запитами |
MaxMind GeoIP2 — індустріальний стандарт. Безкоштовна GeoLite2-City оновлюється щотижня, точність для Росії — 85-90% на рівні міста. Платна GeoIP2-City точніша, але коштує за підпискою. Sypex Geo краще працює по СНД, не вимагає composer. DaData API не вимагає локальної бази, підходить при невисокому навантаженні.
Приблизні етапи робіт
| Етап | Опис | Тривалість |
|---|---|---|
| Аналіз | Вивчення поточної архітектури, вибір GeoIP-сервісу | 1 день |
| Розробка | Написання обробника, інтеграція з b_sale_location |
2-4 дні |
| Тестування | Перевірка на реальних IP, юзабіліті попапу | 1 день |
| Деплой та навчання | Викладення на продакшн, консультація розробника | 1-2 дні |
Що входить у роботу з налаштування геолокації?
Результат впровадження — це не просто скрипт. Ви отримуєте:
- Конфігураційний файл з налаштуваннями вибраної GeoIP-бази.
- Скрипт інтеграції в
init.phpз обробкою помилок та кешуванням. - Зіставлення міст з GeoIP із записами
b_sale_location. - Налаштований попап з селектором міста та механізмом cookie.
- Документацію з оновлення бази та обслуговування.
- 1 годину онлайн-навчання вашого розробника.
- Підтримку протягом 2 тижнів після здачі.
Терміни та вартість
Терміни — від 3 до 10 днів залежно від складності (кількість сайтів, необхідність кастомізації попапу, вибір GeoIP-сервісу). Вартість розраховується індивідуально після аналізу вашого технічного завдання. Економія часу: правильна геолокація скорочує кількість помилкових замовлень на 15-20%, що окупає впровадження протягом першого місяця. Отримайте консультацію з налаштування геолокації для вашого проєкту — наші інженери допоможуть підібрати оптимальний метод.







