这篇文章介绍在 GTM布署GA4电子商务,这里会以view_item_list 作为一个示例。
电子商务的基本处理逻辑就是,页面端将电商数据通过dataLayer发送出去,然后在GTM里配置接收数据即可,其中dataLayer需要开发去做。
dataLayer页面发送数据
页面发送数据是需要开发将电商数据按特定结构组装成,然后调用dataLayer发送出去。
一次发送一个产品
一次只发送一个产品的示例代码如下:
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: “view_item_list”,
ecommerce: {
items: [
{
item_id: "SKU_12345",
item_name: "Stan and Friends Tee",
affiliation: "Google Merchandise Store",
coupon: "SUMMER_FUN",
currency: "USD",
discount: 2.22,
index: 0,
item_brand: "Google",
item_category: "Apparel",
item_category2: "Adult",
item_category3: "Shirts",
item_category4: "Crew",
item_category5: "Short sleeve",
item_list_id: "related_products",
item_list_name: "Related Products",
item_variant: "green",
location_id: "L_12345",
price: 9.99,
quantity: 1
}
]
}
});
一次发送多个产品
你可以一次发送多个产品,例如打开一个页面的时候,展示2个产品,那么可以一起发送,示例代码如下:
// Measure product views / impressions
dataLayer.push({ ecommerce: null }); // Clear the previous ecommerce object.
dataLayer.push({
event: "view_item_list",
ecommerce: {
items: [
{
item_name: "Triblend Android T-Shirt", // Name or ID is required.
item_id: "12345",
price: 15.25,
item_brand: "Google",
item_category: "Apparel",
item_category2: "Mens",
item_category3: "Shirts",
item_category4: "Tshirts",
item_variant: "Gray",
item_list_name: "Search Results",
item_list_id: "SR123",
index: 1,
quantity: 1
},
{
item_name: "Donut Friday Scented T-Shirt",
item_id: "67890",
price: 33.75,
item_brand: "Google",
item_category: "Apparel",
item_category2: "Mens",
item_category3: "Shirts",
item_category4: "Tshirts",
item_variant: "Black",
item_list_name: "Search Results",
item_list_id: "SR123",
index: 2,
quantity: 1
}]
}
});
我建议是一次发送多个产品,这样能减少请求。
items参数解析
items里有很多的参数,详细如下:
| 名称 | 类型 | 是否必须提供 | 示例值 | 说明 |
|---|---|---|---|---|
item_ |
string |
是* | SKU_12345 | 商品的 ID。 *必须提供 item_id 或 item_name 中的一个。 |
item_ |
string |
是* | Stan 和 Friends Tee | 商品的名称。 *必须提供 item_id 或 item_name 中的一个。 |
affiliation |
string |
否 | Google 商店 | 用于指定供应公司或实体店位置的商品关联商户。 事件级和商品级 affiliation 参数彼此独立。 |
coupon |
string |
否 | SUMMER_FUN | 与商品相关的优惠券名称/代码。 事件级和商品级 coupon 参数彼此独立。 |
currency |
string |
否 | USD | 币种(采用由 3 个字母表示的 ISO 4217 格式)。 如果设置此参数,系统会忽略事件级 currency。不支持为每个事件设置多种币种。应为每件商品设置同一币种。 |
creative_ |
string |
否 | summer_banner2 | 促销广告素材的名称。 如果设置此参数,系统会忽略事件级 creative_。如果未设置此参数,系统会使用事件级 creative_(如果存在)。 |
creative_ |
string |
否 | featured_app_1 | 与商品相关的促销广告素材投放到的广告位的名称。 如果设置此参数,系统会忽略事件级 creative_。如果未设置此参数,系统会使用事件级 creative_(如果存在)。 |
discount |
number |
否 | 2.22 | 与商品相关的折扣货币价值。 |
index |
number |
否 | 5 | 列表中商品的索引/商品在列表中的位置。 |
item_ |
string |
否 | 商品所属品牌。 | |
item_ |
string |
否 | 服饰 | 商品所属类别。如果将其用作类别层次结构或类目的一部分,则为第一个类别。 |
item_ |
string |
否 | 成人 | 商品的第二类层次结构或其他类目。 |
item_ |
string |
否 | 衬衫 | 商品的第三类层次结构或其他类目。 |
item_ |
string |
否 | 圆领 | 商品的第四类层次结构或其他类目。 |
item_ |
string |
否 | 短袖 | 商品的第五类层次结构或其他类目。 |
item_ |
string |
否 | related_products | 商品向用户展示时所在列表的 ID。 如果设置此参数,系统会忽略事件级 item_。如果未设置此参数,系统会使用事件级 item_(如果存在)。 |
item_ |
string |
否 | 相关商品 | 商品向用户展示时所在列表的名称。 如果设置此参数,系统会忽略事件级 item_。如果未设置此参数,系统会使用事件级 item_(如果存在)。 |
item_ |
string |
否 | 绿色 | 用于提供其他商品详情/选项的商品款式/规格、唯一代码或说明。 |
location_ |
string |
否 | L_12345 | 与商品相关的地理位置。建议使用与相关商品对应的 Google 地点 ID,也可使用自定义地理位置 ID。</span 如果设置此参数,系统会忽略事件级 location_。如果未设置此参数,系统会使用事件级 location_(如果存在)。 |
price |
number |
否 | 9.99 | 商品的货币价格(以指定的 currency 参数为单位)。 |
promotion_ |
string |
否 | P_12345 | 与商品相关的促销活动的 ID。 如果设置此参数,系统会忽略事件级 promotion_。如果未设置此参数,系统会使用事件级 promotion_(如果存在)。 |
promotion_ |
string |
否 | 夏季促销 | 与商品相关的促销活动的名称。 如果设置此参数,系统会忽略事件级 promotion_。如果未设置此参数,系统会使用事件级 promotion_(如果存在)。 |
quantity |
number |
否 | 1 | 商品数量。 |
这一步有几个注意点:
- dataLayer.push({ ecommerce: null })是用于清除对象,清除该对象有助于防止网页上的多个电子商务事件相互影响,如果你的电商数据发送很多很频繁,建议使用,如果是普通,可以不要这行代码。
- GA4里的items里是产品数组,所有的产品信息都在里面(UA里是products)
- item里面的item_id和item_name是必须字段,其他都是可选。
- 不同位置是通过item_list_id和item_list_name去区分,这个会影响后面的产品的归因
示例:view_item_list布署
接下来讲解GTM里面如何配置,首先看触发器:
触发器
将dataLayer里面的event设置为触发器,在GTM中点击「触发器」——「新建」——「选择一个触发器类型以开始设置…」——「自定义事件」,命名为view_item_list,然后做如下配置:
dataLayer里event的值是什么,这里的事件名称就填设么。
变量
将dataLayer里面的items用变量存储,在GTM中点击「变量」——「新建」——「选择一个变量类型以开始设置…」——「数据层变量」,命名为items,然后做如下配置:
和items同一层级的都可以通过这种方式将其存储到变量中。
代码
最后就是在GTM中配置代码,在GTM中点击「代码」——「新建」——「选择一个代码类型以开始设置…」——「Google Analytics(分析):GA4 事件」,命名为view_item_list,然后做如下配置:
其中参数名称是电子商务固定的,具体有哪些,可以看各电商步骤中dataLayer的结构。
整站布署电商示例配置
产品展示与点击
view_item_list :产品展示
注意:item_list_name 或 item_list_id 的值必须保持稳定。对于给定列表,这些值应始终相同,它是用于产品归因,它也可以位于item外面。
在Google Analytics 4电商里item_
view_item:查看产品
select_item:点击产品
促销产品展示
- view_promotion:展示促销产品
- select_promotion:点击促销产品
可以用于跟踪站内活动归因,可以知道加车,结算,订单来自哪个站内活动,但GA4报告上该功能在还没完全实现。
view_promotion:展示促销产品
select_promotion:点击促销产品
购物车
- add_to_cart:将产品添加到购物车
- remove_from_cart:将产品从购物车移除
购物车中currency和value是必须字段。
add_to_cart:将产品添加到购物车
remove_from_cart:将产品从购物车移除
结算流程
- begin_checkout:开始结算
- add_payment_info:添加支付信息
- add_shipping_info:添加地址信息
- purchase:购买成功
- refund:退款
currency和value是必须字段,就value的时候一定要设置currency,购买成功和退款中transaction_
begin_checkout:开始结算
add_payment_info:添加支付信息
add_shipping_info:添加地址信息
purchase:购买成功

