传输 E-commerce 数据

重要

使用 JavaScript API 需要了解 HTML 和 JavaScript。 如果您不了解这些语言,请联系您的网站开发人员或站长。

关于数据容器及其向 Yandex Metrica 的传输

在 E-commerce 中,每个商品都是一个可以执行某些活动的对象,例如查看完整的商品描述或将其添加到购物篮。 此数据作为 JavaScript 对象进行传输,其中包含操作 ID 以及针对其执行此活动的商品的描述列表。 在 JavaScript API 的上下文中,我们称这些对象为 E-commerce 对象

要将数据作为 E-commerce 对象传输到 Yandex Metrica,请使用 push 方法将它们添加到全局命名空间 (window) 中特殊的 JavaScript 数组window.dataLayer。 我们称这个数组为_数据容器_。

注意

当用户转到网站上的另一个页面时,不要传输数据。 例如,在“Checkout”按钮上使用 onclick 事件就属于这种情况。 在这种情况下,下一页可能会在计数器将数据发送到 Yandex Metrica 之前加载。 结果导致有关该事件的信息丢失。

数据容器必须位于全局命名空间中,并且其名称必须与计数器配置或初始化期间指定的名称匹配。 如果数据容器被命名为dataLayer,或者 Yandex Metrica 计数器在初始化时将 ecommerce 参数设置为 true,则假定数据容器是 window.dataLayer 数组。

<script type="text/javascript">
    // 计数器代码初始化
    ym(XXXXXX, 'init', {
        ...
        // 如果在初始化期间启用了“ecommerce”参数,数据容器将始终为 window.dataLayer
        // 如果您已通过界面启用了该参数,则可以在计数器设置中更改名称 
        ecommerce: true
        ...
    });
    // 全局命名空间 (window) 中的数据容器 (JavaScript 数组)
    window.dataLayer = window.dataLayer || [];
</script>
...
<script type="text/javascript">
    // 使用“推送”方法添加 E-commerce 对象
    window.dataLayer.push(
        // E-commerce 对象
        {
            "ecommerce": {
                ...
                "currencyCode": "RUB",
                "<actionType>": {
                    "actionField": <actionField>,
                    "products" : [<productFieldObject>, <productFieldObject>, ...]
                }
                ...
            }
        }
    );
</script>

数据容器的名称及其包含的 E-commerce 对象的结构与 Google Analytics Enhanced Ecommerce 中的相应实体相匹配。 这意味着,如果您已经设置了向 Google Analytics Enhanced Ecommerce 发送数据(包括通过 Global Site Tag),并在 Yandex Metrica 中启用了 Ecommerce 功能,那么后者将开始收集数据。 Yandex Metrica 还支持 GA4 Ecommerce,无需任何额外设置即可收集数据。

注意

数据容器最多可包含 8,192 个字符。
如果要在容器中发送更多数据,我们建议将订单拆分为带有子编号的部分(例如 order1-1order1-2order1-3)。 这样,订单和子订单都将在 Yandex Metrica 中显示。

要评估实际订单数量,请设置一个 JS 目标,并将其与其中一个子订单一起发送到 Yandex Metrica。 在发送一个拆分为子订单的订单的多个容器时,将达成一个目标,您可以用它来计算订单总数。

ecommerce 对象具有以下格式:

window.dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "<actionType>": {
            "actionField": <actionField>,
            "products": [<productFieldObject>, <productFieldObject>, ...]
        }
    }
});

字段

类型

描述

ecommerce*

Object

必填容器字段。

currencyCode

字符串

三个字母的 ISO 4217 货币代码

如果传递不同的货币,则将发送空值,而不是货币和金额。

<actionType>*

字段名(代替<actionType>)是对一组产品执行的操作标识符。

可能的值:

  • impression:查看产品列表。
  • click:点击产品列表中的某个商品。
  • detail: 查看商品。
  • add:将商品添加到购物车。
  • remove:从购物车中移除商品。
  • purchase: 购买。
  • promoView: 查看内部广告。
  • promoClick: 点击内部广告。

如果有关移除商品的信息已传输到 Yandex Metrica,则报表可能会显示商品数量为负(总数是通过从添加的商品总数中减去删除的商品数来计算的)。 如果传输了商品的价格,则报表中的价格也可能为负值。

actionField**

Object

一个 actionField 对象。 描述所执行活动的附加数据。

仅当操作为购买时才处理 (<actionType>purchase)。

商品*

数组

针对其执行指定活动的商品的描述列表。 产品描述是 productFieldObject 对象。

不适用于 promoClickpromoViewimpressions 操作。

promotions*

数组

针对其执行指定活动的广告系列的描述列表。 广告系列描述是 promoFieldObject 对象。

*必填参数。

**发送购买信息所需的必要参数。

商品数据

描述特定商品的对象。

描述产品的对象结构表示为 productFieldObject

字段

类型

描述

id*

字符串

商品 ID。 例如,SKU。

必须指定 id 或 name

name*

字符串

商品名称。 例如:“T恤”

您必须指定 name 或 id

brand

字符串

与商品相关的品牌或商标。 例如:“Yandex”

category

字符串

该商品所属的类别。

类别层次结构最多支持 4 级。 使用 / 符号分隔级别。 例如:“Clothing / Men's clothing / T-shirts”

coupon

字符串

与商品关联的促销代码。 例如:“PARTNER_SITE_15”

discount

数字

折扣金额(数值)。

list

字符串

列出商品所属的列表。

为了评估列表在用户与产品交互的不同阶段的有效性,我们建议在列表被查看后发生的所有事件中指定商品列表。

position

整数

商品在列表中的位置。 例如,2

price

数字

商品价格。

quantity

整数

物品数量。

variant

字符串

商品的变体。 例如,“红”

活动数据

