Реализация экспорта товаров в 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 |
С указанием валюты | 29990 RUB |
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>29990 RUB</g:price> <g:sale_price>24990 RUB</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>350 RUB</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, а также настраиваем алерты на ошибки. После запуска предоставляем поддержку на две недели — помогаем с модерацией и корректируем атрибуты, если возникают дисапрувы. Стоимость интеграции начинается от 15 000 руб., а экономия на рекламном бюджете может достигать 30%.
Сроки реализации
- Генератор XML-фида с базовыми атрибутами: 1 день.
- Маппинг GPC + атрибуты вариантов: +1 день.
- Интеграция Content API v2.1: +1–2 дня.
- Логирование дисапрувов и алерты: +0.5 дня.
Типовой проект без API-интеграции: 2 рабочих дня. Стоимость рассчитывается индивидуально в зависимости от объёма каталога и сложности.
Закажите консультацию — оценим проект за 1 день и предложим оптимальное решение. Свяжитесь с нами, чтобы быстро запустить фид и начать продавать через Google Shopping.







