Перезапись UTM метки

user99

Постоялец
Регистрация
13 Янв 2008
Сообщения
141
Реакции
15
Добрый день!

Подскажите пожалуйста, как перезаписать UTM метку?

Используется код и utm метка /?utm_city=1, при попытке перезаписи на /?utm_city=2 получается /?utm_city=1&utm_city=2.

JavaScript:
<script>
t_onReady(function () {
    var search = "?" + window.location.search.split("&").filter(function(val) {
        var value = val.replace(/\?/, '');
        return value.indexOf("s_") === -1 && value.indexOf("tfc_") === -1;
    }).join("&").replace(/\?/, "");
   
    if (search !== "?") {
        var aLinks = document.querySelectorAll('a');
        var arrayLinks = Array.from(aLinks);
        arrayLinks.forEach(function (el) {
            var href = el.getAttribute("href");
            if (href && href.indexOf("/") > -1 && href.indexOf("#") === -1) {
                if (href.indexOf("?") === -1) {
                    el.setAttribute("href", href + search);
                } else {
                    el.setAttribute("href", href + search.replace("?", "&"));
                }
            }
        });
    }

});
</script>
 
По вашему коду не видно, где должна меняться метка. Первая часть кода отвечает за удаление из location.search всех меток, начинающихся на указанные префиксы; вторая часть дописывает обновлённый список меток во все ссылки на странице, т.е. если в ссылке есть свои метки, то скрипт их не поменяет.

Вот этот код обновит у ссылок все метки на те, что указаны в URL текущей страницы:
JavaScript:
function genTags(urlString) {
        var tags = {};
        var urlParts = urlString.split('?');
        if(urlParts.length > 1) {
            urlParts[1].split("&").forEach(function(tagString) {
                if(tagString.indexOf("s_") === -1 && tagString.indexOf("tfc_") === -1) {
                    var tagParts = tagString.split('=');
                    tags[tagParts[0]] = tagParts[1];
                }
            });
        }
        return tags;
    };
    function tagsToString(tags) {
        var tagArray = [];
        for(var tagName in tags) {
            tagArray.push(tagName + '=' + tags[tagName]);
        }
        return tagArray.join('&');
    }
    var pageTags = genTags(window.location.href);
   
    if (window.location.search.length > 1) {
        var aLinks = document.querySelectorAll('a');
        var arrayLinks = Array.from(aLinks);
        arrayLinks.forEach(function (el) {
            var href = el.getAttribute("href");
            if (href && href.indexOf("/") > -1 && href.indexOf("#") === -1) {
                var linkTags = genTags(href);
                var newTags = Object.assign(linkTags, pageTags);
                el.setAttribute("href", href.split('?')[0] + '?' + tagsToString(newTags));
            }
        });
    }
 
Скрипт сохраняет метку UTM (выбранный регион) при переходе по ссылкам.
Нужно что бы при смене UTM (смене региона в меню), метка перезаписывалась.

Метка меняется путем перехода по ссылке в меню:
Регион 1 href="/?utm_city=1"
Регион 2 href="/?utm_city=2"
Регион 3 href="/?utm_city=3"

т.е. что бы после перехода по ссылке href="/?utm_city=3", добавлялась и далее сохранялась только метка /?utm_city=3.

Сейчас вместо перезапись происходит добавление новой метки
/?utm_city=1&utm_city=2&utm_city=3
 
Последнее редактирование:
Т.е. логика такая:
1) При входе на страницу если в URL есть utm_city , то обновляем его там где он хранится (а где - в куки, в localStorage?)
2) Если у нас есть сохранённая utm_city , то добавляем её всем ссылкам на странице.
Я правильно вас понял?
 
Да, все верно.
 
1. Где храните данные о метке? Кстати, если храним их в браузере пользователя, то скриптом всегда можем подхватить и, соответственно, не вижу особо смысла гонять их всё время через get-параметры, если вы их, конечно, на php не подхватываете и что-то там выводите соответственно.
2. Дайте минимальный html-код.
 
Это Tilda (там нет доступа к php, только html и javascript), далее выгружаем через API к себе на сервер. Сейчас выбор региона реализован через cookie и php, что требует дополнительной корректировки кода после выгрузки, по этому тестируем UTM метку.