refund:退款
退款分为全额退款和部分退款
全额退款
部分退款
注意点
- 同个页面有多个电商事件类型的时候,尽量同一次发送出去,也就是一个发送多个产品,如一个页面有5个产品展示,在一个dataLayer.push就发送出去
- 数据层数据代码中每一个都有dataLayer.push({ ecommerce: null }),这个的作用是清除对象,确保数据不会混乱。
- GA4目前还不支持类似UA的站内(产品)归因,会导致checkout和purchase划分为no set。
- 金额不同,如price发送的是35,但报告显示的是35.04,这是因为货币会先换算为美元,再换算为你设置的币种。
- DebugView里的价格显示错误:如果你用DebugView去调试电商跟踪,那么你可能会看到价格显示一样,实际是250,但显示250000000,这不是bug,这是为了提升数据存储效率与计算性能,GA4在内部会将部分浮点数(如价格、金额)转换为整数形式进行存储与处理,不影响GA4里的数据
- 事件有数据,但电商里没数据,一般是是数据结构不对导致,如revenue是0,通常是货币类型为空导致,view_item是0,通常是items里的数据结构不对导致
下载GTM电商配置文件
具体用法如下:
- 下载后将其加压,可以看到配置文件是JSON格式,导入方式请看:容器的导出和导入:将GTM配置复制到另一个容器
- 将变量Measurement ID替换为你实际的















