Javascript 确保在重定向之前完成Google Tag Manager和Google Analytics

Javascript 确保在重定向之前完成Google Tag Manager和Google Analytics,javascript,google-analytics,google-tag-manager,Javascript,Google Analytics,Google Tag Manager,我有一个指向我的网页的链接,我希望在将用户重定向到外部页面之前,使用Google Analytics和Google Tag Manager跟踪该用户 我想在重定向之前确保GA和GTM已经完成。最好的方法是什么 一种简单的方法是使用setTimeout。但是1000米是太长还是太短?是否希望在跟踪实际完成时进行重定向?。GTM和GA跟踪是否在文件准备就绪之前完成?如果不是,这是否可以强制执行 <html lang="sv"> <head> <title><

我有一个指向我的网页的链接,我希望在将用户重定向到外部页面之前,使用Google Analytics和Google Tag Manager跟踪该用户

我想在重定向之前确保GA和GTM已经完成。最好的方法是什么

一种简单的方法是使用setTimeout。但是1000米是太长还是太短?是否希望在跟踪实际完成时进行重定向?。GTM和GA跟踪是否在文件准备就绪之前完成?如果不是,这是否可以强制执行

<html lang="sv">
<head>
<title></title>
<meta charset="utf-8"/>
<script src="~/Scripts/jquery-2.1.0.min.js"></script>
<!-- ANALYTICS CODE -->
</head>
<body>

<!-- TAG MANAGER CODE -->

<script language="javascript">
    $(function() {
        setTimeout(function() {
            window.location.replace("http://externalwebsite.com");
        },1000);
    });
</script>

</body>
</html>

$(函数(){
setTimeout(函数(){
window.location.replace(“http://externalwebsite.com");
},1000);
});
在GTM桶里,我有Twitter和Facebook的再营销标签

更新的解决方案

我已经更新了我的解决方案。因为我最感兴趣的是确保GA在重定向之前完全启动,这将更好地工作

<html lang="sv">
<head>
    <title></title>
    <meta charset="utf-8"/>
    <script src="~/Scripts/jquery-2.1.0.min.js"></script>
    <script language="javascript">

        var redirect = function(waitFor) {
            return function(signal) {
                waitFor[signal] = 1;
                for (var s in waitFor) if (waitFor[s] == 0) return;
                _redirect();
            }
        }({timeout:0,ga:0});

        var redirected = false;
        var _redirect = function () {
            if (!redirected) {
                redirected = true;
                window.location.replace("http://@Model");
            }
        };

        (function (i, s, o, g, r, a, m) {
            i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
                (i[r].q = i[r].q || []).push(arguments)
            }, i[r].l = 1 * new Date(); a = s.createElement(o),
                m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
        })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
        ga('create', 'UA-47608023-1', 'tessin.se');
        ga('require', 'displayfeatures');
        ga('send', 'pageview', {
            'hitCallback': function () {
                redirect("ga");
            }
        });
    </script>

</head>
<body>

@Html.Include("google-tagmanager-redirect.html")

<script language="javascript">
    $(function () {
        setTimeout(function () { redirect("timeout"); }, 1000);
        setTimeout(function () { _redirect(); }, 3000);
    });
</script>

</body>
</html>

var redirect=函数(waitFor){
返回功能(信号){
等待[信号]=1;
如果(waitFor[s]==0)返回,则返回(waitFor中的var s);
_重定向();
}
}({timeout:0,ga:0});
var重定向=假;
var_redirect=函数(){
如果(!重定向){
重定向=真;
window.location.replace(“http://@Model”);
}
};
(功能(i、s、o、g、r、a、m){
i['GoogleAnalyticsObject']=r;i[r]=i[r]| |函数(){
(i[r].q=i[r].q | |[]).push(参数)
},i[r].l=1*新日期();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(窗口,文档,“脚本”,“www.google-analytics.com/analytics.js”,“ga”);
ga(“创建”、“UA-47608023-1”、“tessin.se”);
ga('require','displayfeatures');
ga('send'、'pageview'{
“hitCallback”:函数(){
重定向(“ga”);
}
});
@Include(“google tagmanager redirect.Html”)
$(函数(){
setTimeout(函数(){redirect(“timeout”);},1000);
setTimeout(函数(){u redirect();},3000);
});

最简单的方法可能是从GTM内部进行重定向


使用重定向代码创建自定义HTML标记。然后使用触发重定向标记,这样可以确保在重定向之前触发GA。

一种可能的解决方案是直接在GA代码中或通过在GTM中设置字段来设置“传输”标志

有关这方面的更多信息可在此处找到:。请注意,GTM v2仍然允许使用“useBeacon”标志,但它已被弃用,如果您直接在GA中编码,则应改用“transport”

例如,如果直接在此标志中编码:

ga('send', 'event', 'click', 'download-me', {transport: 'beacon'});
或在GTM中:

此标志确保在页面导航离开之前发送点击。

参考答案。我创建了以下工作流以使其正常工作

在我的代码中,我添加到
数据层

<script type="text/javascript">
    dataLayer.push({
        'event': 'gtm_redirect_url',
        'gtm_redirect_url': '<?php echo $url; ?>'
    });
</script>

数据层推送({
“事件”:“gtm_重定向_url”,
“gtm_重定向_url”:”
});
在本例中,我使用
PHP
根据特定条件更改重定向url

然后在GTM中,我设置了一个名为
GTM\u redirect\u url

还有一个触发器,也称为
gtm_redirect_url

还有一个标签,用于在HTML代码段中激发JS


所有这些设置都非常简单,并确保在重定向之前加载GTM。此方法还可以轻松地将重定向数据层标记添加到任何页面。

使用GTM推送到数据层时,可以使用eventCallback属性

dataLayer.push({
    'key1' : 'value1',
    'key2' : 'value2',
    'event' : 'fireTags',
    'eventCallback' : function() {
        alert('ALL tags which fire on {{event}} equals fireTags have now fired');
    }
});

更多信息:

我不知道GTM。但对于GA,您可以参考。它使用hitCallback选项来指定当Google Analytics事件成功发送时调用的函数。在GA中使用transport=beacon字段不是更好吗?它应该能保证交货。有关于这方面的消息来源吗?我链接了标签排序的文档和Simon Ahava的一篇文章(他几乎是任何与GTM相关的人的首选)。标签排序是一个相当新的功能,我不认为有更多的信息。好的,错过了这是两个链接。这使得GTM过于复杂,在我的案例中无法使用。更容易将Twitter和Facebook标签移动到页面上。你能解释一下“在页面导航之前”吗?即使重定向代码单独写在页面标记的底部,这个beacon:true标记是否会阻止重定向代码,直到它完全加载?