Передача данных об электронной коммерции
Совет
Для работы с JavaScript API необходимы навыки работы с HTML и JavaScript. Если вы не обладаете такими навыками, обратитесь к разработчику или вебмастеру вашего сайта.
О контейнере данных и их передаче в Метрику
В Ecommerce любой товар представляет собой объект, с которым производятся определенные действия. Например, просмотр полного описания товара или добавление в корзину. Эти данные передаются в виде JavaScript-объектов, содержащих идентификатор действия и список описаний товаров, с которыми это действие произведено. В контексте JavaScript API будем называть такие объекты Ecommerce-объектами.
Чтобы передать данные в виде Ecommerce-объектов Яндекс Метрике, необходимо добавить их в JavaScript-массив window.dataLayer
в глобальном пространстве имен (window) методом push. Такой массив будем называть контейнером данных.
Внимание
Не передавайте данные в момент перехода посетителя на другую страницу сайта. Например, при использовании события onclick
на кнопке «Оформить заказ». В этом случае следующая страница может загрузиться раньше, чем код счетчика передаст данные в Метрику. В результате информация о событии будет потеряна.
Контейнер данных должен находиться в глобальном пространстве имен, а его имя соответствовать имени, заданному при настройке счетчика или при инициализации счетчика. Если контейнер данных имеет название dataLayer
или счетчик Метрики был инициирован со значением параметра ecommerce равным true
, то предполагается, что контейнером данных является массив window.dataLayer
.
<script type="text/javascript">
// Инициализация кода счетчика
ym(XXXXXX, 'init', {
...
// Если настройка ecommerce включена при инициализации, то контейнером данных всегда будет window.dataLayer
// Если настройка включена через интерфейс, то название можно изменить в настройках счетчика
ecommerce: true
...
});
// Контейнер данных (JavaScript-массив) в глобальном пространстве имен (window)
window.dataLayer = window.dataLayer || [];
</script>
...
<script type="text/javascript">
// Используем метод push для добавления Ecommerce-объекта
window.dataLayer.push(
// Ecommerce-объект
{
"ecommerce": {
...
"currencyCode": "RUB",
"<actionType>": {
"actionField": <actionField>,
"products" : [<productFieldObject>, <productFieldObject>, ...]
}
...
}
}
);
</script>
Имя контейнера данных и структура вкладываемых в него Ecommerce-объектов соответствует аналогичным сущностям в Google Analytics Enhanced Ecommerce. Это означает, что если вы уже настроили отправку данных в Google Analytics Enhanced Ecommerce, в том числе через Global Site Tag, и включили Ecommerce в Яндекс Метрике, последняя начнет собирать данные. Также Метрика поддерживает Электронную торговлю (GA4) и собирает данные без дополнительных настроек.
Внимание
Контейнер данных не должен содержать больше 8192 символов.
Если вы передаете в контейнере больше данных, рекомендуем разбить заказ на части с подномерами (например, order1-1
, order1-2
, order1-3
). Так в Метрике будут отображены и заказы, и подзаказы.
Чтобы оценить фактическое количество заказов, задайте JS-цель и отправляйте ее в Метрику с одним из подзаказов. При передаче нескольких контейнеров одного заказа, поделенного на подзаказы, будет достигнута одна цель, с помощью которой можно посчитать общее количество заказов.
Ecommerce-объект имеет следующий вид:
window.dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"<actionType>" : {
"actionField" : <actionField>,
"products" : [<productFieldObject>, <productFieldObject>, ...]
}
}
});
Поле |
Тип |
Описание |
|
Object |
Обязательное поле-контейнер. |
|
String |
Трехбуквенный код валюты по ISO 4217. Если передается другая валюта, будут отправлены нулевые значения вместо валюты и суммы. |
|
— |
Название поля (подставляемое вместо Возможные значения:
Если в Метрику передана информация об удалении товара, в отчете может появиться отрицательное количество товаров (при вычислениях количество удаленных из корзины товаров вычитается из общего числа добавленных товаров). Если при этом передана стоимость товара, в отчете она так же отобразится отрицательной. |
|
Object |
Объект вида Обрабатывается, только если действие — покупка ( |
|
Array |
Список описаний товаров, с которыми было произведено указанное действие. Описания продуктов представляют собой объекты вида Не используется для действий |
|
Array |
Список описаний рекламной кампании, с которой было произведено указанное действие. Описание рекламных кампаний представляет собой объекты вида |
* Обязательный параметр.
** Обязательный параметр для передачи информации о покупке.
Данные о товаре
Объект, описывающий отдельный товар.
Структура объекта, описывающего товар, обозначается как productFieldObject.
Поле |
Тип |
Описание |
|
String |
Идентификатор товара. Например, SKU. Необходимо обязательно указать или id, или name |
|
String |
Название товара. Например, "Футболка" Необходимо обязательно указать или name, или id |
|
String |
Бренд, торговая марка, ассоциированная с товаром. Например, "Яндекс / Яndex" |
|
String |
Категория, к которой относится товар. Поддерживается иерархия категорий до 5 уровней вложенности. Разделителем уровней является символ /. Например, "Одежда/Мужская одежда/Футболки" |
|
String |
Промокод ассоциированный с товаром. Например, "PARTNER_SITE_15" |
|
Number |
Размер скидки на товар (указывается как число). |
|
String |
Список, к которому относится товар. Чтобы оценивать эффективность списка на разных этапах взаимодействия пользователя с товаром, рекомендуем указывать список товара во всех событиях, которые были после просмотра списка. |
|
Integer |
Позиция товара в списке. Например, 2 |
|
Number |
Цена единицы товара |
|
Integer |
Количество единиц товара |
|
String |
Разновидность товара. Например, "Красный цвет" |
Данные о действии
Объект, содержащий данные о действии, произведенном с товаром или набором товаров.
Обрабатывается только если действие — покупка (<actionType>
— purchase
).
Структура объекта, описывающего действие, обозначается как actionField.
При передаче данных о действии Метрика создает цель. Она позволяет получать данные о доходе с рекламной кампании Директа. В Директе, в списке доступных целей, такая цель отображается как «eCommerce: Покупка (счетчик № <ID счетчика>)». При этом вы можете отслеживать достижение цели самостоятельно, передавая поле goal_id.
Поле |
Тип |
Описание |
|
String |
Идентификатор покупки. Обязательно для заполнения. Пример: TRX#54321 |
|
String |
Промокод, ассоциированный со всей покупкой целиком |
|
Integer |
Номер цели. Указывается в том случае, если данное действие и было целью. Номер цели доступен в веб-интерфейсе Яндекс Метрики, в разделе Настройка (вкладка Цели). |
|
Number |
Полученный доход. Если не указан, вычисляется автоматически как сумма цен всех товаров, ассоциированных с покупкой |
Данные о промокампаниях
Объект, описывающий промокампании.
Контейнер такой же, но вместо productFieldObject записывается promoFieldObject.
Поле |
Тип |
Описание |
|
String |
Идентификатор промокампании. Обязательно для заполнения |
|
String |
Название промокампании. |
|
String |
Название рекламного баннера. |
|
String |
Слот рекламного баннера. |
|
String |
Позиция рекламного баннера. |
Примеры
Для передачи информации нужно на сайте создать скрипт, который будет отвечать за определенное событие (например, формирование заказа) в описанном выше формате. Ниже представлены примеры скриптов для поддерживаемых Метрикой действий.
В примерах предполагается, что счетчик инициализирован с подключением электронной коммерции, а передача данных производится через контейнер window.dataLayer.
Просмотр списка товаров
Данные должны отправляться в момент открытия списка товаров.
dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"impressions": [
{
"id": "P15432",
"name" : "Футболка",
"price": 477.60,
"brand": "Яндекс / Яndex",
"category": "Одежда/Мужская одежда/Футболки",
"variant" : "Красный цвет",
"list": "Search",
"position": 1
},
{
"id": "P15435",
"name" : "Футболка",
"price": 500.60,
"brand": "Яндекс / Яndex",
"category": "Одежда/Мужская одежда/Футболки",
"variant" : "Синий цвет",
"list": "Search",
"position": 2
}
]
}
});
Клик по товару из списка
Данные должны передаваться в момент, когда пользователь совершил клик по ссылке товара.
dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"click": {
"products": [
{
"id": "39084",
"name": "Термостакан Яндекс",
"price": 1089.69,
"brand": "Яндекс / Яndex",
"category": "Товары для дома/Посуда/Термосы и термокружки",
"variant": "Красный цвет",
"list": "Search",
"position": 1
}
]
}
}
});
Просмотр товара
Данные должны отправляться в момент открытия страницы с карточкой товара.
dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"detail": {
"products": [
{
"id": "P15432",
"name" : "Футболка",
"price": 477.60,
"brand": "Яндекс / Яndex",
"category": "Одежда/Мужская одежда/Футболки",
"variant" : "Красный цвет",
"list": "Результаты поиска",
"position": 1
}
]
}
}
});
Добавление товара в корзину
Данные должны отправляться в момент добавления заказа в корзину. Например, при нажатии кнопки «Добавить в корзину».
dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"add": {
"products": [
{
"id": "43521",
"name": "Сумка Яндекс",
"price": 654.32,
"brand": "Яндекс / Яndex",
"category": "Аксессуары/Сумки",
"quantity": 1,
"list": "Выдача категории",
"position": 2
}
]
}
}
});
Удаление товара из корзины
Данные должны отправляться в момент удаления заказа из корзины.
dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"remove": {
"products": [
{
"id": "15243",
"name": "Набор протирашек для экрана телефона - Яндекс",
"category": "Аксессуары для мобильного телефона",
"quantity": 1,
"list": "Аксессуары",
"position": 3
}
]
}
}
});
Покупка
Данные должны отправляться в момент подтверждения заказа.
dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"purchase": {
"actionField": {
"id" : "TRX987"
},
"products": [
{
"id": "25341",
"name": "Толстовка Яндекс мужская",
"price": 1345.26,
"brand": "Яндекс / Яndex",
"category": "Одежда/Мужская одежда/Толстовки и свитшоты",
"variant": "Оранжевый цвет",
"quantity": 1,
"list": "Одежда",
"position": 1
},
{
"id": "25314",
"name": "Толстовка Яндекс женская",
"price": 1543.62,
"brand": "Яндекс / Яndex",
"category": "Одежда/Женская одежда/Толстовки и свитшоты",
"variant": "Белый цвет",
"quantity": 3,
"list": "Толстовки",
"position": 2
}
]
}
}
});
Просмотр внутренней рекламы
Данные должны отправляться, когда пользователь просмотрел рекламные материалы.
dataLayer.push({
"ecommerce": {
"promoView": {
"promotions": [
{
"id": "BF001",
"name": "Черная пятница",
"creative": "Баннер_1",
"position": "Слот1"
},
{
"id": "SUMMER002",
"name": "Летние распродажи",
"creative": "Баннер_3",
"position": "Слот2"
}
]
}
}
});
Клики внутренней рекламы
Данные должны отправляться, когда пользователь кликнул или совершил другое целевое действие с рекламным материалом.
dataLayer.push({
"ecommerce": {
"promoClick": {
"promotions": [
{
"id": "BF001",
"name": "Черная пятница",
"creative": "Баннер_1",
"position": "Слот1"
}
]
}
}
});
Узнайте больше
Полезные ссылки |
Онлайн-обучение |
Обязательный параметр.
Обязательный параметр для передачи информации о покупке.
Необходимо обязательно указать или id, или name.
Обязательно для заполнения.