【问题标题】:Overwrite UTM Parameter覆盖 UTM 参数
【发布时间】:2020-03-18 08:05:27
【问题描述】:

我们确实有一些活动(Google、facebook、...)当用户到达登录页面 (abo.mysite.com) 时,他确实有 utm 参数 utm_source=theCampaignSource。当用户点击 CTA 时,CTA 会给出一个新的 UTM utm_source=abo,然后他会转到 shop.mysite.com。

我们无法从 abo.mysite.com 中删除 UTM。

有没有办法检查用户是否已经拥有 UTM,以及何时拥有 UTM 以将其保留到 shop.mysite.com?所以我们知道用户来自 Google (...)?

我们知道如何设置这个 Thing 是一种非常糟糕的做法,我们正在努力解决这个问题。

我发现一个代码 sn-p 正在操纵网站上的链接:


links.forEach(function(link){
 link.setAttribute("href","abo.mysite.com")
})

但我无法让它工作 - 因为我确实缺乏经验。

更新

根据我的具体需求,这样做:

1) 从网站上的链接中删除现有 UTM

<script>
var link = document.getElementsByTagName("a");

for (var i = 0; i < link.length; i++) {
    link[i].href = link[i].href.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1');
}
</script>

2) 散列 URL 中的 UTM

 <script>
        if(!window.jQuery) {
          document.write('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js">\x3C/script>');
        }
     </script>

    <script type="text/javascript">
                $(document).ready(function() {
                function getUrlVars() {
                    var vars = [],
                        hash;
                    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
                    for (var i = 0; i < hashes.length; i++) {
                        hash = hashes[i].split('=');
                        vars.push(hash[0]);
                        vars[hash[0]] = hash[1];
                    }
                    return vars;
                }

                var parameters = getUrlVars();
                var utm_source = decodeURIComponent(parameters['utm_source']);
                var utm_campaign = decodeURIComponent(parameters['utm_campaign']);
                var utm_medium = decodeURIComponent(parameters['utm_medium']);
</script>

3) 用散列的 UTM 重写站点上的每个 URL

<script>
          $('a').each(function(){
  $(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign' + utm_campaign + '&utm_medium' + utm_medium);
});

            });

编辑 感谢 Michele Pisani

这很好用 - 但是,如果用户没有 UTM,并且他点击按钮,UTM 将设置为 undefined

有没有办法在用户已经拥有 UTM 参数时从 URL 设置 UTM 参数,或者当他在 URL 中没有 UTM 时使用现有的 UTM(在按钮中硬编码)。

编辑 2 和更新 最后 - 在你们的帮助下 - 我找到了解决方案:

<script>
    var link = document.querySelectorAll('a:not([href*="#"])');    
    for (var i = 0; i < link.length; i++) {
        //link[i].href = link[i].href.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1');
    }
</script>


    <script type="text/javascript">

    $(document).ready(function() {
        function getUrlVars() {
            var vars = [],
                hash;
            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
            for (var i = 0; i < hashes.length; i++) {
                hash = hashes[i].split('=');
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
            }
            return vars;
        }

        //var parameters = getUrlVars();
        //var utm_source = decodeURIComponent(parameters['utm_source']);
        //var utm_campaign = decodeURIComponent(parameters['utm_campaign']);
        //var utm_medium = decodeURIComponent(parameters['utm_medium']);
        var url_string = window.location.href; //window.location.href
        var url = new URL(url_string);
        //var c = url.searchParams.get("c");

        var utm_source = url.searchParams.get("utm_source");
        var utm_campaign = url.searchParams.get("utm_campaign");
        var utm_medium = url.searchParams.get("utm_medium");




        $('a:not([href^="#"])').each(function() {
            if(utm_source != "" && utm_source != null){
                var href = $(this).attr("href");
                href = href.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1');
                $(this).attr("href",href);
                $(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign=' + utm_campaign + '&utm_medium=' + utm_medium);
            }
         });


    });

    </script>

【问题讨论】:

    标签: javascript google-analytics google-tag-manager utm


    【解决方案1】:

    使用 JavaScript,要从页面中的链接中删除 UTM 参数,您可以使用正则表达式尝试此功能:

    var link = document.getElementsByTagName("a");
    
    for (var i = 0; i < link.length; i++) {
        link[i].href = link[i].href.replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1');
    }
    

    如果您使用的是 Google 跟踪代码管理器,则可以将其添加到自定义 HTML 标记中并在 DOM Ready 上触发它。

    【讨论】:

    • 感谢您:但代码也会切断每个# 片段
    • 嗨@Tomtom,我在新的修改中添加了另一个答案。
    • 感谢您的帮助,但我还有一个问题。是否可以排除某些特定链接?案例:用户点击 abo.mysite/secondpage 该链接不应该得到任何 utms。
    【解决方案2】:

    如果你想将片段保留在 URL 中,你可以这样修改函数:

    var link = document.getElementsByTagName("a");
    
     for (var i = 0; i < link.length; i++) {
        arr_link = (link[i].href).split("#");
        var fragment = "";
        if (arr_link[1]) { fragment = "#" + arr_link[1]; }
        var my_new_url = arr_link[0].replace(/(\?)utm[^&]*(?:&utm[^&]*)*&(?=(?!utm[^\s&=]*=)[^\s&=]+=)|\?utm[^&]*(?:&utm[^&]*)*$|&utm[^&]*/gi, '$1');
        link[i].href = my_new_url + fragment;
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2015-06-05
      • 2016-01-03
      • 2020-11-03
      • 2012-05-20
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多