У нас есть несколько кампаний (Google, facebook, ...). Когда пользователь попадает на целевую страницу (abo.mysite.com), у него есть параметр utm utm_source=theCampaignSource. Когда пользователь щелкает CTA, CTA дает новый UTM utm_source=abo, и он переходит на shop.mysite.com.

Мы не можем удалить UTM с сайта abo.mysite.com.

Есть ли способ проверить, есть ли у пользователя уже UTM, и когда у него есть такой, чтобы поддерживать его до shop.mysite.com? Итак, мы знаем, что пользователь приходит из Google (...)?

Мы знаем, что то, как это устроено, - очень плохая практика, и мы работаем над этим.

Я нашел фрагмент кода, который манипулирует ссылками на сайте:


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) Хэш UTM в URL

 <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) переписать каждый URL на сайте с хэшированными UTM

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

            });

< Сильный > Edit Благодаря Микеле Пизани

Это работает хорошо - НО, если у пользователя нет UTM, и он нажимает кнопку, UTM будет установлен в undefined

Есть ли способ установить параметр UTM из URL-адреса, если он у пользователя уже есть, или использовать существующий UTM (который жестко задан в кнопке), если у него нет UTM в URL-адресе.

Изменить 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>
0
Tom tom 22 Ноя 2019 в 12:20

2 ответа

С помощью 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.

1
Michele Pisani 23 Ноя 2019 в 18:26

Если вы хотите сохранить фрагмент в 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;
 }
1
Michele Pisani 26 Ноя 2019 в 20:47