Задача
Клиент — интернет-магазин товаров для дома и ремонта, около 15 000 SKU в ассортименте. Каталог собирается из фидов 40+ поставщиков: один присылает красивые описания, другой — только название и артикул, третий — технические характеристики таблицей. На выходе у магазина был зоопарк: часть карточек с полноценным описанием, часть с копипастой «от производителя», часть без текста вообще.
Проблема была видна невооружённым глазом:
- Магазин не ранжировался в Яндексе по низкочастотным коммерческим запросам — тем самым, где лежит вся маржа.
- Одна и та же модель товара у магазина и у трёх конкурентов ранжировалась по одному и тому же фиду. Яндекс считал карточки дубликатами.
- Контент-менеджер писал описания руками, успевал ~30 карточек в день. При 15 000 SKU и регулярных новинках догнать ассортимент было невозможно.
Задача — за две недели выпустить все 15 000 карточек с уникальным описанием, SEO-мета-тегами и размеченными характеристиками для фильтрации.
Что уникально в e-commerce SEO
В блоговом SEO ставка на длинную информационную статью: пишешь одну глубокую статью на запрос и надеешься удержать ТОП. В e-commerce ставка противоположная — короткие описания в огромных количествах. Каждое точно под SKU, каждое уникальное, и уникальное именно по тем параметрам, по которым ищут.
Это меняет всё. Генерация описаний — не копирайтерская, а шаблонная. Идеальное описание строительного шурупа состоит не из литературного текста, а из:
- Коротких тезисов про применение (3–4 пункта)
- Технической таблицы характеристик
- Одного параграфа про совместимость и отличия от аналогов
- SEO-хвоста с тематическими словами по намерению запроса
Попробовать генерировать такое «свободным промптом» — получить 15 000 разных по структуре карточек. Мы пошли другим путём: жёсткие шаблоны под каждую категорию товаров.
Архитектура пайплайна
Фид поставщика (CSV / XML / Excel / JSON)
│
▼
Нормализатор
(маппинг в единую схему)
│
▼
Классификатор категории
(AI: товар → категория магазина)
│
▼
Выбор шаблона (по категории)
│
▼
Сверка характеристик
— сопоставление с базой
— чтение спецификаций с сайта производителя
│
▼
LLM: генерация описания по шаблону
│
▼
Валидатор
— проверка обязательных полей
— дедупликация с существующими карточками
— SEO-проверка (длина title, description)
│
▼
Черновик в БД магазина (на ручную проверку)
│
▼
Публикация в CMS через API
Ключевые решения, которые повлияли на результат
Категорийные шаблоны — и их много
Первая версия пайплайна пыталась обойтись одним универсальным промптом «сгенерируй описание товара по характеристикам». На выходе получались корректные, но одинаковые по ритму тексты — Яндекс их склеивал в группы. Пришлось признать: каждая категория товара — своя задача генерации.
В итоге у магазина получилось 37 категорий и 37 шаблонов-промптов. Каждый описывает структуру, обязательные поля, тон, типовые фразы, запрещённые конструкции. Шаблон «лакокрасочные материалы» требует отдельного блока про совместимость с поверхностью и условия хранения. Шаблон «ручной инструмент» — блок про материалы рукоятки и вес.
Звучит как много работы. На деле — три дня. Дальше все 15 000 SKU проходят по этим шаблонам автоматически.
Классификатор категории — самый важный компонент

Фиды от разных поставщиков маркируют категории по-разному. «Шуруп» может прийти в категории «Крепёж», «Метизы», «Шурупы саморезы», или вообще без категории — в названии товара. Отправить «Шуруп оцинкованный 4×30 мм» в шаблон «пиломатериалы» — значит получить бессмысленный текст.
Сделали отдельный AI-классификатор первым шагом пайплайна. Модель смотрит на полные данные о товаре (название, артикул, производитель, группы фида, исходное описание) и выбирает одну из 37 категорий. Точность на размеченной выборке из 500 случаев — 97,4%. Остальные 2,6% уходят в ручную проверку.
Сверка характеристик: защита от галлюцинаций

