GA 未记录 "Sessions with Add to Basket"
GA not recording "Sessions with Add to Basket"
总结
我们有一个 Magento 2 商店,我们在设置 Google 分析以正确跟踪电子商务时遇到问题。
我们已按照 Magento docs 设置 GA 和 GTM,但它没有收集正确数量的 在转化中添加到购物车 的会话 >电子商务 > 购物行为。
从上图中您可以看到它没有正确跟踪会话。 27 个 结帐会话 但只有 1 个 添加到购物车的会话 ,这不加起来,用户必须先添加到购物车才能结帐.
此外,当我查看 Magento 上的订单数量时,我发现实际上有 29 个订单,其中 27 个来自不同的用户。所以它似乎也没有正确捕获订单数量。
Debugging/Setup
我们按照 Magento docs 设置 GA 和 GTM,如下所示。如果您单击下面的图片,您应该会看到质量更好的图片。
我们在 GA 中有 E-commerce 设置:
起初我发现在 GTM 预览模式下,使用 recommended Magento configuration 设置的 addToCart 标签没有触发。数据层事件似乎没有为 GTM 触发器触发。
所以我设置了一个新的触发器,它在点击时触发并将其添加到:
我现在可以看到代码在 GTM 预览模式下触发:
而且我可以在 GAs Real-time 事件报告.
中看到 添加到购物车 事件
但在“转化”>“电子商务”>“购物行为”的添加到购物车的会话中仍然没有显示正确的数据。
问题
- 我可能遗漏了什么?
- 我应该在 GTM 标签设置中将 Non-Interaction Hit 设置为 false 吗?
- 我是否应该将 GTM 中的标签 use data layer 设置为 false,因为
addToCart 自定义事件未触发?或者也许这仍然需要
为了某事。
- 关于如何调试为什么 addToCart 自定义事件不可用的任何提示
当 GTM 处于预览模式时在 Magento 上触发?
我注意到 session in Magento is 3.5 hours, while in GA the Session timeout 只有 30 分钟。也许是这样? 我们更改了 GA 会话超时以匹配 Magento 的,但事实并非如此:(
提前致谢,感谢您的帮助:)
根据@lossleader 对我的问题的评论,我能够识别并解决问题。我会在这里回答,以防其他人觉得它有帮助。
基本上正如@lossleader 在他的评论中所说,主要的是:
The custom event should also have contained the e-commerce data for the use dataLayer tag.
所以用简单的点击事件触发 addToCart 标签是不够的,因为它不包含电子商务数据,我需要修复 enhance ecommerce addToCart 事件在 Magento 上的触发方式。
我发现 Magento Commerce changed/fixed 他们如何在最近的升级中最终调用触发此事件的函数,即 commit MAGETWO-69210 & commit MAGETWO-87437
我们的 Magento 确实收到了这些更改,因为 list.phtml template and the catalog-add-to-cart.js file 在其主题中被覆盖了。
按照以下差异显示更新主题文件解决了我们案例中的问题:
diff --git a/app/code/Namespace/CategoryPages/view/frontend/templates/product/list.phtml b/app/code/Namespace/CategoryPages/view/frontend/templates/product/list.phtml
index 6771e863..2ab8905c 100644
--- a/app/design/frontend/Namespace/theme/Magento_Catalog/templates/product/list.phtml
+++ b/app/design/frontend/Namespace/theme/Magento_Catalog/templates/product/list.phtml
@@ -91,7 +91,7 @@ $_helper = $this->helper('Magento\Catalog\Helper\Output');
<div class="actions-primary"<?php echo strpos($pos, $viewMode . '-primary') ? $position : ''; ?>>
<?php if ($_product->isSaleable()): ?>
<?php $postParams = $block->getAddToCartPostParams($_product); ?>
- <form data-role="tocart-form" action="<?php /* @escapeNotVerified */ echo $postParams['action']; ?>" method="post">
+ <form data-role="tocart-form" data-product-sku="<?= $block->escapeHtml($_product->getSku()) ?>" action="<?= /* @NoEscape */ $postParams['action'] ?>" method="post">
<input type="hidden" name="product" value="<?php /* @escapeNotVerified */ echo $postParams['data']['product']; ?>">
<input type="hidden" name="<?php /* @escapeNotVerified */ echo Action::PARAM_NAME_URL_ENCODED; ?>" value="<?php /* @escapeNotVerified */ echo $postParams['data'][Action::PARAM_NAME_URL_ENCODED]; ?>">
<?php echo $block->getBlockHtml('formkey')?>
diff --git a/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js b/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js
index fae6f0fa..34978ec4 100644
--- a/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js
+++ b/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js
@@ -6,8 +6,10 @@
define([
'jquery',
'mage/translate',
+ 'underscore',
+ 'Magento_Catalog/js/product/view/product-ids-resolver',
'jquery/ui'
-], function ($, $t) {
+], function ($, $t, _, idsResolver) {
'use strict';
$.widget('mage.catalogAddToCart', {
@@ -75,7 +77,9 @@ define([
* @param {String} form
*/
ajaxSubmit: function (form) {
- var self = this;
+ var self = this,
+ productIds = idsResolver(form),
+ formData = new FormData(form[0]);
$(self.options.minicartSelector).trigger('contentLoading');
self.disableAddToCartButton(form);
@@ -97,6 +101,13 @@ define([
success: function (res) {
var eventData, parameters;
+ $(document).trigger('ajax:addToCart', {
+ 'sku': form.data().productSku,
+ 'productIds': productIds,
+ 'form': form,
+ 'response': res
+ });
+
if (self.isLoaderEnabled()) {
$('body').trigger(self.options.processStop);
}
推送的自定义事件还应该包含 "use dataLayer" 标记中引用的电子商务数据,因此您确实需要修复 magento 配置或检测用户操作而不是模拟它. IE。在这些 inputs/forms 周围寻找对商店 html 的定制,并尝试将它们恢复为库存。
您似乎是通过查看 magento 的 addToCart
事件的更新找到了 ,该事件已被安装的主题覆盖。
总结
我们有一个 Magento 2 商店,我们在设置 Google 分析以正确跟踪电子商务时遇到问题。
我们已按照 Magento docs 设置 GA 和 GTM,但它没有收集正确数量的 在转化中添加到购物车 的会话 >电子商务 > 购物行为。
从上图中您可以看到它没有正确跟踪会话。 27 个 结帐会话 但只有 1 个 添加到购物车的会话 ,这不加起来,用户必须先添加到购物车才能结帐.
此外,当我查看 Magento 上的订单数量时,我发现实际上有 29 个订单,其中 27 个来自不同的用户。所以它似乎也没有正确捕获订单数量。
Debugging/Setup
我们按照 Magento docs 设置 GA 和 GTM,如下所示。如果您单击下面的图片,您应该会看到质量更好的图片。
我们在 GA 中有 E-commerce 设置:
起初我发现在 GTM 预览模式下,使用 recommended Magento configuration 设置的 addToCart 标签没有触发。数据层事件似乎没有为 GTM 触发器触发。
所以我设置了一个新的触发器,它在点击时触发并将其添加到:
我现在可以看到代码在 GTM 预览模式下触发:
而且我可以在 GAs Real-time 事件报告.
中看到 添加到购物车 事件
但在“转化”>“电子商务”>“购物行为”的添加到购物车的会话中仍然没有显示正确的数据。
问题
- 我可能遗漏了什么?
- 我应该在 GTM 标签设置中将 Non-Interaction Hit 设置为 false 吗?
- 我是否应该将 GTM 中的标签 use data layer 设置为 false,因为 addToCart 自定义事件未触发?或者也许这仍然需要 为了某事。
- 关于如何调试为什么 addToCart 自定义事件不可用的任何提示 当 GTM 处于预览模式时在 Magento 上触发?
我注意到 session in Magento is 3.5 hours, while in GA the Session timeout 只有 30 分钟。也许是这样?我们更改了 GA 会话超时以匹配 Magento 的,但事实并非如此:(
提前致谢,感谢您的帮助:)
根据@lossleader 对我的问题的评论,我能够识别并解决问题。我会在这里回答,以防其他人觉得它有帮助。
基本上正如@lossleader 在他的评论中所说,主要的是:
The custom event should also have contained the e-commerce data for the use dataLayer tag.
所以用简单的点击事件触发 addToCart 标签是不够的,因为它不包含电子商务数据,我需要修复 enhance ecommerce addToCart 事件在 Magento 上的触发方式。
我发现 Magento Commerce changed/fixed 他们如何在最近的升级中最终调用触发此事件的函数,即 commit MAGETWO-69210 & commit MAGETWO-87437
我们的 Magento 确实收到了这些更改,因为 list.phtml template and the catalog-add-to-cart.js file 在其主题中被覆盖了。
按照以下差异显示更新主题文件解决了我们案例中的问题:
diff --git a/app/code/Namespace/CategoryPages/view/frontend/templates/product/list.phtml b/app/code/Namespace/CategoryPages/view/frontend/templates/product/list.phtml
index 6771e863..2ab8905c 100644
--- a/app/design/frontend/Namespace/theme/Magento_Catalog/templates/product/list.phtml
+++ b/app/design/frontend/Namespace/theme/Magento_Catalog/templates/product/list.phtml
@@ -91,7 +91,7 @@ $_helper = $this->helper('Magento\Catalog\Helper\Output');
<div class="actions-primary"<?php echo strpos($pos, $viewMode . '-primary') ? $position : ''; ?>>
<?php if ($_product->isSaleable()): ?>
<?php $postParams = $block->getAddToCartPostParams($_product); ?>
- <form data-role="tocart-form" action="<?php /* @escapeNotVerified */ echo $postParams['action']; ?>" method="post">
+ <form data-role="tocart-form" data-product-sku="<?= $block->escapeHtml($_product->getSku()) ?>" action="<?= /* @NoEscape */ $postParams['action'] ?>" method="post">
<input type="hidden" name="product" value="<?php /* @escapeNotVerified */ echo $postParams['data']['product']; ?>">
<input type="hidden" name="<?php /* @escapeNotVerified */ echo Action::PARAM_NAME_URL_ENCODED; ?>" value="<?php /* @escapeNotVerified */ echo $postParams['data'][Action::PARAM_NAME_URL_ENCODED]; ?>">
<?php echo $block->getBlockHtml('formkey')?>
diff --git a/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js b/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js
index fae6f0fa..34978ec4 100644
--- a/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js
+++ b/app/design/frontend/Namespace/theme/Magento_Catalog/web/js/catalog-add-to-cart.js
@@ -6,8 +6,10 @@
define([
'jquery',
'mage/translate',
+ 'underscore',
+ 'Magento_Catalog/js/product/view/product-ids-resolver',
'jquery/ui'
-], function ($, $t) {
+], function ($, $t, _, idsResolver) {
'use strict';
$.widget('mage.catalogAddToCart', {
@@ -75,7 +77,9 @@ define([
* @param {String} form
*/
ajaxSubmit: function (form) {
- var self = this;
+ var self = this,
+ productIds = idsResolver(form),
+ formData = new FormData(form[0]);
$(self.options.minicartSelector).trigger('contentLoading');
self.disableAddToCartButton(form);
@@ -97,6 +101,13 @@ define([
success: function (res) {
var eventData, parameters;
+ $(document).trigger('ajax:addToCart', {
+ 'sku': form.data().productSku,
+ 'productIds': productIds,
+ 'form': form,
+ 'response': res
+ });
+
if (self.isLoaderEnabled()) {
$('body').trigger(self.options.processStop);
}
推送的自定义事件还应该包含 "use dataLayer" 标记中引用的电子商务数据,因此您确实需要修复 magento 配置或检测用户操作而不是模拟它. IE。在这些 inputs/forms 周围寻找对商店 html 的定制,并尝试将它们恢复为库存。
您似乎是通过查看 magento 的 addToCart
事件的更新找到了