Передача данных об электронной коммерции

О контейнере данных и их передаче в Метрику

В 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>, ...]
        }
    }
});
Поле Тип Описание
ecommerce *

Object

Обязательное поле-контейнер.

currencyCode

String

Трехбуквенный код валюты по ISO 4217.

Если передается другая валюта, будут отправлены нулевые значения вместо валюты и суммы.

<actionType> *

Название поля (подставляемое вместо <actionType>) представляет собой идентификатор действия, произведенного с набором товаров.

Возможные значения:

  • impression — просмотр списка товаров;
  • click — клик по товару в списке;
  • detail — просмотр товара;
  • add — добавление товара в корзину;
  • remove — удаление товара из корзины;
  • purchase — покупка;
  • promoView — просмотр внутренней рекламы;
  • promoClick — клик по внутренней рекламе.

Если в Метрику передана информация об удалении товара, в отчете может появиться отрицательное количество товаров (при вычислениях количество удаленных из корзины товаров вычитается из общего числа добавленных товаров). Если при этом передана стоимость товара, в отчете она так же отобразится отрицательной.

actionField **

Object

Объект вида <actionField>. Дополнительные данные, описывающие произведенное действие.

Обрабатывается, только если действие — покупка (<actionType> — purchase).

products *

Array

Список описаний товаров, с которыми было произведено указанное действие. Описания продуктов представляют собой объекты вида <productFieldObject>.

promotions *

Array

Список описаний рекламной кампании, с которой было произведено указанное действие. Описание рекламных кампаний представляет собой объекты вида <promoFieldObject>.

* Обязательный параметр.

** Обязательный параметр для передачи информации о покупке.

Данные о товаре

Объект, описывающий отдельный товар.

Структура объекта, описывающего товар, обозначается как <productFieldObject>.

Поля объекта
Поле Тип Описание
id *

String

Идентификатор товара. Например, SKU.

Необходимо обязательно указать или id или name

name *

String

Название товара. Например, "Футболка"

Необходимо обязательно указать или name или id

brand

String

Бренд, торговая марка, ассоциированная с товаром. Например, "Яндекс / Яndex"

category

String

Категория, к которой относится товар.

Поддерживается иерархия категорий до 5 уровней вложенности. Разделителем уровней является символ /. Например, "Одежда/Мужская одежда/Футболки"

coupon

String

Промокод ассоциированный с товаром. Например, "PARTNER_SITE_15"

discount

Number

Размер скидки на товар (указывается как число).

list

String

Список, к которому относится товар.

Чтобы оценивать эффективность списка на разных этапах взаимодействия пользователя с товаром, рекомендуем указывать список товара во всех событиях, которые были после просмотра списка.

position

Integer

Позиция товара в списке. Например, 2

price

Number

Цена единицы товара

quantity

Integer

Количество единиц товара

variant

String

Разновидность товара. Например, "Красный цвет"

Данные о действии

Объект, содержащий данные о действии, произведенном с товаром или набором товаров.

Обрабатывается только если действие — покупка (<actionType>purchase).

Структура объекта, описывающего действие, обозначается как <actionField>.

При передаче данных о действии Метрика создает цель. Она позволяет получать данные о доходе с рекламной кампании Директа. В Директе, в списке доступных целей, такая цель отображается как «eCommerce: Покупка (счетчик № <ID счетчика>)». При этом вы можете отслеживать достижение цели самостоятельно, передавая поле goal_id.

Поля объекта
Поле Тип Описание
id *

String

Идентификатор покупки.

Обязательно для заполнения.

Пример: TRX#54321

coupon

String

Промокод, ассоциированный со всей покупкой целиком

goal_id

Integer

Номер цели. Указывается в том случае, если данное действие и было целью.

Цель должна задаваться условием типа JavaScript-событие.

Номер цели доступен в веб-интерфейсе Яндекс Метрики, в разделе Настройка (вкладка Цели).

revenue

Number

Полученный доход.

Если не указан, вычисляется автоматически как сумма цен всех товаров, ассоциированных с покупкой

Данные о промокампаниях

Объект, описывающий промокампании.

Контейнер такой же, но вместо <productFieldObject> записывается <promoFieldObject>.

Поля объекта
Поле Тип Описание
id *

String

Идентификатор промокампании.

Обязательно для заполнения

name

String

Название промокампании.

creative

String

Название рекламного баннера.

creative_slot

String

Слот рекламного баннера.

position

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"
                }
            ]
        }
    }
});

Обратите внимание: служба поддержки не обзванивает пользователей. Не следуйте указаниям людей, которые вам звонят и представляются службой поддержки Яндекс Метрики.