Інтеграція 1С-Бітрікс з Google Shopping Ads

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Інтеграція 1С-Бітрікс з Google Shopping Ads
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс з Google Shopping Ads

Google Shopping показує товарні оголошення із зображенням, ціною та назвою прямо у пошуковій видачі. Для роботи потрібен ланцюжок: Бітрікс → Google Merchant Center → Google Ads. Слабка ланка — фід: якщо ціни у фіді розходяться з цінами на сайті, Google відхиляє товари й оголошення не показуються. Інтеграція — це не разове вивантаження, а автоматичне оновлення фіда з моніторингом статусів товарів у Merchant Center.

Архітектура інтеграції

[Каталог Бітрікс]
      ↓
[Генератор фіда: PHP-скрипт або модуль]
      ↓
[XML-фід на хостингу / S3]
      ↓
[Google Merchant Center: імпорт за розкладом]
      ↓
[Google Ads: товарні кампанії]

Фід оновлюється на стороні Бітрікс, Google Merchant Center забирає його по URL із заданою частотою (раз на 24–72 години або примусово через Content API).

Структура Google Shopping фіда (Merchant Center)

Google вимагає формат Google Shopping XML (або TSV). Обов'язкові поля:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>Мій магазин</title>
    <link>https://your-site.ua</link>
    <item>
      <g:id>PRODUCT-SKU-123</g:id>
      <g:title>Назва товару (150 симв. макс.)</g:title>
      <g:description>Детальний опис для реклами</g:description>
      <g:link>https://your-site.ua/catalog/product-123/</g:link>
      <g:image_link>https://your-site.ua/upload/img/product-123.jpg</g:image_link>
      <g:price>1990 UAH</g:price>
      <g:sale_price>1490 UAH</g:sale_price>  <!-- якщо акція -->
      <g:availability>in stock</g:availability>
      <g:condition>new</g:condition>
      <g:brand>BrandName</g:brand>
      <g:gtin>4607086560001</g:gtin>  <!-- штрихкод, EAN -->
      <g:mpn>ART-0001</g:mpn>         <!-- артикул, якщо немає GTIN -->
      <g:product_type>Електроніка &gt; Смартфони</g:product_type>
      <g:google_product_category>5032</g:google_product_category>
      <g:shipping>
        <g:country>UA</g:country>
        <g:service>Кур'єр</g:service>
        <g:price>100 UAH</g:price>
      </g:shipping>
    </item>
  </channel>
</rss>

g:google_product_category — числовий ID з таксономії Google (завантажується з support.google.com). Неправильна категорія знижує релевантність показу.

Генератор фіда з каталогу Бітрікс

// /local/php_interface/cron/google_shopping_feed.php
define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');

$IBLOCK_ID = 10;  // ID каталогу
$outputFile = $_SERVER['DOCUMENT_ROOT'] . '/feeds/google_shopping.xml';

$xml = new XMLWriter();
$xml->openUri($outputFile);
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('rss');
$xml->writeAttribute('version', '2.0');
$xml->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
$xml->startElement('channel');
$xml->writeElement('title', 'Мій магазин');
$xml->writeElement('link', 'https://your-site.ua');

// Запит елементів каталогу
$elements = \CIBlockElement::GetList(
    ['SORT' => 'ASC'],
    [
        'IBLOCK_ID' => $IBLOCK_ID,
        'ACTIVE'    => 'Y',
        '!CATALOG_QUANTITY' => 0,  // тільки в наявності
    ],
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_TEXT', 'DETAIL_TEXT']
);

