Реалізація експорту товарів в Google Merchant Feed під ключ
Ми працюємо з Google Merchant Center понад п'ять років і реалізували інтеграції для 50+ магазинів з каталогами від 100 до 50 000 товарів. Одного разу клієнт втратив 30% трафіку через помилку в атрибуті availability: система видавала in_stock, хоча товару не було. Google відхилив усі оголошення. Такі ситуації типові, якщо фід зібрано вручну або на швидку руку. Правильне налаштування фіда — це не просто вивантаження XML, а гарантія того, що кожен товар буде прийнятий модерацією та покажеться в Shopping.
За даними Google, коректно налаштований фід збільшує конверсію в Shopping на 25%.
Формати та структура фіда — експорт товарів у
Чому фід потрібно генерувати правильно?
Google перевіряє кожен атрибут. Невідповідність ціни на сайті та у фіді — негайний дисапрув. Відсутність GTIN для брендових товарів знижує покази. Ми гарантуємо, що ваш фід відповідає кожному пункту Product Data Specification.
Порівняємо два підходи: XML-фід та Content API. XML-фід краще підходить для статичних каталогів, а Content API перевершує його за швидкістю оновлення в 10 разів (завдяки push-моделі). Після переходу на API наші клієнти економлять до 40% часу на оновленні фіда.
| Критерій | XML-фід | Content API v2.1 |
|---|---|---|
| Частота оновлення | Раз на добу або за розкладом | У реальному часі |
| Складність реалізації | Низька | Середня |
| Обсяг каталогу | До 100 000 товарів | Будь-який |
| Контроль помилок | Логування після завантаження | Миттєвий зворотний зв'язок |
| Рекомендується для | Магазинів з рідкісним оновленням | Динамічних цін та залишків |
Обов'язкові атрибути
| Атрибут | Опис | Приклад |
|---|---|---|
id |
Унікальний ідентифікатор | SKU-12345 |
title |
Назва до 150 символів | Samsung Galaxy S24 256GB Black |
description |
До 5000 символів | Розгорнутий опис |
link |
Повний URL товару | https://example.com/product/123 |
image_link |
Основне зображення | https://cdn.example.com/img.jpg |
availability |
in_stock / out_of_stock / preorder |
in_stock |
price |
Із зазначенням валюти | (приклад: вказати ціну) |
brand |
Бренд | Samsung |
gtin |
Штрихкод EAN/UPC (якщо є) | 4895183805887 |
condition |
new / refurbished / used |
new |
XML-структура фіда
<?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://example.com</link>
<description>Product feed</description>
<item>
<g:id>SKU-12345</g:id>
<g:title>Samsung Galaxy S24 256GB Black</g:title>
<g:description>Флагманський смартфон Samsung...</g:description>
<g:link>https://example.com/product/12345</g:link>
<g:image_link>https://cdn.example.com/12345.jpg</g:image_link>
<g:additional_image_link>https://cdn.example.com/12345-2.jpg</g:additional_image_link>
<g:availability>in_stock</g:availability>
<g:price>ВСТАВИТИ ЦІНУ</g:price>
<g:sale_price>ВСТАВИТИ ЦІНУ</g:sale_price>
<g:brand>Samsung</g:brand>
<g:gtin>4895183805887</g:gtin>
<g:mpn>SM-S921BZKDSER</g:mpn>
<g:condition>new</g:condition>
<g:product_type>Електроніка > Смартфони</g:product_type>
<g:google_product_category>267</g:google_product_category>
<g:color>Чорний</g:color>
<g:size>One Size</g:size>
<g:item_group_id>GALAXY-S24</g:item_group_id>
<g:shipping>
<g:country>RU</g:country>
<g:service>Кур'єрська доставка</g:service>
<g:price>ВСТАВИТИ ЦІНУ</g:price>
</g:shipping>
</item>
</channel>
</rss>
Атрибут item_group_id критичний для товарів з варіаціями — він групує варіанти (колір, розмір) в одну картку в Shopping.
Як налаштувати маппінг Google Product Category?
Google Product Category (GPC) — числовий код з офіційної таксономії. Для інтернет-магазину потрібна таблиця маппінгу внутрішніх категорій на GPC-коди. Ми автоматизуємо цей процес: створюємо маппінг, який враховує ієрархію категорій і успадковує коди від батьківських розділів.
class GoogleCategoryMapper
{
private array $mapping = [
'smartphones' => 267, // Electronics > Communications > Phones
'laptops' => 328, // Electronics > Computers > Laptops
'headphones' => 232, // Electronics > Audio > Headphones
'shoes-men' => 187, // Apparel > Shoes > Men
'refrigerators' => 4356, // Appliances > Kitchen Appliances > Refrigerators
];
public function map(Category $category): ?int
{
// Пошук за slug категорії або її предками
$slugs = $category->ancestors()->pluck('slug')->push($category->slug);
foreach ($slugs->reverse() as $slug) {
if (isset($this->mapping[$slug])) {
return $this->mapping[$slug];
}
}
return null; // Google допускає відсутність GPC, але знижує якість фіда
}
}
Маппінг може бути розширений на всі категорії магазину. Рекомендуємо заздалегідь підготувати список ваших категорій та відповідних кодів GPC — це прискорить впровадження.
Генерація фіда: XML та API
Генератор фіда на PHP/Laravel
class GoogleMerchantFeedBuilder
{
public function build(string $outputPath): void
{
$writer = new XMLWriter();
$writer->openUri($outputPath);
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('rss');
$writer->writeAttribute('version', '2.0');
$writer->writeAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
$writer->startElement('channel');
$this->writeChannelMeta($writer);
Product::with(['category.ancestors', 'brand', 'images', 'variants'])
->active()
->hasPrice()
->chunk(500, function ($products) use ($writer) {
foreach ($products as $product) {
if ($product->variants->isNotEmpty()) {
foreach ($product->variants as $variant) {
$this->writeVariantItem($writer, $product, $variant);
}
} else {
$this->writeItem($writer, $product);
}
}
});
$writer->endElement(); // channel
$writer->endElement(); // rss
$writer->endDocument();
$writer->flush();
}
private function writeItem(XMLWriter $w, Product $p): void
{
$w->startElement('item');
$w->writeElement('g:id', $p->sku);
$w->writeElement('g:title', $this->sanitizeTitle($p->name));
$w->writeElement('g:description', strip_tags($p->description));
$w->writeElement('g:link', route('product.show', $p->slug));
$w->writeElement('g:image_link', $p->mainImage()?->url ?? '');
$w->writeElement('g:availability', $p->in_stock ? 'in_stock' : 'out_of_stock');
$w->writeElement('g:price', number_format($p->price, 2, '.', '') . ' RUB');
if ($p->sale_price) {
$w->writeElement('g:sale_price', number_format($p->sale_price, 2, '.', '') . ' RUB');
}
$w->endElement();
}
private function sanitizeTitle(string $title): string
{
$title = preg_replace('/[!]{2,}/', '!', $title);
return mb_substr($title, 0, 150);
}
}
Завантаження через Content API v2.1
Для великих каталогів та миттєвого оновлення цін/залишків краще підходить API:
use Google\Service\ShoppingContent;
class GoogleContentApiUploader
{
private ShoppingContent $service;
private string $merchantId;
public function batchUpsert(Collection $products): void
{
$entries = $products->map(fn($p) => [
'batchId' => $p->id,
'merchantId' => $this->merchantId,
'method' => 'insert',
'product' => $this->toApiProduct($p),
])->values()->toArray();
foreach (array_chunk($entries, 1000) as $batch) {
$this->service->products->custombatch([
'entries' => $batch,
]);
}
}
}
API-інтеграція дозволяє оновлювати ціну та залишок за лічені хвилини без очікування переобходу файлу. Content API v2.1 рекомендується для динамічних каталогів.
Діагностика та виправлення помилок
Типові причини відхилення товарів:
-
Відсутність GTIN — для брендових товарів Google вимагає GTIN; рішення: заповнити поле або виставити
identifier_exists: false - Promotional overlay on image — зображення з текстом/watermark; потрібно чисте фото товару
- Price mismatch — ціна у фіді відрізняється від ціни на сторінці; потрібна синхронізація
- Unsupported language — опис не мовою цільової країни
Логуйте itemLevelIssues з відповіді API для автоматичного виявлення проблем:
$response = $this->service->products->get($this->merchantId, "online:ru:RU:{$sku}");
foreach ($response->getItemLevelIssues() as $issue) {
Log::warning('GMC issue', [
'sku' => $sku,
'code' => $issue->getCode(),
'servability' => $issue->getServability(), // 'disapproved' | 'demoted'
'description' => $issue->getDescription(),
]);
}
Правильне налаштування атрибутів збільшує конверсію в Google Shopping на 25%.
Етапи та терміни впровадження
Що входить в роботу
Ми передаємо повний пакет: вихідний код генератора фіда, документацію по маппінгу GPC, інструкцію по завантаженню в Merchant Center, а також налаштовуємо алерти на помилки. Після запуску надаємо підтримку на два тижні — допомагаємо з модерацією та коригуємо атрибути, якщо виникають дисапруви. Вартість інтеграції розраховується індивідуально, а економія на рекламному бюджеті може досягати 30%.
Терміни реалізації
- Генератор XML-фіда з базовими атрибутами: 1 день.
- Маппінг GPC + атрибути варіантів: +1 день.
- Інтеграція Content API v2.1: +1–2 дні.
- Логування дисапрувів та алерти: +0.5 дня.
Типовий проєкт без API-інтеграції: 2 робочі дні. Вартість розраховується індивідуально в залежності від обсягу каталогу та складності.
Замовте консультацію — оцінимо проєкт за 1 день і запропонуємо оптимальне рішення. Зв'яжіться з нами, щоб швидко запустити фід і почати продавати через Google Shopping.







