Setting up a Google Business Profile for 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1212
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    815
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    565
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    747
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    980

Configuring Google Business Profile for 1C-Bitrix

Google Business Profile (formerly Google My Business) determines what a user sees in the Knowledge Panel to the right of search results for the company name. Mismatch between site and Google profile data is one of the few SEO errors that can be fixed in a day and show results within a week.

Schema.org Markup as Foundation

Google reads organization data from the site via structured markup. This is the primary source for Knowledge Panel formation. Without correct LocalBusiness (or more specific type: Store, Restaurant, MedicalOrganization), Google uses unstructured text from the "Contacts" page — with unpredictable results.

In Bitrix, organization data is stored either in an infoblock or in custom site settings. For centralized storage — infoblock "Company Info" with symbol code company_info. Structured markup is generated in the template's 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": "US"
  },
  "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

For automatic synchronization of site data with GBP, use Google Business Profile API. Service account with OAuth 2.0 is required.

Basic request to update via cURL from Bitrix:

// Update phone number in GBP when changed in infoblock
AddEventHandler('iblock', 'OnAfterIBlockElementUpdate', function($id) {
    if (!isCompanyInfoElement($id)) return;

    $token = getGBPAccessToken(); // from saved 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 Reviews in Bitrix

GBP API allows reading reviews and displaying them on the site. This builds trust and adds User-Generated Content without moderation. Caching is mandatory — Google limits API requests:

$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'];
}

Review Markup: AggregateRating

If reviews from GBP are displayed on the site, they can be included in the AggregateRating markup in the Schema.org block. Google uses this data for stars in the search snippet. Important: you cannot use your own reviews for AggregateRating — only independent sources. Google reviews qualify.