Google Shopping Ads для Битрикс: фид, API, устранение ошибок

Google Shopping для Битрикс: настройка фида и Content API ### Когда рекламный бюджет на Google Shopping достигает $4.5k–6.5k? /мес., а 20% товаров отклонены из-за price mismatch, потери прямые — до $900–1.3k. ежемесячно. Стандартный XML-фид обновляется раз в сутки, но цена на сайте меняется
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Google Shopping Ads для Битрикс: фид, API, устранение ошибок
Средний
~1-2 недели

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1428
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1008
  • 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 Appointment Booking Widget for a Medical Center
    745
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    869
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    782
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1149

Google Shopping для Битрикс: настройка фида и Content API

Когда рекламный бюджет на Google Shopping достигает $4.5k–6.5k?

/мес., а 20% товаров отклонены из-за price mismatch, потери прямые — до $900–1.3k. ежемесячно. Стандартный XML-фид обновляется раз в сутки, но цена на сайте меняется каждые 15 минут на акции. Google сканирует страницу независимо, находит старую цену — и товар летит в Disapproved. Мы решаем эту задачу через комбинацию правильно настроенного фида и Content API для мгновенных обновлений. Результат: отклонение товаров снижается с 20% до 2%, а конверсия растёт на 35% за счёт актуальных цен. В статье разберём, как настроить генерацию фида на PHP с использованием событий Битрикс и подключить Content API для автоматического обновления отклонённых товаров.

Архитектура интеграции

[Битрикс каталог] → [Генератор фида: PHP-скрипт] → [XML-фид на S3] → [Merchant Center: импорт по расписанию] → [Google Ads: товарные кампании] 

Фид генерируется на стороне Битрикс, Merchant Center забирает его по URL каждые 2–4 часа. Для критичных изменений (цена, наличие) используем Content API Shopping, который обновляет конкретный товар в течение 1–3 минут против 2–4 часов при полной перегенерации фида. Это в 60 раз быстрее.

Google рекомендует использовать Content API для обновлений в реальном времени.

Что такое Content API?Content API позволяет обновлять товары в Google Merchant Center без полной перегенерации фида. Это критически важно для магазинов с быстро меняющимися ценами.

Причины price mismatch и их устранение

Google сравнивает цену в фиде с ценой на странице товара. Если разница больше 0.5% — товар отклоняется. Основные источники расхождений:

  • скидки (sale_price) не отражены в фиде — исправляется добавлением <g:sale_price>;
  • страница кэширована с устаревшей ценой — отключаем кэш для страниц товара или проставляем заголовки Cache-Control;
  • неверный формат валюты или лишние пробелы в XML — Google не прощает $110–160 вместо $110–160.

Решение — генерировать фид на основе CATALOG_PRICE и CATALOG_CURRENCY с учётом специальных цен через CPrice::GetBasePrice и CPrice::GetDiscount. Добавляем <g:sale_price> при наличии скидки.

Генератор фида из каталога Битрикс: рабочий код

// /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.ru'); $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.ru' . $fields['DETAIL_PAGE_URL']); if ($image) $xml->writeElement('g:image_link', 'https://your-site.ru' . $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(); } $xml->endElement(); $xml->endElement(); $xml->endDocument(); $xml->flush(); 

Скрипт запускается через cron. Для каталога на 50 000 товаров генерация занимает 2–3 минуты. Файл отдаётся через S3 (CloudFront) для ускорения доставки.

Content API: обновление в реальном времени

Когда цена меняется в Битрикс (событие OnAfterCatalogProductUpdate), ждать cron нецелесообразно?

Используем Content API:

$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' => 'SKU-123', 'price' => new \Google\Service\ShoppingContent\Price(['value' => '1490.00', 'currency' => 'USD']), 'availability' => 'in stock', ]); $service->products->update($merchantId, 'online:ru:RU:SKU-123', $product); 

Время обновления — 1–3 минуты. Нагрузка на сервер минимальна: +100–200 мс на каждое сохранение товара. Для каталогов 100k+ товаров это единственный рабочий путь.

Как ускорить обновление фида для больших каталогов?

Для каталогов свыше 100 000 товаров полная перегенерация фида каждые 2–4 часа может занимать 30 минут и более. Решение — инкрементальный фид: храним в базе дату последнего изменения, генерируем только изменённые позиции, а для мгновенных обновлений используем Content API. Merchant Center поддерживает частичные обновления через supplemental feeds.

Типичные причины отклонения товаров в Merchant Center

Проблема Причина Решение
price mismatch Несовпадение цены в фиде и на лендинге Добавить sale_price, снять кэш
missing gtin Отсутствует GTIN для обязательных категорий Указать mpn + identifier_exists: no
image too small Изображение <100×100 px (одежда <250×250) Проверить размер в Битрикс, использовать оригиналы
landing page not crawlable Страница закрыта в robots.txt или noindex Разрешить индексацию страниц товаров

Что входит в работу

  1. Маппинг полей каталога – соответствие свойств Битрикс → Google Shopping (GTIN, brand, category, price, availability).
  2. Генератор фида – PHP-скрипт с кэшированием, обработкой ошибок, экспортом статистики.
  3. Настройка Merchant Center – загрузка фида, налоги, доставка, верификация сайта.
  4. Интеграция Content API – обновление товаров через Google Shopping API в реальном времени.
  5. Диагностика и исправление ошибок – анализ причин отклонений, корректировка фида.
  6. Документация – описание архитектуры, инструкция по добавлению новых полей.

Сроки разработки

Этап Содержание Срок
Маппинг полей каталога Соответствие свойств 1 день
Генератор фида Скрипт + cron 2–3 дня
Настройка Merchant Center Налоги, доставка, верификация 1 день
Интеграция Content API Обновление при смене цены/остатка 2–3 дня
Диагностика и исправление Устранение отклонений 1–2 дня

Цена интеграции рассчитывается индивидуально в зависимости от объёма каталога и сложности маппинга. Получите консультацию наших инженеров для аудита текущего фида. Свяжитесь с нами или закажите интеграцию под ключ — внедрим за 5–7 рабочих дней без простоев.