Большинство проблем с фидами не выглядят как проблемы с фидами. Они выглядят как необъяснимое отклонение в Google Merchant Center, как кампания Advantage+, которая тратит весь бюджет на одну чёрную футболку, или как реклама в Shopping, которая отправляет покупателя, ищущего обувь 42-го размера, на страницу, где остался только 38-й.
Почти за всем этим стоит одно и то же: варианты.
Вариант — это любая версия товара, которая отличается одним видимым признаком, доступным для выбора при покупке, — размером, цветом, материалом, объёмом, отделкой. В ритейле они обычны, а в фидах необычайно сложны, потому что каждый канал моделирует их по-своему и потому что ошибки здесь происходят незаметно. Ничего не ломается. Ваша реклама просто тихо работает хуже, а причина спрятана на четыре уровня глубже — в файле данных, который никто не открывает.
Это руководство охватывает тему целиком: что на самом деле считается вариантом, как работает item_group_id и где его используют неправильно, каждый атрибут, определяющий вариант, с его реальными ограничениями, рабочие примеры фидов в XML, CSV и JSON, как Google, Meta, TikTok, Pinterest, Amazon и региональные маркетплейсы ожидают структурирования вариантов, а также диагностическая таблица самых частых ошибок.
Оно длинное, потому что тема такая. Используйте оглавление для перехода.
1. Что такое вариант на самом деле
Вариант — это доступная для покупки версия товара, которая отличается от «соседей» как минимум одним атрибутом, между значениями которого выбирает покупатель, оставаясь при этом тем же товаром.
Последняя оговорка очень важна. Синяя футболка размера M и чёрная футболка размера L — это один и тот же товар. Синяя футболка и синее худи — нет, даже если они одного бренда и из одной ткани.
Стандартная модель в большинстве каналов — родитель/потомок:
- Родитель — это товар как понятие: «Merino Crew Neck Sweater». Обычно его нельзя купить сам по себе.
- Потомки — это варианты, у каждого из которых свой SKU, свой остаток, а иногда своя цена и своё изображение.
В товарном фиде это почти всегда выражается плоско: каждый вариант — это отдельная строка или <item>, а связывает их общий ключ группировки. Вложенности нет. Свитер в 4 цветах и 5 размерах — это 20 строк с одним и тем же ID группы.
Что не является вариантом
Именно здесь фиды ломаются ещё до того, как написана первая строка XML.
| Не вариант | Почему | Что использовать вместо этого |
|---|---|---|
| Мультипаки — упаковка из 6 штук против одной | Другое количество одной и той же единицы, а не выбираемый атрибут | атрибут multipack (Google) |
| Комплекты — камера + объектив + сумка | Отдельный составной товар для продажи | атрибут is_bundle; отдельный товар |
| Связанные товары — подходящие друг к другу топ и юбка | Разные товары, которые хорошо сочетаются | Отдельные позиции; используйте рекомендации |
| Восстановленный и новый | Состояние, а не вариация | атрибут condition |
| Листинги разных ритейлеров | Один товар, разные продавцы | Отдельные аккаунты/фиды |
| Персонализация — гравировка имени | Изготовление на заказ, а не опция со склада | Обычно одна позиция; укажите в описании |
Объединение любого из этих случаев под общим item_group_id даёт группу, члены которой не взаимозаменяемы, — это сбивает с толку селектор вариантов на целевой странице, а в некоторых каналах вызывает отклонение из-за несоответствия.
2. Решение, которое определяет всё
Прежде чем писать какую-либо логику фида, ответьте на один вопрос для каждого типа товаров, которые вы продаёте:
Когда покупатель выбирает другой вариант, попадает ли он на другую страницу — или на ту же страницу в другом состоянии?
Это практический тест, и он напрямую определяет, как следует структурировать фид.
Случай A — отдельные URL для каждого варианта. У каждого цвета своя страница товара (/merino-sweater-navy, /merino-sweater-charcoal). Передавайте каждый вариант отдельной строкой с собственной ссылкой. Это самая чистая схема, она даёт наилучшую релевантность рекламы, и именно её предпочитают каналы.
Случай B — один URL, вариант выбирается на странице. Всё находится по адресу /merino-sweater, а покупатель выбирает цвет и размер с помощью селектора. Вы по-прежнему можете передавать каждый вариант, но следует добавлять параметр глубокой ссылки, чтобы реклама вела на нужное предвыбранное состояние:
https://example.com/merino-sweater?colour=navy&size=mБез этого параметра покупатель, кликнувший по рекламе тёмно-синего свитера размера M, попадает в состояние по умолчанию с угольно-серым размера S. Такое несоответствие — один из главных скрытых убийц конверсии в рекламе вариантов, а в Google оно также может вызвать отклонение «Mismatched value (page crawl)», потому что краулер видит страницу, где видимый цвет не совпадает с переданным значением color.
Случай C — варианты, которые не стоит разделять. Некоторые вариации недостаточно влияют на решение о покупке, чтобы оправдать отдельную рекламу, — например, длина кабеля у зарядного устройства. В таком случае можно сознательно передавать один представительный вариант. Когда это правильное решение, рассказано в разделе 7.
Атрибуты, определяющие вариант, и описательные атрибуты
Каждый атрибут вашего фида попадает в одну из двух категорий, и их путаница — частая причина некорректных групп.
Атрибуты, определяющие вариант, должны различаться у членов группы. Это то, что выбирает покупатель: color, size, material, pattern, а также специфичные для товара измерения, такие как объём или отделка.
Постоянные для группы атрибуты должны быть одинаковыми у всех членов: brand, gender, age_group, item_group_title, google_product_category. Если у двух строк общий item_group_id, но разные значения gender, вы либо неправильно сгруппировали товары, либо неправильно их разметили.
Атрибуты, специфичные для строки, но не определяющие вариант, меняются от строки к строке, не определяя вариацию: id, price, availability, gtin, image_link, link. У двух вариантов вполне могут быть разные цены — размер 3XL часто стоит дороже, — но при этом не цена отличает их друг от друга.
3. item_group_id: фундамент
item_group_id — это общий ключ, который сообщает каналу: «эти строки — один и тот же товар». Всё остальное в работе с вариантами зависит от того, правильно ли он задан.
Спецификация
| Свойство | Meta | TikTok | |
|---|---|---|---|
| Название поля | item_group_id | item_group_id | item_group_id |
| Макс. длина | 50 символов | 100 символов | 150 символов |
| Допустимые символы | Unicode; рекомендуется ASCII — буквы, цифры, подчёркивания, дефисы | Строка | Строка |
| Чувствительность к регистру | Не учитывает регистр (ABC123 = abc123) | Учитывает регистр | Учитывает регистр |
| Обязательное? | Обязательно для бесплатных листингов, а также для рекламы в Shopping в Бразилии, Франции, Германии, Японии, Великобритании и США — при передаче вариантов | Нужно для группировки вариантов | Нужно для группировки вариантов |
| Повторяющееся поле | Нет — одно значение на позицию | Нет | Нет |
Поскольку Google не учитывает регистр значения, а Meta и TikTok учитывают, везде используйте единый регистр — строчные (или прописные) буквы. Каталог, в котором встречаются и SWTR-001, и swtr-001, правильно сгруппируется в Google и распадётся на два товара в Meta.
Выбор значения
Лучший item_group_id — родительский SKU, который уже есть в вашей ERP или PIM. Он существует, он стабилен и уникален.
Хорошо:
SWTR-MERINO-CREW
12345
parent-8891Плохо, и почему:
| Значение | Проблема |
|---|---|
| Merino Crew Neck Sweater | Пробелы и смешанный регистр; превышает лимиты при длинных названиях; меняется, когда маркетинг переименовывает товар |
| sweater | Не уникально — сворачивает весь ассортимент свитеров в одну группу |
| SWTR-MERINO-CREW-NAVY-M | Включает измерения варианта, поэтому каждая строка получает уникальное значение и ничего не группируется |
| Номер строки или хеш, генерируемый заново при каждом экспорте | Меняется между экспортами; каналы теряют непрерывность группы и обучаются с нуля |
Последний пункт стоит подчеркнуть. item_group_id должен быть стабильным во времени. Каналы накапливают историю эффективности по группе. Если ваш экспорт заново генерирует ID, вы обнуляете эту историю при каждой синхронизации, и никакая оптимизация ставок этого не компенсирует.
Три правила
- У всех членов группы один и тот же item_group_id.
- У каждого члена уникальный id. Дублирующийся id в любом месте фида приводит к тому, что более поздняя строка незаметно отбрасывается.
- Каждый член отличается как минимум одним атрибутом, определяющим вариант. Две строки с одинаковым ID группы и одинаковыми цветом и размером — это дубликаты, а не варианты.
Соглашение, которое удовлетворяет всем трём правилам:
item_group_id: SWTR-MERINO-CREW
id: SWTR-MERINO-CREW-NAV-M
id: SWTR-MERINO-CREW-NAV-L
id: SWTR-MERINO-CREW-CHR-MЧитаемо, удобно для отладки и основано на данных, которые у вас уже есть.
item_group_title
Более новый атрибут Google, необязательный, но рекомендуемый всякий раз, когда вы передаёте item_group_id. Он содержит название родительского товара — максимум 150 символов — и должен быть одинаковым у всех вариантов группы.
xml
<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Navy, Medium</title>Обратите внимание на закономерность: title зависит от варианта, а item_group_title — нет. Передавая одну и ту же строку в оба поля, вы теряете сигнал.
variant_option
Также относительно новый атрибут Google: структурированный способ объявить, какие свойства определяют вариацию, вместо того чтобы оставлять каналу возможность догадываться. Он принимает до 30 пар «название/значение» (каждый податрибут — до 250 символов, всего — до 5000 символов).
xml
<g:variant_option>
<g:name>Colour</g:name>
<g:value>Navy</g:value>
</g:variant_option>
<g:variant_option>
<g:name>Size</g:name>
<g:value>M</g:value>
</g:variant_option>Это особенно полезно для товаров, чьи оси вариаций не покрываются стандартными атрибутами одежды, — объём памяти, класс процессора, мощность, количество мест. Вместо того чтобы втискивать «256GB» в size, вы корректно объявляете это значение.
4. Атрибуты, определяющие вариант, подробно
color
Самый регламентированный атрибут спецификации и чаще всего отклоняемый.
| Свойство | Значение |
|---|---|
| Макс. длина (Google) | 100 символов всего, 40 на отдельный цвет |
| Макс. длина (Meta / TikTok) | 200 символов |
| Несколько цветов | Разделяйте символом /, основной цвет первым |
| Обязательность | Для одежды в перечисленных выше странах; для всех бесплатных листингов категории Apparel & Accessories |
Не принимаются:
- Числа — Colour 42, RAL 5013
- Шестнадцатеричные коды — #001F5B
- Отдельные буквы — N для navy
- Отсылки к изображению — see photo
- Буквенно-цифровые или слитные слова — Navy1, NavyBlue (пишите Navy Blue)
Как быть с маркетинговыми названиями цветов. Модные бренды редко называют цвет «navy». Они называют его «Midnight Regatta». Каналу нужен цвет, который покупатель будет искать; вашему бренду — собственное название на странице.
Работающий компромисс:
color: Navy
description: ...available in Midnight Regatta (navy)...Сопоставляйте маркетинговые названия со стандартными в фиде, а фирменное название оставляйте видимым на посадочной странице и в описании. Не помещайте маркетинговое название в color в надежде, что сработает, — это ухудшает соответствие запросам с указанием цвета, которые относятся к запросам с самым высоким намерением купить в категории одежды.
Многоцветные товары:
color: Navy/White/GreyОсновной цвет — первым. Google считает первое значение доминирующим цветом.
size
| Свойство | Значение |
|---|---|
| Макс. длина (Google) | 100 символов |
| Макс. длина (Meta / TikTok) | 200 символов |
| Обязательность | Для одежды и обуви в перечисленных странах; для бесплатных листингов |
| Товары одного размера | one_size, OS или OSFA |
Главное правило: будьте достаточно конкретны, чтобы избежать двусмысленности, и последовательны во всём каталоге. M подходит, если M используют все товары. Фид, в котором для одного и того же понятия смешаны M, Medium, med и M/L, раздробляет группы вариантов и делает невозможной сегментацию по размерам.
Для товаров, у которых одного измерения недостаточно, включайте в значение отличительные размеры:
size: 32/34 (waist/inseam)
size: 15.5/34 (neck/sleeve)
size: 9.5 Wide (shoe width)
size: 200x140cm (rugs, bedding)size_type и size_system
Необязательные, только для одежды и используются недостаточно часто — хотя оба заметно улучшают соответствие запросам покупателей, которые ищут с этими уточнениями.
size_type — до 2 значений из списка: regular, petite, maternity, big, tall, plus.
size_system — одно из: US, UK, EU, DE, FR, JP, CN, IT, BR, MEX, AU. Если оно не указано, канал предполагает размерную систему целевой страны, и это источник конкретной и дорогостоящей ошибки: у турецкого ритейлера, продающего в Германию с европейскими размерами, но без указанного size_system, размеры могут интерпретироваться по неверной шкале.
xml
<g:size>10</g:size>
<g:size_system>UK</g:size_system>
<g:size_type>regular</g:size_type>material
В Google — максимум 200 символов. Сначала основной материал, затем до двух дополнительных, разделённых символом /.
material: Cotton
material: Leather/Suede
material: Merino Wool/Nylon/ElastaneОбязателен только если отличает ваши варианты — например, сумка, продаваемая в коже и в канве. В остальных случаях необязателен, но его стоит передавать: материал — частое уточнение в поисковых запросах.
pattern
Максимум 100 символов. Произвольный текст, описывающий принт или рисунок: Striped, Polka Dot, Paisley, Floral, Herringbone. Правило то же — обязателен, если именно он меняется.
age_group и gender
Оба атрибута постоянны для группы. У каждого варианта в группе должно быть одно и то же значение.
age_group: newborn, infant, toddler, kids, adult — одно значение на товар.
gender: male, female, unisex.
Если изделие действительно предлагается в мужском и женском кроях, это две отдельные группы товаров, а не одна группа со смешанным полом. Различаются крой и размерная сетка, и покупатель выбирает между товарами, а не между опциями.
Справочная таблица
| Атрибут | Лимит Google | Должен различаться | Должен совпадать в группе |
|---|---|---|---|
| item_group_id | 50 символов | — | ✅ |
| item_group_title | 150 символов | — | ✅ |
| id | 50 символов | ✅ (всегда уникален) | — |
| title | 150 символов | Рекомендуется | — |
| color | 100 символов (40 на цвет) | Если это ось вариации | — |
| size | 100 символов | Если это ось вариации | — |
| size_type | 2 значения | Необязательно | — |
| size_system | Перечисление | — | Обычно ✅ |
| material | 200 символов | Если это ось вариации | — |
| pattern | 100 символов | Если это ось вариации | — |
| gender | Перечисление | — | ✅ |
| age_group | Перечисление | — | ✅ |
| brand | 70 символов | — | ✅ |
| google_product_category | — | — | ✅ |
| price | — | Может различаться | — |
| availability | Перечисление | Может различаться | — |
5. Реальные примеры фидов
XML (Google RSS 2.0)
Два варианта из группы в шесть вариантов. Обратите внимание, что меняется, а что нет.
xml
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>Example Store — Product Feed</title>
<link>https://example.com</link>
<item>
<g:id>SWTR-MERINO-CREW-NAV-M</g:id>
<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Navy, Medium</title>
<description>Fine-gauge 100% merino wool crew neck. Ribbed cuffs and hem, regular fit. Machine washable on wool cycle.</description>
<link>https://example.com/merino-crew-sweater?colour=navy&size=m</link>
<g:image_link>https://cdn.example.com/swtr-merino-navy-1.jpg</g:image_link>
<g:additional_image_link>https://cdn.example.com/swtr-merino-navy-2.jpg</g:additional_image_link>
<g:availability>in_stock</g:availability>
<g:price>89.00 EUR</g:price>
<g:brand>Example</g:brand>
<g:gtin>5012345678900</g:gtin>
<g:mpn>SW-MC-NAV-M</g:mpn>
<g:condition>new</g:condition>
<g:google_product_category>1604</g:google_product_category>
<g:color>Navy</g:color>
<g:size>M</g:size>
<g:size_system>EU</g:size_system>
<g:size_type>regular</g:size_type>
<g:material>Merino Wool</g:material>
<g:gender>male</g:gender>
<g:age_group>adult</g:age_group>
<g:custom_label_0>core</g:custom_label_0>
<g:custom_label_1>full-size-run</g:custom_label_1>
</item>
<item>
<g:id>SWTR-MERINO-CREW-CHR-L</g:id>
<g:item_group_id>SWTR-MERINO-CREW</g:item_group_id>
<g:item_group_title>Merino Crew Neck Sweater</g:item_group_title>
<title>Merino Crew Neck Sweater — Charcoal, Large</title>
<description>Fine-gauge 100% merino wool crew neck. Ribbed cuffs and hem, regular fit. Machine washable on wool cycle.</description>
<link>https://example.com/merino-crew-sweater?colour=charcoal&size=l</link>
<g:image_link>https://cdn.example.com/swtr-merino-charcoal-1.jpg</g:image_link>
<g:availability>out_of_stock</g:availability>
<g:price>89.00 EUR</g:price>
<g:brand>Example</g:brand>
<g:gtin>5012345678931</g:gtin>
<g:mpn>SW-MC-CHR-L</g:mpn>
<g:condition>new</g:condition>
<g:google_product_category>1604</g:google_product_category>
<g:color>Charcoal</g:color>
<g:size>L</g:size>
<g:size_system>EU</g:size_system>
<g:size_type>regular</g:size_type>
<g:material>Merino Wool</g:material>
<g:gender>male</g:gender>
<g:age_group>adult</g:age_group>
<g:custom_label_0>core</g:custom_label_0>
<g:custom_label_1>broken-size</g:custom_label_1>
</item>
</channel>
</rss>Четыре момента, на которые стоит обратить внимание:
- item_group_id и item_group_title одинаковы; id и title — нет.
- link содержит параметры глубокой ссылки, чтобы реклама вела на нужное предвыбранное состояние. Символ & экранирован как & — это обязательно в XML и часто становится причиной ошибок разбора.
- image_link зависит от варианта. Обе тёмно-синие строки указывают на фотографию тёмно-синего цвета. Одно главное изображение для всех цветов — вторая по частоте ошибка с вариантами после отсутствующих ID групп.
- Строка с отсутствующим товаром помечена через custom_label_1, поэтому её можно исключить или понизить ставку, не удаляя из фида.
CSV / TSV
Те же данные в плоском виде. Строка заголовков и два варианта:
csv
id,item_group_id,item_group_title,title,description,link,image_link,availability,price,brand,gtin,condition,google_product_category,color,size,size_system,material,gender,age_group,custom_label_0
SWTR-MERINO-CREW-NAV-M,SWTR-MERINO-CREW,Merino Crew Neck Sweater,"Merino Crew Neck Sweater — Navy, Medium","Fine-gauge 100% merino wool crew neck.",https://example.com/merino-crew-sweater?colour=navy&size=m,https://cdn.example.com/swtr-merino-navy-1.jpg,in_stock,89.00 EUR,Example,5012345678900,new,1604,Navy,M,EU,Merino Wool,male,adult,core
SWTR-MERINO-CREW-CHR-L,SWTR-MERINO-CREW,Merino Crew Neck Sweater,"Merino Crew Neck Sweater — Charcoal, Large","Fine-gauge 100% merino wool crew neck.",https://example.com/merino-crew-sweater?colour=charcoal&size=l,https://cdn.example.com/swtr-merino-charcoal-1.jpg,out_of_stock,89.00 EUR,Example,5012345678931,new,1604,Charcoal,L,EU,Merino Wool,male,adult,coreИменно в CSV происходит большинство реальных поломок, потому что запятые внутри названий и описаний нужно заключать в кавычки, а кавычки внутри полей в кавычках — экранировать. Если в ваших названиях есть запятые — а в названиях товаров с цветом и размером они есть почти всегда, — используйте TSV. Табуляция практически никогда не встречается в данных о товарах, и целый класс ошибок разбора исчезает.
JSON
Для загрузки через API:
json
{
"products": [
{
"id": "SWTR-MERINO-CREW-NAV-M",
"item_group_id": "SWTR-MERINO-CREW",
"item_group_title": "Merino Crew Neck Sweater",
"title": "Merino Crew Neck Sweater — Navy, Medium",
"link": "https://example.com/merino-crew-sweater?colour=navy&size=m",
"image_link": "https://cdn.example.com/swtr-merino-navy-1.jpg",
"availability": "in_stock",
"price": { "value": "89.00", "currency": "EUR" },
"brand": "Example",
"gtin": "5012345678900",
"condition": "new",
"google_product_category": "1604",
"variant_attributes": {
"color": "Navy",
"size": "M",
"size_system": "EU",
"material": "Merino Wool"
},
"gender": "male",
"age_group": "adult"
}
]
}Полная размерная линейка
Шесть вариантов — два цвета × три размера — с наглядной схемой ID:
| id | item_group_id | color | size | availability |
|---|---|---|---|---|
| SWTR-MC-NAV-S | SWTR-MERINO-CREW | Navy | S | in_stock |
| SWTR-MC-NAV-M | SWTR-MERINO-CREW | Navy | M | in_stock |
| SWTR-MC-NAV-L | SWTR-MERINO-CREW | Navy | L | in_stock |
| SWTR-MC-CHR-S | SWTR-MERINO-CREW | Charcoal | S | out_of_stock |
| SWTR-MC-CHR-M | SWTR-MERINO-CREW | Charcoal | M | in_stock |
| SWTR-MC-CHR-L | SWTR-MERINO-CREW | Charcoal | L | out_of_stock |
У Charcoal остался один размер из трёх. Что с этим делать, описано в разделе 9.
6. Канал за каналом
Концепция универсальна. Реализация — нет. Вот как каждый крупный канал ожидает получать варианты и в чём они различаются.
Google Shopping / Merchant Center
Самый строгий канал и эталонная реализация, которую заимствует большинство других.
- item_group_id обязателен для бесплатных листингов, а также для рекламы в Shopping в Бразилии, Франции, Германии, Японии, Великобритании и США всякий раз, когда передаются варианты.
- Атрибуты, определяющие вариант, должны быть заполнены: color и size обязательны для одежды на этих рынках.
- gender и age_group обязательны для одежды и должны быть согласованы в пределах группы.
- Посадочная страница должна визуально соответствовать переданным значениям варианта, иначе вы рискуете получить отклонение Mismatched value (page crawl).
- Каждый вариант участвует в аукционе самостоятельно. Google выбирает, какой член группы показать по конкретному запросу, поэтому неполная группа означает более слабый пул кандидатов.
- image_link для одежды должен быть не менее 500×500 пикселей — этот минимум будет применяться с 31 января 2027 года, и аудит стоит провести сейчас, а не в спешке.
Практическое замечание: Merchant Center формирует отчёты на уровне варианта (id), а не группы. Чтобы правильно оценить товар, нужно самостоятельно агрегировать данные по item_group_id — это намного проще, если ID группы чистый и стабильный.
Meta (Facebook и Instagram)
Meta использует то же название поля, но с другими ограничениями и существенно иной моделью отображения.
- item_group_id допускает до 100 символов и учитывает регистр.
- color и size допускают до 200 символов.
- Значения availability пишутся через пробел, а не через подчёркивание: in stock, а не in_stock. Одно это различие ломает фиды Meta чаще, чем что-либо другое, особенно когда фид Google используется повторно без изменений.
- В Shops и на страницах с подробностями о товаре правильно сгруппированный набор отображается как один товар с селектором вариантов, а не как несколько почти одинаковых листингов.
- Каталожная реклама Advantage+ использует группу, чтобы не показывать пользователю шесть версий одного и того же свитера в одной карусели, — несгруппированный каталог даёт заметно однообразную рекламу и впустую потраченные показы.
- Отчётность на уровне вариантов в Commerce Manager зависит от правильной группировки.
Практическое замечание: не направляйте в Meta фид Google без изменений. Как минимум преобразуйте availability и проверьте лимиты символов. Большинство платформ для фидов, включая Feedance, выполняют это как преобразование на уровне канала, чтобы исходные данные оставались нетронутыми.
TikTok
- item_group_id допускает до 150 символов.
- sku_id — уникальный идентификатор каждого варианта: у каждой строки варианта должно быть своё значение.
- color и size допускают до 200 символов.
- title допускает до 255 символов, description — до 10 000; ожидается google_product_category.
- TikTok — самый строгий канал в отношении изображений для каждого варианта. В карточках товаров отображается селектор вариантов, и варианты с одним общим изображением работают заметно хуже. Если вы и экономите на конвейере изображений, то не здесь.
- Во многом следует модели Google; item_group_id группирует варианты.
- Pinterest показывает варианты внутри одного Product Pin с выбираемыми опциями.
- Качество изображений и вертикальные пропорции здесь особенно важны — Pinterest является площадкой визуального поиска, и изображения вариантов, которые не отличаются друг от друга, просто не сохраняют.
Amazon
Amazon не использует item_group_id, и обратное предположение приводит к большому объёму напрасной работы.
Amazon использует явную модель отношений родитель/потомок:
- Родительский ASIN создаётся как листинг, недоступный для покупки.
- Каждый дочерний ASIN ссылается на родителя через поля parent_sku / parent_child.
- Необходимо объявить тему вариаций (variation theme) — SizeColor, Size, Color, SizeName-ColorName и так далее, в зависимости от категории.
- Тема должна быть допустимой для конкретной категории; одно и то же название темы доступно не везде.
Если вы экспортируете данные и в Google, и в Amazon из одного источника, рассматривайте это как полноценное преобразование, а не переименование поля. Ваш слой фидов должен создать родительский листинг, назначить тему и сопоставить с ним потомков.
Региональные маркетплейсы и системы сравнения цен
У турецких и, шире, ближневосточных (MENA) каналов свои соглашения, и на этих рынках именно они часто отличают работающий каталог от сломанного.
- Trendyol использует собственную модель родитель/потомок с обязательным набором атрибутов для каждой категории. Цвет и размер — отдельные структурированные поля, а списки обязательных атрибутов различаются по категориям.
- Akakçe и Cimri — системы сравнения цен. Обычно они ожидают одну строку на каждый доступный для покупки SKU, а почти одинаковые дублирующиеся строки, как правило, отфильтровываются, — поэтому передача полной размерной линейки без различающихся данных может не увеличить, а уменьшить видимость.
- Hepsiburada и N11 определяют собственные ключи группировки вариантов и обязательные атрибуты.
Именно здесь универсальные глобальные инструменты для фидов чаще всего не справляются, и именно здесь неправильно сопоставленный атрибут незаметно убирает с маркетплейса целую категорию.
Сравнение
| Meta | TikTok | Amazon | |||
|---|---|---|---|---|---|
| Ключ группировки | item_group_id | item_group_id | item_group_id | item_group_id | Родительский ASIN |
| Макс. длина | 50 | 100 | 150 | 50 | н/д |
| Учёт регистра | Нет | Да | Да | Нет | н/д |
| Синтаксис availability | in_stock | in stock | in_stock | in stock | Количество |
| Изображения вариантов | Рекомендуются | Рекомендуются | Критически важны | Критически важны | Обязательны |
| Нужна явная тема | Нет | Нет | Нет | Нет | Да |
| Отчётность на уровне вариантов | Да | Да | Да | Ограничена | Да |
7. Разделять или сворачивать?
Передача каждого варианта — рекомендация по умолчанию, но она верна не всегда. Настоящий вопрос в том, меняет ли вариация то, чего хочет покупатель.
Передавайте каждый вариант, когда…
- Вариация и есть решение о покупке. Одежда, обувь — всё, где неверный размер означает отсутствие продажи.
- Остатки заметно различаются по вариантам. Реклама товара, у которого остался только размер 3XL, — это потраченный впустую бюджет.
- Цена различается по вариантам. Если показать 89 €, когда выбранный вариант стоит 119 €, получится несоответствие цены и рассерженный покупатель.
- Поисковый спрос привязан к вариантам. Люди ищут «тёмно-синий свитер из мериноса размер M». Вы не сможете ранжироваться по такому запросу, не передав этот вариант.
Сворачивайте до одного представительного варианта, когда…
- Каталог очень большой и в основном однородный. Магазин инструментов и хозтоваров с 200 000 SKU, где 60% — незначительные вариации длины, мало выигрывает от полного развёртывания и расплачивается за него сложностью обработки фида и кампаний.
- Канал штрафует почти одинаковые позиции. Некоторые системы сравнения цен отфильтровывают повторяющиеся строки; полная размерная линейка может снизить видимость.
- Вариация не влияет на цену, изображение или наличие. Если все двенадцать вариантов одинаковы во всём, что имеет коммерческое значение, двенадцать строк создают шум, а не сигнал.
Сворачивая варианты, выбирайте представительный осознанно: самый продаваемый вариант из имеющихся в наличии, а не первую строку по алфавиту. Именно здесь данные об эффективности оправдывают своё место в фиде — данные GA4 или платформы могут выбирать представительный вариант автоматически, а не оставлять это порядку сортировки.
Промежуточный путь
Разделяйте по оси, которая определяет решение; сворачивайте по той, которая его не определяет.
Для обуви это обычно означает одну строку на цвет со свёрнутыми размерами — цвет является осью поиска, а размер — проверкой посадки, которая происходит на странице. Для товара, где цену определяет объём, разделяйте по объёму и сворачивайте по цвету.
8. 12 самых частых ошибок с вариантами
| # | Симптом | Причина | Решение |
|---|---|---|---|
| 1 | Варианты отображаются как отдельные не связанные между собой товары | item_group_id отсутствует или уникален для каждой строки | Заполните его родительским SKU; убедитесь, что он повторяется в пределах группы |
| 2 | Некоторые варианты полностью отсутствуют в канале | Дублирующиеся значения id — более поздние строки незаметно отбрасываются | Обеспечьте уникальность при экспорте; добавьте проверку на дубликаты |
| 3 | Отклонение «Mismatched value (page crawl)» | Посадочная страница показывает другой цвет/размер/цену, чем передано | Добавьте параметры глубокой ссылки; убедитесь, что страница отрисовывает выбранное состояние на стороне сервера |
| 4 | У всех вариантов одна и та же фотография | Повторно используется одно главное изображение в image_link | Сопоставьте изображения для каждого варианта; используйте главное изображение только при отсутствии изображения варианта |
| 5 | Клики по рекламе ведут на отсутствующие варианты | availability не синхронизируется по каждому варианту | Увеличьте частоту обновления; исключите out_of_stock из активных кампаний |
| 6 | color отклоняется | Шестнадцатеричный код, число, одна буква или слитное слово | Сопоставьте с простыми названиями цветов; несколько цветов разделяйте символом / |
| 7 | Фильтры по размеру не работают; запросы с размером не находят соответствий | Непоследовательные значения размеров в каталоге (M / Medium / med) | Нормализуйте с помощью таблицы сопоставления на уровне фида |
| 8 | Группа распадается в Meta, но не в Google | Несогласованный регистр в item_group_id | Используйте единый регистр для всего поля |
| 9 | Meta отклоняет весь фид | in_stock используется там, где Meta ожидает in stock | Преобразуйте availability для каждого канала |
| 10 | Группа отклонена из-за несогласованных атрибутов | gender или age_group различаются внутри группы | Эти атрибуты постоянны для группы; разделите мужской и женский крои на разные группы |
| 11 | История эффективности обнуляется при каждой синхронизации | item_group_id генерируется заново при каждом экспорте | Формируйте его из стабильного исходного поля, никогда — из порядка строк или хеша |
| 12 | XML-фид не удаётся разобрать | Неэкранированный & в URL глубоких ссылок | Экранируйте как &; проверяйте XML перед публикацией |
На ошибки 1, 2, 4 и 11 приходится подавляющее большинство того, что мы видим в реальных аудитах. Ни одна из них не сложна; все они невидимы, пока кто-нибудь специально их не поищет.
9. Неполные размерные линейки и здоровье запасов
Неполная размерная линейка (broken size run) — это товар, группа которого технически активна, но практически непродаваема: свитер, доступный только в XS и 3XL, обувь, у которой осталось два размера из девяти.
Это важнее, чем кажется. Когда покупатель кликает по рекламе товара и обнаруживает, что его размера нет, вы заплатили за клик, который не мог принести конверсию, и вдобавок потратили лояльность к бренду. В масштабе товары с неполными размерными линейками могут поглощать заметную долю бюджета, почти ничего не принося в выручку.
Как это обнаружить
Рассчитайте для каждого item_group_id:
size_availability_ratio = in_stock_variants / total_variantsЗатем действуйте по пороговым значениям. Рабочая отправная точка:
| Коэффициент | Интерпретация | Действие |
|---|---|---|
| > 0.7 | Здоровая линейка | Рекламируйте как обычно |
| 0.4 – 0.7 | Линейка редеет | Снизьте ставки; наблюдайте |
| 0.2 – 0.4 | Неполная линейка | Исключите из привлечения новой аудитории; только ретаргетинг |
| < 0.2 | Фактически распродано | Исключите полностью |
Взвешивайте это по спросу, а не только по количеству. Потеря XXS и XXL значит гораздо меньше, чем потеря M и L, на которые обычно приходится основной объём. Коэффициент, который считает все размеры равнозначными, будет недостаточно реагировать на потерю ваших ключевых размеров.
Как на это реагировать
Самая чистая реализация — помечать это состояние в фиде, а не удалять товар:
xml
<g:custom_label_1>broken-size</g:custom_label_1>Пометка вместо удаления сохраняет историю товара в канале и позволяет мгновенно возобновить показ, когда товар вернётся в наличие. Удаление и повторное добавление обнуляют обучение.
Ещё два усовершенствования, которые стоит реализовать:
- Обратная связь для мерчандайзинга. Регулярно повторяющийся список неполных размерных линеек — это сигнал для закупок, а не только рекламная проблема.
- Повторная проверка при каждой синхронизации. Остатки меняются, и метка должна меняться вместе с ними. Статичный список неполных размерных линеек хуже, чем его отсутствие, потому что он подавляет товары, которые с тех пор были пополнены.
10. Использование вариантов для сегментации кампаний
Когда варианты правильно структурированы, данные превращаются в уровень сегментации — пожалуй, это самое выгодное применение чистого фида вариантов.
Google предоставляет пять полей custom_label (0–4). Они принимают произвольные значения и существуют исключительно для вашей собственной логики кампаний. Данные о вариантах — идеальный источник для них.
Рабочая схема
| Метка | Измерение | Примеры значений |
|---|---|---|
| custom_label_0 | Уровень маржинальности | high-margin, standard, clearance |
| custom_label_1 | Здоровье запасов | full-size-run, thinning, broken-size |
| custom_label_2 | Уровень эффективности | bestseller, steady, long-tail |
| custom_label_3 | Сезонность | ss26, aw25, core, carryover |
| custom_label_4 | Ценовой диапазон | under-50, 50-100, 100-200, over-200 |
Когда эти метки на месте, логика кампаний становится простой:
- Повышайте ставки для bestseller + full-size-run + high-margin
- Исключайте broken-size из кампаний по привлечению новой аудитории
- Выделите clearance в отдельную кампанию с агрессивным tROAS
- Обособьте ss26 при запуске сезона
Performance Max и Advantage+
Обе кампании в значительной степени автоматизированы, поэтому сегментация на уровне фида становится более, а не менее важной. Вы больше не управляете ставками на уровне ключевых слов, и фид становится вашим главным рычагом управления расходами.
В Performance Max custom labels определяют структуру групп объектов и групп товаров (asset group и listing group). Разделение одной общей группы объектов на группы по маржинальности или здоровью запасов — один из немногих оставшихся структурных рычагов, и он полностью зависит от того, заполнены ли метки на основе реальных данных.
В каталожной рекламе Advantage+ правильная группировка не позволяет карусели заполниться шестью оттенками одного и того же свитера, а наборы товаров, построенные на атрибутах вариантов, позволяют разделить ассортимент для привлечения новой аудитории и для ретаргетинга.
Обогащение меток данными об эффективности
Статичные метки устаревают. bestseller, присвоенный в прошлом сезоне, в этом сезоне — дезинформация.
Более сильная реализация пересчитывает метки на основе актуальных данных об эффективности — выручки GA4, коэффициента конверсии, числа просмотров — при каждой синхронизации фида. Товар, который перестал продаваться, автоматически выпадает из bestseller; тот, что начал продаваться, попадает туда. Это ключевая часть того, что обогащение фида означает на практике, и именно этим метки, управляющие бюджетом, отличаются от меток, которые лишь описывают прошлый квартал.
11. Измерение эффективности вариантов
Данные на уровне вариантов — это то место, где большая часть отчётности незаметно разваливается.
Проблема агрегации. Merchant Center и Ads формируют отчёты на уровне id. Свитер в 20 вариантах отображается как 20 строк, у каждой из которых лишь часть объёма и ни одна не значима по отдельности. Любой вывод, сделанный по одной строке варианта, скорее всего, — шум.
Всегда анализируйте на двух уровнях:
- Уровень группы (item_group_id) — работает ли этот товар? Агрегируйте расходы, конверсии и выручку по всем членам группы.
- Уровень варианта (id) — какие опции работают? Какие цвета продаются, какие размеры заканчиваются первыми, какие сочетания не продаются вовсе.
Самые интересные находки — на втором уровне. Он отвечает на вопросы, которые волнуют мерчандайзинг: продаётся ли тёмно-синий в три раза лучше угольно-серого? Конвертируются ли варианты размера L лучше, потому что они всегда в наличии? Не тянет ли один цвет вниз средний показатель группы?
Метрики, которые стоит отслеживать по каждой группе:
| Метрика | Зачем |
|---|---|
| Коэффициент доступности размеров | Опережающий индикатор потраченного впустую бюджета |
| Охват вариантов в канале | Переданные против фактически одобренных — в этом разрыве и прячутся проблемы |
| Доля показов по вариантам | Показывает, каким опциям канал действительно отдаёт предпочтение |
| Коэффициент конверсии по цветам | Сигнал для мерчандайзинга и закупок |
| Доля отклонений по группам | Помогает рано выявлять системные ошибки атрибутов |
Замечание об атрибуции. Покупатель часто видит рекламу одного варианта, а покупает другой — кликает по тёмно-синему, покупает угольно-серый. Поэтому ROAS на уровне вариантов, воспринятый буквально, будет атрибутировать неверно. Оценивайте товары на уровне группы; используйте данные о вариантах, чтобы понимать поведение, а не чтобы принимать решения о ставках на основе малых выборок.
12. Чек-лист перед запуском
Пройдите его, прежде чем запускать фид вариантов, и после любого структурного изменения.
Структура
- У каждого варианта уникальный id
- У всех членов группы одинаковый item_group_id
- item_group_id формируется из стабильного исходного поля и не меняется между экспортами
- item_group_id использует единый регистр во всём фиде
- Каждый член группы отличается как минимум одним атрибутом, определяющим вариант
- item_group_title присутствует и одинаков во всей группе
Атрибуты
- color использует простые названия цветов — без шестнадцатеричных кодов, чисел и отдельных букв
- Несколько цветов разделены символом /, основной — первым
- Значения size нормализованы во всём каталоге
- size_system указан там, где вы продаёте в регионах с разными размерными системами
- gender и age_group одинаковы внутри каждой группы
- material и pattern заполнены там, где они определяют вариацию
Ссылки и изображения
- link каждого варианта ведёт на правильное предвыбранное состояние
- & экранирован как & в XML
- image_link зависит от варианта, а не является общим главным изображением
- Изображения соответствуют минимальным размерам каждого канала
Преобразования для каналов
- Синтаксис availability адаптирован для каждого канала (in_stock или in stock)
- Лимиты символов соблюдены для каждого канала
- Экспорты в Amazon создают родительские листинги и объявляют допустимую тему вариаций
- Наборы атрибутов региональных маркетплейсов сопоставлены для каждой категории
Операционные процессы
- Частота обновления соответствует реальной скорости изменения остатков
- Обнаружение неполных размерных линеек выполняется при каждой синхронизации
- Проверка на дублирующиеся id выполняется перед экспортом
- Перед публикацией фид проверяется на корректность XML/CSV
- Настроены оповещения о резком падении количества товаров
13. FAQ
Нужно ли передавать каждый вариант без исключения? Не всегда, но для одежды и обуви, где размер и цвет и есть решение о покупке, обычно да. Для очень больших однородных каталогов или каналов, которые отфильтровывают почти одинаковые позиции, передача одного удачно выбранного представительного варианта на группу может работать лучше. Выбирайте представительный вариант по продажам и наличию, а не по алфавиту.
Что произойдёт, если не указать item_group_id? Каждый вариант будет рассматриваться как отдельный, не связанный с другими товар. Вы теряете селектор вариантов на целевой площадке, реклама становится однообразной, отчётность на уровне вариантов ломается, а в Google вы можете не выполнить требование: item_group_id обязателен для бесплатных листингов и для рекламы в Shopping на нескольких крупных рынках при передаче вариантов.
Могут ли у вариантов быть разные цены? Да. Цена не является атрибутом, определяющим вариант, но вполне может различаться у разных вариантов — большие размеры часто стоят дороже. Переданная цена должна совпадать с той, что показывает посадочная страница для этого конкретного варианта.
Должны ли отсутствующие варианты оставаться в фиде? Как правило, да. Оставляйте их со значением availability: out_of_stock, а не удаляйте. Удаление и повторное добавление обнуляют историю позиции в канале. Вместо этого исключайте их из активных кампаний с помощью правила или custom label.
Может ли один товар принадлежать двум группам? Нет. item_group_id принимает одно значение на позицию. Если товар действительно относится к двум концептуальным группам, у вас проблема с мерчандайзинговой таксономией, которую нужно решать на более раннем этапе.
Нужны ли отдельные значения item_group_id для каждого канала? Нет — и не следует их заводить. Используйте одну и ту же логическую группировку везде. Для каждого канала различается лишь применяемое к ней преобразование: лимиты символов, регистр, синтаксис. Храните единый источник истины и адаптируйте данные при экспорте.
Как быть с товарами, у которых действительно один размер? Передавайте size как one_size, OS или OSFA. Не оставляйте его пустым для одежды на рынках, где размер обязателен.
Мужская и женская версии одного дизайна — одна группа или две? Две. gender должен быть одинаковым во всей группе. Разный крой и разные размерные сетки делают их с точки зрения покупателя разными товарами.
Что чаще всего ломается на практике? По нашим аудитам: общие главные изображения у вариантов разных цветов, значения item_group_id, генерируемые заново при каждом экспорте, и синтаксис availability, без изменений перенесённый из фида Google в Meta. Все три проблемы не видны в интерфейсе и проявляются лишь как необъяснимо слабые результаты.
Что в итоге
Фиды вариантов вознаграждают точность так, как это редко бывает в цифровом маркетинге. В item_group_id нет места творческим решениям — он либо стабилен и общий, либо нет. Значения цвета либо соответствуют спецификации, либо отклоняются. Изображения либо соответствуют варианту, либо клик потрачен впустую.
И это хорошая новость: это решаемая проблема с однозначным ответом. Вся работа — в поддержании порядка, потому что каталоги меняются ежедневно, остатки — ежечасно, а каждый канал корректирует свою спецификацию по собственному графику.
Компании, которые справляются с этим, относятся к фиду вариантов как к инфраструктуре, а не как к файлу. Они формируют ID групп из стабильных исходных данных, один раз нормализуют атрибуты в источнике, преобразуют данные для каждого канала при экспорте, пересчитывают здоровье запасов при каждой синхронизации и получают оповещения, когда что-то неожиданно меняется.
Именно для этого уровня создан Feedance — правила фида для нормализации атрибутов в источнике, обнаружение неполных размерных линеек, которое пересчитывается при каждой синхронизации, обогащение данными GA4, поддерживающее актуальность меток эффективности, и экспорт в каналы, применяющий нужное преобразование для каждого из более чем 200 каналов назначения без изменения ваших исходных данных.
Если вы хотите понять, в каком состоянии ваша структура вариантов, прежде чем что-либо менять, наш бесплатный инструмент аудита фида бесплатно оценит существующий фид по полноте, качеству данных и техническому состоянию — включая группировку вариантов.

Сооснователь Feedance, использующий свой опыт инженера-программиста и маркетолога для получения аналитических инсайтов. Уделяя особое внимание превращению данных в практические стратегии, он помогает брендам добиваться значительного роста в цифровой среде.
LinkedIn


















