Настройка Google Business Profile для 1С-Битрикс
Google Business Profile (бывший Google My Business) определяет, что пользователь видит в Knowledge Panel справа от результатов поиска по названию компании. Несоответствие данных между сайтом и профилем Google — одна из немногих SEO-ошибок, которую можно исправить за день и получить результат в течение недели.
Разметка Schema.org как основа
Google читает данные об организации с сайта через структурированную разметку. Это первичный источник для формирования Knowledge Panel. Без корректного LocalBusiness (или более специфичного типа: Store, Restaurant, MedicalOrganization) Google использует неструктурированный текст со страницы «Контакты» — с непредсказуемыми результатами.
В Битриксе данные организации хранятся либо в инфоблоке, либо в пользовательских настройках сайта. Для централизованного хранения — инфоблок «Реквизиты» с символьным кодом company_info. Структурированная разметка генерируется в footer.php шаблона:
<?php
$arCompany = \CIBlockElement::GetList(
[],
['IBLOCK_CODE' => 'company_info', 'ACTIVE' => 'Y'],
false,
['nTopCount' => 1],
['ID', 'PROPERTY_*']
)->GetNextElement()?->GetProperties();
?>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Store",
"name": "<?= COption::GetOptionString('main', 'site_name') ?>",
"telephone": "<?= htmlspecialcharsEx($arCompany['PHONE']['VALUE']) ?>",
"email": "<?= htmlspecialcharsEx($arCompany['EMAIL']['VALUE']) ?>",
"address": {
"@type": "PostalAddress",
"streetAddress": "<?= htmlspecialcharsEx($arCompany['ADDRESS']['VALUE']) ?>",
"addressLocality": "<?= htmlspecialcharsEx($arCompany['CITY']['VALUE']) ?>",
"postalCode": "<?= htmlspecialcharsEx($arCompany['ZIP']['VALUE']) ?>",
"addressCountry": "RU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": <?= (float)$arCompany['LAT']['VALUE'] ?>,
"longitude": <?= (float)$arCompany['LON']['VALUE'] ?>
},
"sameAs": [
"<?= htmlspecialcharsEx($arCompany['VK_URL']['VALUE']) ?>",
"<?= htmlspecialcharsEx($arCompany['TG_URL']['VALUE']) ?>"
]
}
</script>
Google Business Profile API
Для автоматической синхронизации данных сайта с GBP используется Google My Business API (сейчас — Google Business Profile API). Нужен сервисный аккаунт с OAuth 2.0.
Базовый запрос на обновление через cURL из Битрикса:
// Обновить номер телефона в GBP при изменении в инфоблоке
AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function($id) {
if (!isCompanyInfoElement($id)) return;
$token = getGBPAccessToken(); // из сохранённого refresh_token
$locationName = 'accounts/{ACCOUNT_ID}/locations/{LOCATION_ID}';
$data = ['phoneNumbers' => ['primaryPhone' => getNewPhone($id)]];
$ch = curl_init("https://mybusinessbusinessinformation.googleapis.com/v1/{$locationName}?updateMask=phoneNumbers");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
],
CURLOPT_RETURNTRANSFER => true,
]);
curl_exec($ch);
curl_close($ch);
});
Отзывы Google в Битриксе
GBP API позволяет читать отзывы и выводить их на сайте. Это увеличивает доверие и добавляет User-Generated Content без модерации. Кеширование обязательно — Google ограничивает количество запросов к API:
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheKey = 'gbp_reviews';
if ($cache->startDataCache(3600 * 6, $cacheKey, '/gbp')) {
$reviews = fetchReviewsFromGBP($locationName, $token);
$cache->endDataCache(['reviews' => $reviews]);
} else {
$reviews = $cache->getVars()['reviews'];
}
Разметка отзывов: AggregateRating
Если отзывы из GBP выводятся на сайте, их можно включить в разметку AggregateRating в блоке Schema.org. Google использует эти данные для звёздочек в сниппете поиска. Важно: нельзя использовать собственные отзывы для AggregateRating — только независимые источники. Отзывы Google подходят.







