向Google Tag Manager dataLayer发送动态数据,无需事件

4
我在网站上为Google Tag管理器设置了一些自定义标签,以跟踪某些自定义数据,但它没有跟踪。 dataLayer变量将多个类似于此的数据汇集在头部标记管理器代码上方。
该过程是,用户着陆页面,然后点击,这将使用本地化数据从wordpress等获取数据,并通过ajax调用记录此信息。我们希望在ajax调用之前使用标记管理器在Google Analytics中记录此数据。
以下是JavaScript代码。
// JavaScript Document
jQuery(document).ready(function($){

        console.log(gg_data_object);

        var MyObject = {

            load: function(){
            MyObject._do_ajax('landed', null, null);    
        },

        _readCookie: function (name) {
            var nameEQ = name + "=";
            var ca = document.cookie.split(';');
            for(var i=0;i < ca.length;i++) {
            var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
            }
            return 0;
        },

        _click_trace: function(event){      
            MyObject._do_ajax('clicked', this.href, $(this).attr('class'));         
        },
        _submit_trace: function(event){
            gg_data_object.user_id = MyObject._readCookie('user_id');
            MyObject._do_ajax('submission', gg_data_object.post_type, $(this).attr('class'));           

        },
        _do_ajax: function(event_action, href, class_ref){

            var data = {
                'action'                : 'track_event',
                'security'              : gg_data_object.ajax_nonce,
                'event_action'          : event_action,             
                'current_url'           : gg_data_object.current_url,
                'date'                  : gg_data_object.date_today,
                'phpsessionid'          : gg_data_object.phpsessionid,
                'post_id'               : gg_data_object.post_id,
                'post_type'             : gg_data_object.post_type,
                'referrer'              : gg_data_object.referrer,
                'unique_id'             : gg_data_object.unique_id,
                'user_id'               : gg_data_object.user_id,
                'clickedon'             : href,
                'class_location_type'   : class_ref

            };



            /// Now ping event to google analytics - Nothing works
            dataLayer.push(data);
            dataLayer.push({'gg_event_action': event_action});

            // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
            jQuery.ajax({
                type : "post",
                dataType : "json",
                url : gg_data_object.ajaxurl,
                data : data,
                success: function(response) {
                    console.log(response);

                    return true;
                }
            });

        }, 

    }

    MyObject.load();
    $(document).on('click', 'a', MyObject._click_trace);
    $(document).on('click', 'input[type="submit"]', MyObject._submit_trace);

});

我的问题不是这段代码,而是尽管花了一天时间阅读文档、观看视频,我仍然无法设置一个有效的推送。
在标签管理器中:
1. 我创建了一个新标签 2. 选择了Google通用分析 3. 选择了自定义事件 4. 设置了一个新宏 5. 给它一个标签名,比如gg_event_type 6. 选择了数据层变量
但是它没有将数据发送到Google Analytics。非常感谢任何关于我所缺少的帮助。

你在将数据推入 dataLayer 之前是否定义了它? - nyuen
var dataLayer = dataLayer || []; 但你最好亲自试一试,看看效果如何。 - nyuen
据我所知,当您想在GTM中使用自定义事件时,实际上需要在您的数据层中添加一个“event”键(并使用该键的值)。 - Eike Pierstorff
嗨,我现在已经成功触发了一个基本事件。使用标准数据。但是我想在此事件中捕获更多的数据。dataLayer.push({ 'event' : 'trackEvent', 'gtmCategory' : 'track_event', 'gtmAction' : event_action, 'gtmLabel' : gg_data_object.current_url }); 我想知道如何在不设置更多标签的情况下实现这一点,该标签似乎只能捕获三个信息片段。那么数据层字段呢? - user1712691
这是我所做的。 - user1712691
显示剩余6条评论
2个回答

1

目前为止,我已经完成了以下工作。我使用了回答按钮,以便我可以格式化答案。

我设置了一个事件,如图所示,并多次使用相同的引用来跟踪数据。

按照这篇教程。

创建一个标签。 有一个自定义的{{event}} 设置标签和类别的宏 然后创建了一条规则,将事件与我的自定义事件引用联系起来。

然后我...

/// Now ping event to google analytics      
        dataLayer = []; 
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : event_action,
            'gtmLabel'              : gg_data_object.current_url            
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'sessionid',
            'gtmLabel'              : gg_data_object.phpsessionid           
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'post_id',
            'gtmLabel'              : gg_data_object.post_id            
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'post_type',
            'gtmLabel'              : gg_data_object.post_type          
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'referrer',
            'gtmLabel'              : gg_data_object.referrer           
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'unique_id',
            'gtmLabel'              : gg_data_object.unique_id              
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'user_id',
            'gtmLabel'              : gg_data_object.user_id            
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'clickedon',
            'gtmLabel'              : gg_data_object.href           
        });
        dataLayer.push({
            'event'                 : 'trackEvent',
            'gtmCategory'           : 'track_event',
            'gtmAction'             : 'class_ref',
            'gtmLabel'              : gg_data_object.class_ref,
            /*'event_action'            : event_action,             
            'current_url'           : gg_data_object.current_url,
            'phpsessionid'          : gg_data_object.phpsessionid,
            'post_id'               : gg_data_object.post_id,
            'post_type'                 : gg_data_object.post_type,
            'referrer'              : gg_data_object.referrer,
            'unique_id'                 : gg_data_object.unique_id,
            'user_id'               : gg_data_object.user_id,
            'clickedon'             : href,
            'class_location_type'   : class_ref*/               
        });
        console.log(dataLayer);

可能有更优雅的方法来完成这个任务并设置额外字段,但目前这样做可以实现目标。 感谢您的所有帮助。

Andi


实际上不是这样的,这正是方法 - 你可以在代码中隐藏它们,或者使用一些抽象层来处理,但这是最简单和(在我看来)最优雅的解决问题的方式。 - Eike Pierstorff

1
您可以使用以下优化的代码。您需要以JSON格式定义您的操作和标签,并通过循环处理它们。易于维护。
var dataLayer = [];
var d = [
    {
        'gtmAction' : event_action, 
        'gtmLabel'  : 'gtmLabel'
    },
    {
        'gtmAction' : 'sessionid', 
        'gtmLabel'  : gg_data_object.phpsessionid
    },
    {
        'gtmAction' : 'post_id', 
        'gtmLabel'  : gg_data_object.post_id
    }
];

for(i = 0; i<d.length; i++) {
    dataLayer.push({
        'event': 'trackEvent', 
        'gtmCategory': 'track_event', 
        'gtmAction': d[i].gtmAction, 
        'gtmLabel': d[i].gtmLabel
    });
}

console.log(dataLayer)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接