传输 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-1、order1-2、order1-3)。 这样,订单和子订单都将在 Yandex Metrica 中显示。
要评估实际订单数量,请设置一个 JS 目标,并将其与其中一个子订单一起发送到 Yandex Metrica。 在发送一个拆分为子订单的订单的多个容器时,将达成一个目标,您可以用它来计算订单总数。
ecommerce 对象具有以下格式:
window.dataLayer.push({
"ecommerce": {
"currencyCode": "RUB",
"<actionType>": {
"actionField": <actionField>,
"products": [<productFieldObject>, <productFieldObject>, ...]
}
}
});
|
字段 |
类型 |
描述 |
|
|
Object |
必填容器字段。 |
|
|
字符串 |
三个字母的 ISO 4217 货币代码。 如果传递不同的货币,则将发送空值,而不是货币和金额。 |
|
|
— |
字段名(代替 可能的值:
如果有关移除商品的信息已传输到 Yandex Metrica,则报表可能会显示商品数量为负(总数是通过从添加的商品总数中减去删除的商品数来计算的)。 如果传输了商品的价格,则报表中的价格也可能为负值。 |
|
|
Object |
一个 actionField 对象。 描述所执行活动的附加数据。 仅当操作为购买时才处理 ( |
|
|
数组 |
针对其执行指定活动的商品的描述列表。 产品描述是 productFieldObject 对象。 不适用于 |
|
|
数组 |
针对其执行指定活动的广告系列的描述列表。 广告系列描述是 promoFieldObject 对象。 |
*必填参数。
**发送购买信息所需的必要参数。
商品数据
描述特定商品的对象。
描述产品的对象结构表示为 productFieldObject。
|
字段 |
类型 |
描述 |
|
|
字符串 |
商品 ID。 例如,SKU。 必须指定 id 或 name |
|
|
字符串 |
商品名称。 例如:“T恤” 您必须指定 name 或 id |
|
|
字符串 |
与商品相关的品牌或商标。 例如:“Yandex” |
|
|
字符串 |
该商品所属的类别。 类别层次结构最多支持 4 级。 使用 / 符号分隔级别。 例如:“Clothing / Men's clothing / T-shirts” |
|
|
字符串 |
与商品关联的促销代码。 例如:“PARTNER_SITE_15” |
|
|
数字 |
折扣金额(数值)。 |
|
|
字符串 |
列出商品所属的列表。 为了评估列表在用户与产品交互的不同阶段的有效性,我们建议在列表被查看后发生的所有事件中指定商品列表。 |
|
|
整数 |
商品在列表中的位置。 例如,2 |
|
|
数字 |
商品价格。 |
|
|
整数 |
物品数量。 |
|
|
字符串 |
商品的变体。 例如,“红” |
活动数据
包含有关对某个商品或一组商品执行的活动的数据的对象。
仅当操作为购买时才处理 (<actionType> — purchase)。
描述操作的对象结构表示为 actionField。
在传输有关活动的数据时,Yandex Metrica 会创建一个目标。 这使您可以获取有关 Yandex Direct 广告系列收入的信息。 在 Yandex Direct 的可用目标列表中,该目标显示为“eCommerce: Purchase (计数器编号
|
字段 |
类型 |
描述 |
|
|
字符串 |
购买的商品的 ID。 必填信息。 例如:TRX#54321 |
|
|
字符串 |
与整个购买相关的促销代码 |
|
|
整数 |
目标号码。 指定是否此活动为目标。 您可以在 Yandex Metrica 界面中查看目标编号:转到Settings 部分并打开Goals 选项卡。 |
|
|
数字 |
获得的收入。 如果省略,则会自动计算为与购买相关的所有商品的价格总和 |
促销活动数据
描述促销活动的对象。
该对象使用类似的容器,但使用 promoFieldObject 代替 productFieldObject。
|
字段 |
类型 |
描述 |
|
|
字符串 |
促销活动的 ID。 必填信息 |
|
|
字符串 |
促销广告系列名称 |
|
|
字符串 |
广告横幅名称 |
|
|
字符串 |
广告横幅位 |
|
|
字符串 |
广告横幅位置 |
例如
要传输信息,您需要在网站上创建一个脚本,该脚本将按照上述格式负责特定事件(例如下订单)。 以下是 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
必填信息。