while ($el = $elements->GetNextElement()) {
    $fields = $el->GetFields();
    $props  = $el->GetProperties();

    // Отримуємо ціну
    $price = \CPrice::GetBasePrice($fields['ID']);

    // Отримуємо зображення
    $image = \CFile::GetPath($fields['PREVIEW_PICTURE'] ?: $fields['DETAIL_PICTURE']);

    // Наявність
    $productData = \CCatalogProduct::GetByIDEx($fields['ID']);
    $availability = ($productData['QUANTITY'] > 0) ? 'in stock' : 'out of stock';

    $xml->startElement('item');
    $xml->writeElement('g:id', $fields['ID']);
    $xml->writeElement('g:title', substr(strip_tags($fields['NAME']), 0, 150));
    $xml->writeElement('g:description', substr(strip_tags($fields['PREVIEW_TEXT'] ?: $fields['DETAIL_TEXT']), 0, 5000));
    $xml->writeElement('g:link', 'https://your-site.ua' . $fields['DETAIL_PAGE_URL']);

    if ($image) {
        $xml->writeElement('g:image_link', 'https://your-site.ua' . $image);
    }

    if ($price) {
        $xml->writeElement('g:price', number_format($price['PRICE'], 2, '.', '') . ' ' . $price['CURRENCY']);
    }

    $xml->writeElement('g:availability', $availability);
    $xml->writeElement('g:condition', 'new');

    if (!empty($props['BRAND']['VALUE'])) {
        $xml->writeElement('g:brand', $props['BRAND']['VALUE']);
    }

    if (!empty($props['BARCODE']['VALUE'])) {
        $xml->writeElement('g:gtin', $props['BARCODE']['VALUE']);
    } elseif (!empty($props['ARTICLE']['VALUE'])) {
        $xml->writeElement('g:mpn', $props['ARTICLE']['VALUE']);
        $xml->writeElement('g:identifier_exists', 'no');
    }

    $xml->endElement(); // item
}

$xml->endElement(); // channel
$xml->endElement(); // rss
$xml->endDocument();
$xml->flush();

Скрипт запускається через cron раз на 2–4 години. Файл фіда доступний за URL https://your-site.ua/feeds/google_shopping.xml.

Content API: примусове оновлення окремих товарів

При зміні ціни або залишку чекати наступного сканування фіда недоцільно — Google може показувати застарілу ціну добу. Content API дозволяє оновити конкретний товар миттєво:

// composer require google/apiclient
$client = new \Google\Client();
$client->setAuthConfig('/path/to/service-account.json');
$client->addScope(\Google\Service\ShoppingContent::CONTENT);

$service = new \Google\Service\ShoppingContent($client);

$product = new \Google\Service\ShoppingContent\Product([
    'offerId'      => 'PRODUCT-SKU-123',
    'price'        => new \Google\Service\ShoppingContent\Price([
        'value'    => '1490.00',
        'currency' => 'UAH',
    ]),
    'availability' => 'in stock',
]);

$service->products->update($merchantId, 'online:uk:UA:PRODUCT-SKU-123', $product);

На подію OnAfterCatalogProductUpdate у Бітрікс — викликаємо оновлення Content API для конкретного товару. Це додає ~100–200 мс до збереження, але ціна в Google оновлюється протягом кількох хвилин.

Типові причини відхилення товарів у Merchant Center

  • price mismatch — ціна у фіді не збігається з ціною на сторінці товару. Google сканує сайт окремо та порівнює. Найчастіше — розбіжність через знижки, які не відображені у фіді, або кешована сторінка із застарілою ціною
  • missing required attribute [gtin] — немає штрихкоду. Для багатьох категорій GTIN обов'язковий. Якщо його немає — додаємо identifier_exists: no
  • image too small — зображення менше 100×100 px (для одягу — 250×250). Бітрікс зберігає зображення в upload/, потрібно перевірити розмір оригіналів
  • landing page not crawlable — сторінка товару недоступна для бота Google. Перевіряємо robots.txt та noindex

Терміни розробки

Етап Зміст Термін
Маппінг полів каталогу Відповідність полів/властивостей Бітрікс → поля фіда 1 день
Генератор фіда PHP-скрипт + cron 2–3 дні
Налаштування Merchant Center Завантаження фіда, верифікація сайту, податки/доставка 1 день
Інтеграція Content API Оновлення при зміні ціни/залишку 2–3 дні
Діагностика та виправлення помилок Усунення причин відхилень 1–2 дні