Настройка Яндекс.Справочник для 1С-Битрикс
Яндекс.Справочник — это источник данных для карточки организации в Яндекс.Картах, поиске и других сервисах. Проблема большинства битриксовых сайтов: данные об организации хранятся разрозненно — телефон в одном месте шаблона, адрес в другом, время работы нигде, а НАП (NAP: Name, Address, Phone) на сайте не совпадает с данными в Справочнике. Поисковые системы используют согласованность НАП как сигнал локального ранжирования.
Structured Data LocalBusiness в Битриксе
До работы со Справочником нужно разобраться с разметкой на самом сайте. Schema.org LocalBusiness — это то, что сканируется поисковиком и сравнивается с данными агрегаторов. В Битриксе разметка добавляется в шаблон или компонент.
Данные об организации лучше хранить в настройках сайта или в инфоблоке «Контакты» — не хардкодить в шаблоне:
// Получить данные из инфоблока "Контакты"
$contacts = \CIBlockElement::GetList(
[],
['IBLOCK_CODE' => 'contacts', 'ACTIVE' => 'Y'],
false,
['nTopCount' => 1],
['ID', 'NAME', 'PROPERTY_PHONE', 'PROPERTY_ADDRESS', 'PROPERTY_HOURS']
)->GetNextElement()->GetFields();
JSON-LD в footer.php шаблона:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "<?= htmlspecialcharsEx($siteName) ?>",
"telephone": "<?= htmlspecialcharsEx($contacts['PROPERTY_PHONE_VALUE']) ?>",
"address": {
"@type": "PostalAddress",
"streetAddress": "<?= htmlspecialcharsEx($contacts['PROPERTY_ADDRESS_VALUE']) ?>",
"addressLocality": "Москва",
"addressCountry": "RU"
},
"openingHours": "<?= htmlspecialcharsEx($contacts['PROPERTY_HOURS_VALUE']) ?>",
"url": "https://<?= SITE_SERVER_NAME ?>"
}
</script>
Автоматическая синхронизация с API Справочника
Яндекс.Справочник имеет API для массового управления организациями. Для сайта с одной точкой это избыточно, но для сети магазинов — обязательно. API работает через REST:
POST https://api.business.yandex.net/v1/companies/{company_id}
Authorization: OAuth {token}
Content-Type: application/json
{
"name": "Название",
"phones": [{"number": "+7 495 123-45-67"}],
"address": {
"country_code": "RU",
"locality": "Москва",
"street": "Тверская",
"housenumber": "1"
},
"work_intervals": [
{"day": "MON", "time_minutes_begin": 540, "time_minutes_end": 1200}
]
}
В Битриксе синхронизация запускается агентом при изменении данных в инфоблоке — через событие OnAfterIBlockElementUpdate.
Виджет карты на сайте
Яндекс.Карты встраиваются через API или через стандартный iframe-виджет. Для Битрикса рекомендуется использовать JavaScript API Яндекс.Карт с ленивой инициализацией — карта загружается только когда пользователь прокручивает до неё:
const mapSection = document.getElementById('yandex-map');
const observer = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting) {
loadYandexMap();
observer.disconnect();
}
}, { threshold: 0.1 });
observer.observe(mapSection);
function loadYandexMap() {
const script = document.createElement('script');
script.src = 'https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=YOUR_KEY';
script.onload = initMap;
document.head.appendChild(script);
}
Это предотвращает загрузку 300KB JavaScript API Яндекс.Карт при каждом посещении страницы «Контакты».
Мониторинг актуальности данных
После синхронизации данные в Справочнике проходят модерацию — от нескольких часов до нескольких дней. Автоматически проверить соответствие между сайтом и Справочником можно через https://yandex.ru/maps/org/{company_id}/info/ — сравнить данные программно или вручную раз в месяц. Расхождение в телефоне, адресе или времени работы между сайтом и Справочником негативно влияет на локальное SEO.







