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 事件报告.
中看到 添加到购物车 事件

但在“转化”>“电子商务”>“购物行为”的添加到购物车的会话中仍然没有显示正确的数据。

问题

  1. 我可能遗漏了什么?
  2. 我应该在 GTM 标签设置中将 Non-Interaction Hit 设置为 false 吗?
  3. 我是否应该将 GTM 中的标签 use data layer 设置为 false,因为 addToCart 自定义事件未触发?或者也许这仍然需要 为了某事。
  4. 关于如何调试为什么 addToCart 自定义事件不可用的任何提示 当 GTM 处于预览模式时在 Magento 上触发?
  5. 我注意到 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 事件的更新找到了 ,该事件已被安装的主题覆盖。