Для магазина товарная кампания — обычно самый дешёвый источник заявок: объявление собирается из карточки товара, показывается человеку, который ищет именно этот товар, и ведёт сразу на страницу покупки. Но всё держится на фиде. Если фид собран небрежно, кампания либо не запускается, либо тратит бюджет на то, чего нет в наличии. Разберём, как он устроен и что в нём проверять.
Что такое YML и чем он отличается от фида маркетплейса
YML — это XML-формат описания товарного каталога, который Яндекс использует и для Маркета, и для товарных объявлений в Директе. Структура простая: корневой элемент с датой генерации, внутри магазин, в нём валюты, дерево категорий и список предложений.
Принципиальное отличие от фида для Ozon и Wildberries: там вы отдаёте данные, чтобы площадка создала у себя карточку и продавала сама. Здесь ссылка в предложении ведёт на вашу страницу, продажа происходит у вас, а площадка только показывает объявление. Поэтому требования к данным другие: критичны ссылка, цена и наличие, а не соответствие атрибутов категорийному дереву площадки.
Один каталог — разные фиды. Пытаться отдать один файл и в Директ, и на маркетплейсы обычно получается хуже, чем сделать две выгрузки из одного источника данных.
Обязательный минимум в предложении
Предложение описывается элементом с идентификатором и признаком наличия. Внутри — набор полей, без которых оффер не пройдёт обработку:
- Ссылка на страницу товара — абсолютная, рабочая, без редиректа и без закрытия в robots
- Цена числом, без пробелов и символа рубля, больше нуля
- Код валюты из справочника
- Идентификатор категории, существующий в дереве категорий фида
- Хотя бы одна картинка абсолютной ссылкой
- Название — либо одним полем, либо парой «производитель и модель»
- Описание — его отсутствие не фатально, но объявление получается хуже
Отдельно про старую цену: она должна быть строго выше текущей. Если при генерации в неё попадает та же цена или ноль — предложение отклоняется, и это одна из самых частых причин, по которой половина каталога не доезжает до кампании.
Про идентификатор предложения: он должен быть уникальным и, что важнее, постоянным. Если при каждой генерации фида идентификаторы пересобираются заново — например, берутся из автоинкремента временной таблицы, — вся накопленная по товарам статистика обнуляется каждый раз. Берите идентификатор из карточки товара, он уже есть и уже стабилен.
Дерево категорий и почему оно рвётся
Категории в фиде задаются списком, где у вложенной категории указан родитель. Требование простое: родитель должен существовать в этом же списке. Нарушается оно регулярно — когда выгружаются только категории, в которых есть товары, а промежуточные уровни пропускаются.
Результат: часть дерева оказывается оторванной, и фильтры по категориям в кампании работают непредсказуемо. Правило при генерации — выгружать все категории по цепочке до корня, даже пустые, и только потом фильтровать предложения.
Технические требования к самому файлу
- Фид доступен по постоянной ссылке без авторизации и отдаёт код 200
- Тип содержимого — XML, кодировка UTF-8; сжатие допустимо и для больших каталогов полезно
- Амперсанды и угловые скобки в названиях и ссылках экранированы или обёрнуты в CDATA
- Файл генерируется по расписанию и кладётся статикой, а не собирается на каждый запрос
- Дата генерации в корневом элементе обновляется — по ней видно, что фид живой
Про статику стоит пояснить. Фид на десять тысяч позиций, который собирается в момент запроса, — это тяжёлый запрос к базе, и приходить за ним будут не только роботы Яндекса. Правильно: генерация по расписанию в файл, отдача файла веб-сервером напрямую. Побочная польза — фид перестаёт зависеть от того, что в этот момент происходит с сайтом.
Экранирование — отдельная классика. Ссылка с параметрами, в которой амперсанд вставлен как есть, делает XML невалидным целиком, а не одно предложение. Валидатор в кабинете это покажет, но лучше проверять на своей стороне после каждой генерации.
Цена и наличие: где кампания начинает жечь бюджет
Фид загружается с заданной периодичностью, не непрерывно. Между загрузками данные в кампании устаревают, и это нормально до определённого предела. Ненормально — когда фид генерируется из одного источника, а витрина показывает другой.
Типичный случай: цены на сайте считаются с учётом скидок и правил, а фид собирается напрямую из базовой цены. Человек видит в объявлении одну цифру, переходит и видит другую. Для площадки это расхождение цены, для покупателя — обман, и работает это против вас в обе стороны.
Второе — наличие. Признак наличия в предложении обязан отражать реальный остаток, а товары, которых нет, лучше не просто помечать, а исключать из фида фильтром. Иначе объявления ведут на карточки «нет в наличии» и бюджет уходит в клики без возможности купить. Если остатки приходят из учёта, частота генерации фида должна быть согласована с частотой обмена с учётной системой — иначе фид будет свежим относительно базы сайта и устаревшим относительно склада.
Фильтры: что вообще не нужно рекламировать
Отдавать в кампанию весь каталог — почти всегда ошибка. В настройках задаются условия выбора товаров, и ими стоит пользоваться:
- Исключить позиции дешевле порога, на которых реклама не отбивается в принципе
- Исключить товары без картинки или без описания — объявление из них выходит неконкурентным
- Исключить категории с нулевой маржой или с тем, что вы не готовы продавать в розницу
- Исключить отсутствующие в наличии, если они всё же попадают в фид
- Разделить дорогие и дешёвые группы по разным кампаниям — у них разная допустимая цена клика
Последний пункт про управляемость. Пока дорогие и дешёвые товары живут в одной кампании с одной стратегией, вы либо переплачиваете за дешёвое, либо недоплачиваете за дорогое. Разделение по цене — первое, что стоит сделать после запуска.
Связка с Метрикой: без неё считать нечего
Товарная кампания имеет смысл при автостратегиях, а автостратегии работают на данных о конверсиях. Значит, в Метрике должна быть настроена электронная коммерция, а не только цель «отправлена форма».
Минимальный набор событий, которые передаются в контейнер данных: просмотр карточки, добавление в корзину, оформление покупки с составом заказа и суммой. Критичная деталь, которую упускают почти всегда: идентификатор товара в событии покупки должен совпадать с идентификатором предложения в фиде. Если в фиде один код, а в электронной коммерции другой, отчёты по товарам не сойдутся и стратегия по доле рекламных расходов будет считать мимо.
Проверяется это за пять минут: открыть карточку, посмотреть, что уходит в контейнер данных, и сравнить с кодом в фиде. Настройка электронной коммерции — отдельная работа в рамках веб-аналитики, и делать её нужно до запуска кампании, а не после. О том, что ещё должно быть настроено заранее, мы писали в разборе целей в Метрике.
Разметка ссылок
Параметры разметки можно зашить в ссылки фида, можно задать на уровне кампании. Второе удобнее: ссылки в фиде остаются чистыми, разметка меняется без перегенерации, и нет риска получить два знака вопроса в одном адресе.
Что проверить обязательно: ссылка с параметрами открывается и отдаёт 200, параметры не ломают работу фильтров каталога, а канонический адрес страницы не меняется. Если параметры попадают в индекс, это уже вопрос к настройке SEO магазина — для рекламы они безвредны, для выдачи нет.
Что смотреть раз в неделю
- Статус последней загрузки фида и дата — фид мог перестать генерироваться молча
- Сколько предложений принято против того, сколько в файле — разрыв показывает отклонённые
- Список ошибок валидации: обычно это несколько повторяющихся причин, а не разные
- Товары, собравшие клики без заказов — кандидаты в исключения
- Товары с заказами — кандидаты на отдельную кампанию с большей ставкой
- Расхождение цены в объявлении и на странице — выборочно, руками
Про молчаливую остановку генерации стоит сказать подробнее, потому что это самая обидная поломка. Фид лежит по тому же адресу, отдаётся с кодом 200, кампания работает — но файл не обновлялся две недели. Цены старые, наличие старое, бюджет расходуется. Защита — мониторинг даты генерации в самом файле и оповещение, если она старше суток.
Товарная кампания и поисковая: не конкуренты
Распространённое опасение — что товарные объявления начнут перебивать обычные поисковые по тем же запросам. На практике они закрывают разные типы спроса: товарные хорошо отрабатывают конкретные запросы с моделью и артикулом, поисковые — категорийные и проблемные формулировки.
Разводятся они не ставками, а семантикой: в поисковой кампании остаются категорийные запросы, а конкретика отдаётся товарной. Пересечение видно в отчёте по поисковым фразам, и если оно есть — убирается минус-словами в поисковой, а не отключением товарной.
Порядок запуска, если начинаете с нуля
- Привести в порядок карточки: картинки, описания, цены, наличие
- Настроить электронную коммерцию в Метрике и проверить совпадение идентификаторов
- Сгенерировать фид по расписанию, проверить валидность и экранирование
- Загрузить фид в кабинет, разобрать ошибки до запуска кампании
- Задать фильтры товаров: цена, наличие, категории
- Запустить на ограниченном бюджете и две недели ничего не менять
- После набора данных — разделить кампании по цене и перейти на стратегию по конверсиям
Два последних пункта в этом порядке именно так, а не наоборот. Автостратегии требуют статистики, и переключать их в первую неделю — значит мешать обучению. Подробнее о том, что делать и чего не делать в первый месяц, есть отдельный разбор.
Мы собираем фиды из каталога на 1С-Битрикс, WordPress и своих решениях, настраиваем рекламу для интернет-магазина вместе с электронной коммерцией в Метрике и ведём кампании дальше. Если каталог к этому ещё не готов — начинаем с данных: без цен, картинок и наличия товарная кампания не взлетит ни при каком бюджете. Общие вопросы по запуску — на странице Яндекс.Директа.