包含有关对某个商品或一组商品执行的活动的数据的对象。

仅当操作为购买时才处理 (<actionType>purchase)。

描述操作的对象结构表示为 actionField

在传输有关活动的数据时,Yandex Metrica 会创建一个目标。 这使您可以获取有关 Yandex Direct 广告系列收入的信息。 在 Yandex Direct 的可用目标列表中,该目标显示为“eCommerce: Purchase (计数器编号)”。 您可以通过传输goal_id 字段来跟踪目标完成情况。

字段

类型

描述

id*

字符串

购买的商品的 ID。

必填信息。

例如:TRX#54321

coupon

字符串

与整个购买相关的促销代码

goal_id

整数

目标号码。 指定是否此活动为目标。
目标必须设定为 JavaScript 事件类型。

您可以在 Yandex Metrica 界面中查看目标编号:转到Settings 部分并打开Goals 选项卡。

revenue

数字

获得的收入。

如果省略,则会自动计算为与购买相关的所有商品的价格总和

促销活动数据

描述促销活动的对象。

该对象使用类似的容器,但使用 promoFieldObject 代替 productFieldObject

字段

类型

描述

id*

字符串

促销活动的 ID。

必填信息

name

字符串

促销广告系列名称

creative

字符串

广告横幅名称

creative_slot

字符串

广告横幅位

position

字符串

广告横幅位置

例如

要传输信息,您需要在网站上创建一个脚本,该脚本将按照上述格式负责特定事件(例如下订单)。 以下是 Yandex Metrica 支持的活动脚本示例。

所有示例都假定计数器已在启用电子商务的情况下初始化,并且数据通过 window.dataLayer 容器传输

查看商品列表

数据必须在商品列表打开时发送。

dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "impressions": [
            {
                "id": "P15432",
                "name" : "T-shirt",
                "price": 477.60,
                "brand": "Yandex",
                "category": "Clothing / Men's clothing / T-shirts",
                "variant" : "Red",
                "list": "Search",
                "position": 1
            },
            {
                "id": "P15435",
                "name" : "T-shirt",
                "price": 500.60,
                "brand": "Yandex",
                "category": "Clothing / Men's clothing / T-shirts",
                "variant" : "Blue",
                "list": "Search",
                "position": 2
            }
        ]
    }
});

点击商品列表项

数据必须在用户点击商品链接时发送。

dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "click": {
            "products": [
                {
                    "id": "39084",
                    "name": "Yandex Tumbler",
                    "price": 1089.69,
                    "brand": "Yandex",
                    "category": "Housewares / Tableware / Insulated bottles and thermal mugs",
                    "variant": "Red",
                    "list": "Search",
                    "position": 1
                }
            ]
        }
    }
});

查看商品

数据必须在带有商品卡的页面打开时发送。

dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "detail": {
            "products": [
                {
                    "id": "P15432",
                    "name": "T-shirt",
                    "price": 477.60,
                    "brand": "Yandex",
                    "category": "Clothing / Men's clothing / T-shirts",
                    "variant": "Red",
                    "list": "Search results",
                    "position": 1
                }
            ]
        }
    }
});

将商品加入购物篮

数据必须在订单加入购物篮时发送。 例如,在单击“Add to basket”时。

dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "add": {
            "products": [
                {
                    "id": "43521",
                    "name": "Yandex bag",
                    "price": 654.32,
                    "brand": "Yandex",
                    "category": "Accessories / Bags",
                    "quantity": 1,
                    "list": "Category search results",
                    "position": 2
                }
            ]
        }
    }
});

从购物篮移除商品

数据必须在商品从购物篮移除时发送。

dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "remove": {
            "products": [
                {
                    "id": "15243",
                    "name": "Yandex screen wipes for smartphones",
                    "category": "Smartphone accessories",
                    "quantity": 1,
                    "list": "Accessories",
                    "position": 3
                }
            ]
        }
    }
});

购买

数据必须在订单确认后立即发送。

dataLayer.push({
    "ecommerce": {
        "currencyCode": "RUB",
        "purchase": {
            "actionField": {
                "id": "TRX987"
            },
            "products": [
                {
                    "id": "25341",
                    "name": "Yandex men's sweatshirt",
                    "price": 1345.26,
                    "brand": "Yandex",
                    "category": "Clothing / Men's clothing / Hoodies and sweatshirts",
                    "variant": "Orange",
                    "quantity": 1,
                    "list": "Clothing",
                    "position": 1
                },
                {
                    "id": "25314",
                    "name": "Yandex women's sweatshirt",
                    "price": 1543.62,
                    "brand": "Yandex",
                    "category": "Clothing / Women's clothing / Hoodies and sweatshirts",
                    "variant": "White",
                    "quantity": 3,
                    "list": "Sweatshirts",
                    "position": 2
                }
            ]
        }
    }
});

查看内部广告

数据必须在用户查看广告时发送。

dataLayer.push({
    "ecommerce": {
        "promoView": {
            "promotions": [
                {
                    "id": "BF001",
                    "name": "Black Friday",
                    "creative": "Banner_1",
                    "position": "Slot1"
                },
                {
                    "id": "SUMMER002",
                    "name": "Summer sales",
                    "creative": "Banner_3",
                    "position": "Slot2"
                }
            ]
        }
    }
});

点击内部广告

必须在用户点击广告或完成与广告相关的另一个目标活动时发送数据。

dataLayer.push({
    "ecommerce": {
        "promoClick": {
            "promotions": [
                {
                    "id": "BF001",
                    "name": "Black Friday",
                    "creative": "Banner_1",
                    "position": "Slot1"
                }
            ]
        }
    }
});

了解详情

与我们聊天

联系我们


必填参数。

传输购买信息的必填参数。

您必须指定 name 或 id

必填信息。