Что такое Google Merchant Feed и зачем он нужен?
Google Merchant Feed — это XML-файл с информацией о товарах, который используется для интеграции с сервисами Google (Google Shopping, рекламные кампании и т.д.). Правильно настроенный фид:
• Увеличивает видимость товаров в Google
• Улучшает качество рекламных кампаний
• Автоматизирует процесс обновления товарной информации
Реализация фида на Битрикс
Рассмотрим ключевые аспекты реализации:
1. Базовая структура RSS-фида
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); ?> <rss xmlns:g="http://base.google.com/ns/1.0" version="2.0"> <channel>
<title>Название сайта</title> <link>Домен сайта</link> <description>Описание сайта</description>
SEO-рекомендация: Используйте в описании канала ключевые слова, но избегайте переспама.
2. Получение товаров из инфоблока
header('Accept: application/xml');
header('Content-Type: application/xml');
use Bitrix\Main\Loader;
use Bitrix\Catalog\Model\Price;
// Получаем элементы инфоблока
CModule::IncludeModule("iblock");
$arFilter = array("IBLOCK_ID" => 18, "ACTIVE" => "Y");
$arSelect = array("ID", "NAME", "DETAIL_PAGE_URL", "PROPERTY_*", "DETAIL_TEXT", "PREVIEW_PICTURE");
$res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
не забудьте в “IBLOCK_ID” указать свой инфоблок товаров.
Важно: Обратите внимание на фильтр по активности — это исключает неактивные товары из фида.
3. Формирование обязательных атрибутов товара
Для Google Merchant обязательными являются:
• ID товара
• Название
• Описание
• Ссылка
• Изображение
• Цена
• Наличие
while ($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$arProps = $ob->GetProperties();
// Формируем данные для фида
$id = $arFields["ID"];
$title = $arFields["NAME"];
$desc = iconv_substr($arFields["DETAIL_TEXT"], 0 , 5000 , "UTF-8");
$link = "Домен сайта" . $arFields["DETAIL_PAGE_URL"];
$image = "Домен сайта" . CFile::GetPath($arFields["PREVIEW_PICTURE"]);
$available = ($arProps["STOCK"]["VALUE"] == "Y") ? "in stock" : "out of stock";
$priceData = Price::getList([
'filter' => ['PRODUCT_ID' => $arFields["ID"]],
'select' => ['ID', 'PRICE', 'CURRENCY'],
'limit' => 1,
])->fetch();
$price = $priceData['PRICE'];
?>
<item>
<g:id><?=$id?></g:id>
<g:title><?=$title?></g:title>
<g:description><?=htmlspecialcharsbx($desc)?></g:description>
<g:link><?=$link?></g:link>
<g:image_link><?=$image?></g:image_link>
<g:condition>new</g:condition>
<g:availability><?=$available?></g:availability>
<g:price><?=$price?> RUB</g:price>
</item>
<?
unset($more_photo);
}
?>
</channel>
</rss>
SEO-совет: Описание товара (description) должно быть уникальным и содержательным, но не превышать 5000 символов (в коде это ограничение уже реализовано). Полностью код:
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); ?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Название сайта</title>
<link>Домен сайта</link>
<description>Описание сайта</description>
<?
header('Accept: application/xml');
header('Content-Type: application/xml');
use Bitrix\Main\Loader;
use Bitrix\Catalog\Model\Price;
// Получаем элементы инфоблока
CModule::IncludeModule("iblock");
$arFilter = array("IBLOCK_ID" => 18, "ACTIVE" => "Y");
$arSelect = array("ID", "NAME", "DETAIL_PAGE_URL", "PROPERTY_*", "DETAIL_TEXT", "PREVIEW_PICTURE");
$res = CIBlockElement::GetList(array(), $arFilter, false, false, $arSelect);
while ($ob = $res->GetNextElement()) {
$arFields = $ob->GetFields();
$arProps = $ob->GetProperties();
// Формируем данные для фида
$id = $arFields["ID"];
$title = $arFields["NAME"];
$desc = iconv_substr($arFields["DETAIL_TEXT"], 0 , 5000 , "UTF-8");
$link = "Домен сайта" . $arFields["DETAIL_PAGE_URL"];
$image = "Домен сайта" . CFile::GetPath($arFields["PREVIEW_PICTURE"]);
$available = ($arProps["STOCK"]["VALUE"] == "Y") ? "in stock" : "out of stock";
$priceData = Price::getList([
'filter' => ['PRODUCT_ID' => $arFields["ID"]],
'select' => ['ID', 'PRICE', 'CURRENCY'],
'limit' => 1,
])->fetch();
$price = $priceData['PRICE'];
?>
<item>
<g:id><?=$id?></g:id>
<g:title><?=$title?></g:title>
<g:description><?=htmlspecialcharsbx($desc)?></g:description>
<g:link><?=$link?></g:link>
<g:image_link><?=$image?></g:image_link>
<g:condition>new</g:condition>
<g:availability><?=$available?></g:availability>
<g:price><?=$price?> RUB</g:price>
</item>
<?
unset($more_photo);
}
?>
</channel>
</rss>
Частые ошибки и их решение1. Некорректные цены: Убедитесь, что цена соответствует формату “число RUB”.
2. Дубли товаров: Каждый товар должен иметь уникальный ID.
3. Некорректные ссылки: Все URL должны быть абсолютными и работоспособными.
4. Несоответствие наличия: Актуальность статуса “in stock”/”out of stock” критически важна.
Заключение
Реализованный код представляет собой эффективное решение для выгрузки товаров интернет-магазина нумизматики в Google Merchant Center. Такой подход:
1. Полностью автоматизирует процесс обновления товарных данных
2. Учитывает специфику монет и инвестиционных товаров
3. Соответствует требованиям Google Shopping
Правильно настроенный продуктовый фид — это основа успешного продвижения в Google Shopping и значительный источник целевого трафика для интернет-магазина.