覆盖 UTM 参数
Overwrite UTM Parameter
我们确实有一些活动(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 (...)?
我们知道这个东西的设置方式是一种非常糟糕的做法,我们正在努力解决这个问题。
我找到了一个代码片段,它正在操纵网站上的链接:
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, '');
}
</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 参数,或者在他没有 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, '');
}
</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, '');
$(this).attr("href",href);
$(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign=' + utm_campaign + '&utm_medium=' + utm_medium);
}
});
});
</script>
使用 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, '');
}
如果您正在使用 Google 标签管理器,您可以将其添加到自定义 HTML 标签中并在 DOM 就绪时触发。
如果你想保留片段在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, '');
link[i].href = my_new_url + fragment;
}
我们确实有一些活动(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 (...)?
我们知道这个东西的设置方式是一种非常糟糕的做法,我们正在努力解决这个问题。
我找到了一个代码片段,它正在操纵网站上的链接:
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, '');
}
</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 参数,或者在他没有 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, '');
}
</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, '');
$(this).attr("href",href);
$(this).attr('href', $(this).attr('href') + '?utm_source=' + utm_source + '&utm_campaign=' + utm_campaign + '&utm_medium=' + utm_medium);
}
});
});
</script>
使用 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, '');
}
如果您正在使用 Google 标签管理器,您可以将其添加到自定义 HTML 标签中并在 DOM 就绪时触发。
如果你想保留片段在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, '');
link[i].href = my_new_url + fragment;
}