Skip to content

Группировка SKU и варианты ​

В фидах одежды/обуви один товар обычно представлен несколькими офферами — по одному на каждый размер/цвет. Без группировки поиск по запросу «платье Ривьера» вернёт десяток почти одинаковых карточек. Группировка SKU сворачивает варианты одного товара в одну карточку.

Как варианты связываются: group_id ​

Варианты одного товара должны нести одинаковый group_id (и, как правило, одинаковые name, url, picture), различаясь размером/цветом:

xml
<offer id="5684" group_id="5652" available="false">
  <name>Баска на завышенной талии с кантом</name>
  <price>10100</price>
  <param name="Размер">XS</param>
</offer>
<offer id="5685" group_id="5652" available="true">
  <name>Баска на завышенной талии с кантом</name>
  <price>10100</price>
  <param name="Размер">S</param>
</offer>

Здесь два SKU (5684, 5685) — один товар (group_id=5652).

TIP

Если group_id не указан, он равен id оффера — то есть каждый оффер сам себе группа. Чтобы группировка что-то давала, варианты обязаны делить общий group_id. Именно так организованы варианты в типичном фиде одежды.

Включение группировки ​

Группировка настраивается на уровне проекта (sku_grouping):

  • enabled — включить сворачивание вариантов в группы;
  • group_by — по какому полю группировать (по умолчанию — group_id);
  • include_variants — вкладывать ли в карточку подробный список вариантов.

Когда группировка выключена (по умолчанию), в индекс идёт по документу на каждый SKU.

Что происходит при группировке ​

Офферы с одинаковым ключом группировки сворачиваются в один групповой документ:

  • Представитель — первый SKU группы; его поля берутся за основу карточки.
  • id и group_id документа = ключ группы.
  • price_min / price_max — минимальная и максимальная цена среди доступных вариантов (для отображения «от … ₽»); если доступных нет — среди всех.
  • availability — объединение статусов наличия всех вариантов.
  • is_available — есть ли в группе хотя бы один доступный вариант.
  • has_discount — есть ли скидка (старая цена строго выше текущей) хотя бы у одного доступного варианта; если доступных нет — среди всех.
  • has_photo — есть ли изображение у представителя, а не у любого варианта: карточка показывает картинку представителя, и флаг отвечает ровно за то, что видит покупатель.
  • Фасетные характеристики объединяются только по доступным вариантам: например, если размер XS распродан, Размер группы = ["S", "M"] — фильтры предлагают лишь то, что можно купить. У группы без единого доступного варианта фасетных значений нет: такой товар находится текстовым поиском, но не через фильтры.
  • Характеристики с флагом «агрегировать в группах» (aggregate_in_groups) сводятся в массивы уникальных значений по всем вариантам — это данные для отображения карточки, а не для фильтров.
group_id=5652
├── SKU 5684  price=10100  Размер=XS  (нет в наличии)
├── SKU 5685  price=10100  Размер=S   (в наличии)
└── SKU 5686  price=10100  Размер=M   (в наличии)
        │
        ▼  групповой документ
   id=5652  price_min=10100  price_max=10100  is_available=true
   Размер=["S","M"]  availability=["out of stock","in stock"]
   variants=[ {sku:5684,…}, {sku:5685,…}, {sku:5686,…} ]   ← если include_variants

Доступность товаров ​

Что считается «доступным вариантом», настраивается в личном кабинете проекта (раздел «Доступность товаров»):

  • Условие доступности — по умолчанию вариант доступен при available="true" в фиде. Условие можно расширить характеристиками: например, «в наличии или Предзаказ = Да» — тогда предзаказные варианты тоже попадают в фильтры.
  • Скрывать недоступные товары — если включено, товары без единого доступного варианта полностью исчезают из выдачи (а не только из фильтров).

Изменение настроек доступности автоматически запускает переимпорт фида — новое поведение видно после его завершения.

Массив variants ​

При include_variants = true в групповой документ добавляется массив variants — по элементу на SKU, с сохранением того, что группировка «схлопнула»:

json
{
  "sku": "5685",
  "availability": "in stock",
  "price": 10100,
  "url": "https://.../product/baska-.../",
  "image_url": "https://.../105b68.jpg",
  "images": ["https://.../105b68.jpg"],
  "properties": { "Размер": "S", "Цвет": "белый" }
}

Это нужно витрине, чтобы показать выбор размера/цвета прямо в карточке и знать цену/наличие/картинку каждого конкретного варианта. При include_variants = false массив variants пуст.

Рекомендации по фиду для группировки ​

  • Проставляйте стабильный общий group_id всем вариантам товара.
  • Держите одинаковыми name/url/picture у вариантов (карточку строит представитель).
  • Выносите различающий вариант атрибут (Размер, Цвет) в <param> и включайте для него «фасет» и/или «агрегировать в группах».
  • Корректно указывайте available на каждом SKU — из них собирается наличие группы, статусы отдельных вариантов и состав фильтров.