GTM点击事件在预览中工作,但在实时失败

时间:2018-03-15 19:00:24

标签: javascript google-tag-manager

我创建了一个自定义属性,可以将其添加到元素中以跟踪对它们的点击。当我使用预览模式测试事件时,它完美地工作。但是,在现场直播的时候,我从链接中收到了很多未定义的事件,我不想跟踪。

我的想法是,我希望能够将数据跟踪点击添加到任何元素,并开始跟踪它的事件。该属性还包含事件类别,操作,标签和值: data-track-click ="类别,操作,标签,值" 。在测试中,这非常有效。它仅触发包含此属性的元素,并在GTM中正确解析标签。但显然,实时标签会开始触发许多不包含数据跟踪点击属性的元素点击。

我使用Google Analytics调试器测试并保留我的控制台中的日志以在页面之间进行记录,我没有看错。我也发现使用Tag Assistant进行录音时没有任何问题。我无法复制我在Google Analytics中看到的所有错误点击,也不知道如何解决此问题。

我很确定这与我的事件触发器有关。即使空的时候正在解释正则表达式/^.+$/?但为什么会这样呢?过去的配置是否也可以缓存?因为我之前肯定有过一些错误。

这是自动事件变量: enter image description here

这是事件: enter image description here

1 个答案:

答案 0 :(得分:0)

问题正在发生,有时GTM会触发点击子DOM元素。例如,如果你有这个DOM:

<div data-track-click="Category, Action, Label, Value">
    <span>A</span>
    <a>B</a>
</div>

然后,当您点击A时,GTM会点击span,但没有data-track-click

我的解决方案是

  1. 使用以下条件创建触发器:Click Element - matches CSS selector - [data-track-click], [data-track-click] *。这将捕获data-track-click及其所有孩子enter image description here
  2. 创建JS变量,它将从click元素或具有此属性的最近父元素返回data-track-click属性值。
  3. 对于类别:

    function() {
        var el = {{Click Element}}
        while (el.getAttribute("data-track-click") == null && el !=null) {
            el = el.parentElement;
        }
        if (el != null) {
            var attr = el.getAttribute("data-track-click");
            return attr.split(',')[0].trim();
        }
        return "";
    }
    

    行动:

    function() {
        var el = {{Click Element}}
        while (el.getAttribute("data-track-click") == null && el !=null) {
            el = el.parentElement;
        }
        if (el != null) {
            var attr = el.getAttribute("data-track-click");
            return attr.split(',')[1].trim();
        }
        return "";
    }
    

    对于标签:

    function() {
        var el = {{Click Element}}
        while (el.getAttribute("data-track-click") == null && el !=null) {
            el = el.parentElement;
        }
        if (el != null) {
            var attr = el.getAttribute("data-track-click");
            return attr.split(',')[2].trim();
        }
        return "";
    }
    
    1. 然后创建一个标签,使用上面的变量和触发器。
    2. P.S。为了避免在GTM中更改内容并发布后再进行缓存,请使用hard refresh