Генерация «из головы модели» по техническим характеристикам — путь к галлюцинациям. Модель пишет: «идеально подходит для работы с древесиной твёрдых пород». А производитель на самом деле заявляет только мягкие породы. Мелочь, которая убивает доверие клиента — а он-то потом оставит отзыв «не подошло, продавец обманул».
Решение — отдельный шаг сверки. Мы сопоставляем характеристики из фида с тем, что лежит на сайте производителя. Шаг парсит страницу производителя (если публичная), вытаскивает таблицу характеристик, сравнивает с фидом, помечает расхождения. В промпт генерации уходит только то, что подтверждено с двух источников.
На 15 000 SKU сверка нашла ~1 400 расхождений — часть фида была банально устаревшей. Побочный продукт проекта: магазин получил ревизию своего же каталога.
Дедупликация: 15 000 описаний должны быть уникальными между собой
Шаблон генерирует тексты с похожей структурой. Внутри одного SKU это норма — даже хорошо. Но если у магазина 200 видов шурупов, то 200 описаний «по шаблону метизов» могут иметь 60–70% совпадающего текста между собой, и Яндексу это тоже не нравится.
Лечение — вариативность на уровне карточки. В шаблон встроены вариативные слоты («применяется для [крепления / установки / монтажа]», «подходит для работы с [материалом-X / материалом-Y]»), и для каждой карточки AI выбирает комбинацию слотов под конкретные характеристики товара. Плюс финальная проверка: попарная похожесть по n-граммам между карточками одного поставщика, всё, что выше 0,85 — отправляется на повторную генерацию с усиленной вариативностью.
Производительность: как уложились в 2 дня
15 000 SKU × несколько вызовов модели на карточку (классификатор → сверка → генерация → валидация) — это объёмный батч. Гнали на 16 параллельных воркеров с очередью задач. Узкие места:
- Ограничение запросов в минуту у провайдера LLM — около 500 на тарифе.
- Парсинг сайта производителя в сверке — некоторые сайты отдают 429 при нагрузке, пришлось ставить ограничение скорости запросов по каждому домену.
- Валидатор дедупликации — при 15 000 карточек попарное сравнение квадратично по памяти. Пришлось разбивать на поставщиков и сравнивать внутри группы.
Итоговая статистика батча:
| Этап | Время (суммарно) | Итог |
|---|---|---|
| Классификация всех SKU | 3 ч | 14 603 ок, 397 на ручную проверку |
| Сверка характеристик | 11 ч | 13 847 с подтверждёнными характеристиками |
| Генерация описаний | 18 ч | 15 000 карточек |
| Валидация и дедупликация | 6 ч | 247 карточек на переработку |
| Повторная генерация | 2 ч | 247 новых вариантов |
| Ручная проверка контент-менеджером | 8 ч (1 день) | 68 карточек с правками |
| Публикация в CMS | 1 ч | 15 000 карточек опубликованы |
Итого — 49 часов машинного времени и 8 часов ручной работы, уложились в два календарных дня.
SEO-мета-теги: отдельный маленький пайплайн
Описания — это только часть задачи. Второй, не менее важный блок — SEO-мета-теги:
- Title: «Шуруп оцинкованный 4×30 мм — купить в [магазин] по цене от XX ₽»
- Description: короткое, с ключевыми словами из запроса, с призывом.
- H1: уникальный, не равный title.
Каждое поле имеет ограничения по длине и обязательные элементы (название товара, бренд магазина, цена, слово «купить» в title). Генератор мета-тегов — отдельный мини-промпт, который бежит после генерации описания, берёт финальные данные карточки и формирует три поля одновременно с проверкой длины.
Если title получился длиннее 70 символов — автоматическая перегенерация с требованием ужать. Та же логика на description (ограничение 160).
Фильтры: не генерация, а извлечение
Третий блок, про который часто забывают — фильтры каталога. Хороший фильтр закрывает 50–70% навигационных запросов: «шурупы по дереву 50 мм», «краска алкидная матовая белая», «дрель аккумуляторная с реверсом».
Для фильтрации нужны структурированные характеристики: не «описание шурупа», а тип=по_дереву, длина=50, покрытие=оцинкованный. У магазина эти поля были в зоопарке: часть заполнена, часть пустая, часть в свободном тексте внутри описания.
Добавили к пайплайну отдельный шаг извлечения: модель вытаскивает из описания, фида и спецификации производителя структурированные пары «характеристика–значение», приводит к нормализованным значениям (миллиметры → целое число, цвет → из фиксированного списка) и записывает в отдельную таблицу характеристик. Эти данные подцепляются фильтром каталога на стороне интерфейса.
Эффект — +1 246 новых URL фильтрации, которые сразу пошли в индекс Яндекса как полноценные страницы.
Результаты

Главная метрика для магазина — органический трафик и выручка с органики. Замеры через 2 месяца после полного деплоя:
| Метрика | До | После (2 мес) |
|---|---|---|
| Страниц карточек в индексе | 6 200 (часть с дубликатами) | 14 800 |
| Страниц фильтров в индексе | 140 | 1 386 |
| Уникальных ключей в ТОП-10 Яндекса | 2 100 | 9 400 |
| Органический трафик / мес | 38 000 | 121 000 |
| Выручка с органики / мес | базовый | ×2,8 |
| Время контент-менеджера / 100 новых SKU | 25 часов | 1,5 часа (только проверка) |
Особенно приятный эффект — длинный хвост. До внедрения магазин ранжировался по «общим» коммерческим запросам («купить шуруп»), где битва дорогая и маржа маленькая. После — начал собирать огромное количество точных низкочастотных запросов («шуруп оцинкованный 4×30 мм цена»), у которых конкуренция низкая, а конверсия в покупку существенно выше.
Вывод
Если у вас большой каталог и копирайтер не успевает — AI-пайплайн окупается ровно тогда, когда вы перестаёте мечтать про «одну универсальную формулу для всего» и начинаете делать шаблон под каждую категорию. 37 шаблонов — это три дня работы. Дальше всё крутится само.
Второе важное — не полагайтесь только на модель. Генерация из головы LLM — это галлюцинации. Генерация по нормализованным данным, подтверждённым вторым источником, — это надёжный контент. Разница между двумя подходами становится видна не сразу, а ровно тогда, когда первый отзыв «купил — не подошло по характеристике» превращается в возврат и минус в рейтинге магазина.