Для просмотра ссылки Войди или Зарегистрируйся

Как вариант, добавить ссылки смены региона в исключение, но в javascript я не эксперт )
 
Прикрепляю пример с кодом, можете сохранить как файл test.html и прямо в браузере локально открыть, проверить работу (там пришлось закоментить кусочек, чтобы работало локально)
HTML:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <style type="text/css">a,a:visited{font-weight: 700; color:#D00}</style>
</head>
<body>
    <h2>Меню</h2>
    <p>
        <a class="menu" href="test.html?utm_city=madrid">Madrid</a> |
        <a class="menu" href="test.html?utm_city=paris">Paris</a> |
        <a class="menu" href="test.html?utm_city=berlin">Berlin</a> |
        <a class="menu" href="test.html?utm_city=rome">Rome</a>
    </p>
    <h2>Текст</h2>
    <p>Проснувшись однажды утром после <a href="test.html?utm_source=direct">беспокойного сна</a>, Грегор Замза обнаружил, что он у себя в постели превратился в страшное насекомое. Лежа на панцирнотвердой спине, он видел, стоило ему приподнять голову, свой коричневый, выпуклый, разделенный дугообразными чешуйками живот, на верхушке которого еле держалось <a href="test.html?utm_source=banner">готовое</a> вот-вот окончательно сползти одеяло.</p>
    <p>Его многочисленные, убого тонкие по сравнению с остальным телом ножки беспомощно копошились у него перед глазами. «Что со мной случилось?» – подумал он. Это не было сном. Его комната, настоящая, разве что слишком маленькая, но обычная комната, мирно покоилась в своих четырех хорошо <a href="test.html">знакомых стенах</a>. Над столом, где были разложены распакованные образцы сукон – Замза был коммивояжером, – висел портрет, который он недавно вырезал из иллюстрированного журнала и вставил в красивую золоченую рамку.</p>
    <p>На портрете была изображена дама в меховой шляпе и боа, она сидела очень прямо и протягивала зрителю тяжелую меховую муфту, в которой целиком исчезала ее рука. Затем взгляд <a href="test.html">Грегора</a> устремился в окно, и пасмурная погода – слышно было, как по жести подоконника стучат капли дождя – привела его и вовсе в грустное настроение. «Хорошо бы еще немного поспать и забыть всю эту чепуху», – подумал он, но это было совершенно неосуществимо, он привык спать на правом боку, а в теперешнем своем</p>
    <script type="text/javascript">
    function genTags(urlString) {
        var tags = {};
        var urlParts = urlString.split('?');
        if(urlParts.length > 1) {
            urlParts[1].split("&").forEach(function(tagString) {
                if(tagString.indexOf("s_") === -1 && tagString.indexOf("tfc_") === -1) {
                    var tagParts = tagString.split('=');
                    tags[tagParts[0]] = tagParts[1];
                }
            });
        }
        return tags;
    };
    function tagsToString(tags) {
        var tagArray = [];
        for(var tagName in tags) {
            tagArray.push(tagName + '=' + tags[tagName]);
        }
        return tagArray.join('&');
    }
    var pageTags = genTags(window.location.href);
  
    if (window.location.search.length > 1) {
        var aLinks = document.querySelectorAll('a:not(.menu)');
        var arrayLinks = Array.from(aLinks);
        arrayLinks.forEach(function (el) {
            var href = el.getAttribute("href");
            if (href && /*href.indexOf("/") > -1 &&*/ href.indexOf("#") === -1) {
                var linkTags = genTags(href);
                var newTags = Object.assign(linkTags, pageTags);
                el.setAttribute("href", href.split('?')[0] + '?' + tagsToString(newTags));
            }
        });
    }
    </script>
</body>
</html>
 
Подскажите пожалуйста, почему скрипт не производит добавление UTM метки.

Скрытое содержимое доступно для зарегистрированных пользователей!

Хочу добавить UTM метку ко всем ссылкам на сайте и в меню, кроме ссылок в разделе "Выбор UTM метки".
 
Последнее редактирование:
У вас на странице подключен скрипт, который должен делать добавление? По исходному коду страницы не вижу его.
 
Назад
Сверху