• GTM课程
  • 博客
  • 服务
  • 资源资源
    • YouTube频道
    • 电子书和指南
    • GTM食谱
    • 查看所有资源
    • GTM社区
  • 关于
    • 关于
    • 联系
  • GTM课程
  • 博客
  • 服务
  • 资源资源
    • YouTube频道
    • 电子书和指南
    • GTM食谱
    • 查看所有资源
    • GTM社区
  • 关于
    • 关于
    • 联系

2020年3月13日

如何使用Google跟踪代码管理器提取部分URL路径

已更新:2020年3月13日

这篇博客文章听起来可能类似于我’最近出版, 如何提取URL的查询参数,但这一次解决了一些不同的问题。在该博客文章中,我正在使用查询参数。例如,我能够获取 productId 如果页面URL是 http:// _www.example.com?productId=123.

但是今天’s blog post, let’假设我们有以下结构的URL: //www.example.com/products/category_name/id 我们想把 分类名称 放入GTM变量中(知道类别名称始终位于“页面路径”的第二个子目录中。

我们如何实现这一目标?让’s find out.

如果你’不知道URL中的子目录是什么 在这个博客中 帖子显示清楚。

回到我们的例子。为了访问URL的第二个子目录,我们需要编写一些自定义JavaScript。我们’请尝试逐步进行操作,以便对那些刚开始使用JavaScript的人更容易理解(免责声明:我也属于 仍然 以JS开头)。

Google跟踪代码管理器电子书包

匿名JavaScript函数

为了提取部分网址路径,我们’我将需要使用自定义JS变量。这个通用变量必须包含一个满足两个条件的脚本:

  • 它必须是匿名函数,例如 function(){… }
  • 它必须返回一些值

毫不犹豫地,让’s打开文本或代码编辑器(或仅在GTM界面中的Custom JS编辑器)并粘贴以下代码:

function(){
  
}

它不会做任何事情(但这只是我们Custom JS变量的开始)。

现在,让’创建一个JavaScript变量并将其命名 pageUrl然后,让’为其分配一个值, window.location.href:

function(){
  var pageUrl = window.location.href;
}

window.location.href 是一种访问用户/访问者所在页面的当前URL的方法。在下一步中,让’s 返回 that pageUrl 但只有一部分。我们可以通过 split()方法,它将字符串(在本例中为URL)拆分为子字符串数组。如果你’re new to this, we’我会仔细看看。

添加一个 返回对该脚本的声明(因为GTM中的每个Custom JS变量都必须返回某些内容),然后是您要返回的变量的名称 (pageUrl),最后,让’s add a 分裂 方法。

function(){
  var pageUrl = window.location.href;
  返回 pageUrl.split();
}

但是那’不是全部。我们需要告诉 split() 方法我们要如何精确地拆分页面URL。如果回到我们的例子,我们’re working with the //www.example.com/products/category_name/id (如果您是’重新尝试遵循他的方法,您可以在URL包含某些子目录的其他页面上工作)。

从该URL,我们要访问 分类名称。由于它被斜杠(/)包围,因此可以用作我们的分隔符(分隔符)  分裂 方法。让’s加上该斜杠(用引号引起来)。

function(){
  var pageUrl = window.location.href;
  返回 pageUrl.split("/");
}

结果,这将返回一个数组(简单地说, 清单)中的所有部分。这里’更直观的解释。使用之前 split() 方法,页面URL如下所示:

//www.example.com/products/category_name/id

使用该方法后,结果在视觉上将如下所示:

如您在上方所见,URL被分为6项列表,以 https 并以 ID。 列表中的第二项为空(“”),因为https中的两个斜杠之间没有任何内容://.

We’re almost there. 分类名称 已与URL分离,我们现在要做的就是从此数组中选择它。这可以通过定义该数组成员的索引来完成。在我们的示例中,该数字为4。如果您要获取“页面路径”的第3级( ID),那么您应该输入数字5。

在split方法之后添加它(用方括号括起来):

function(){
  var pageUrl = window.location.href;
  返回 pageUrl.split("/")[4];
}

唐e!

 

Custom JavaScript 变量

现在,让’将此代码粘贴到自定义JavaScript变量中(在GTM界面中)。您可以使用适合容器命名约定的任何名称进行命名,例如 cjs–URL的第二个子目录

Save the 变量, enable the 预览和调试模式Â转到要测试此变量的页面(请确保URL在“页面路径”中包含某些内容(至少2个级别,又名文件夹,又名子目录)。

预期结果应如下所示(当然,您的情况下该值将有所不同)。

 

这也可以应用于其他网址

唐’仅使用页面URL来限制自己。您也可以将其应用于其他地址,例如,点击URL,视频URL等。您只需要为 pageUrl 变量(在该自定义JavaScript中)。这里’s是一个示例,说明您要访问Clicked URL的特定部分的外观。

function(){
  var clickUrl= {{Click URL}};
  返回 clickUrl.split("/")[4];
}

而不是 window.location.href,我们使用了 点击网址 GTM容器的变量(只需确保在容器中启用了此内置变量)。然后脚本将 点击网址,将其拆分(“/”),然后选择索引为4的项目。

请记住,JavaScript中的索引以0(零)开头,因此,第4个元素实际上是第5个元素。

 

唐’t limit yourself

有无数的用例 分裂() 方法真的很有价值。假设您有一个名为{{dlv –productId}},它返回以下结构的产品ID— productId-variantId (例如123456-887766),而您只想使用 productId (没有 variantId)。

在这种情况下,自定义JS代码如下所示:

function(){
  var productId = {{dlv- productId}};
  返回 productId.split("-")[0];
}

说明:

  • 我在代码中将var(变量)命名为 productId
  • 我为该变量分配了数据层变量的值 {{dlv– productId}}
  • 我将破折号(–)作为分隔符(分隔符),因为我想在横杠所在的位置正确分割产品ID(提醒:初始ID看起来像这样 123456-887766)
  • 当一个 分裂() 方法创建了两个项目的数组(123456 和 887766)。 我选择了第一个。在JavaScript中,第一项的索引号是0(零),而不是1,因此我输入了0。

如果该变量将返回值123456 dlv– productId 变量’值是123456-887766)。

 

使用Google跟踪代码管理器提取部分网址路径:最终词

以便’有关这篇简短的博客文章。的 split() 当我需要解析一个字符串(通常是URL)并获取它的一部分时(如果输入值始终遵循相同的结构),该方法在此类任务中绝对非常有用。

如果有任何极端情况,’d想找到解决方法,请在下面给我留言。这样的案例也帮助我学习(自从我’我仍然在我的JS旅程的开始阶段)。

Google跟踪代码管理器电子书包
朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
在 Google跟踪代码管理器提示
27条评论
马库斯
  • 2019年8月14日
  • 回复

真好!我最近设置了一些非常相似的方法来跟踪出站会员链接。另外,如果没有值,则将值设置为undefined,因为如果类别或操作中有空值,我会遇到GTM无法触发事件的问题。我还将值通过另一个变量/函数传递,以根据需要设置文本格式:

function(){
var path = {{Click URL}}。split(“ / go /”)[1] .split(“ /”);
var product = path [2]!==''吗? path [2]:未定义;

返回{{Go Link-Format}}(product);
}

SMG
  • 2019年8月15日
  • 回复

感谢这篇文章朱利叶斯!
很有用。我最近对此用例有需求,并做了类似的事情。

温迪
  • 2019年10月15日
  • 回复

是否存在这种方法不起作用并为变量返回undefined的实例?

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2019年10月15日
    • 回复

    您只需要说明您的情况,共享指向您正在处理的页面的链接即可,我可以看看:)这样的帮助比谈论假设的情况更容易

乔纳斯
  • 2019年12月10日
  • 回复

如果您想避免分裂并且只对整个路径感兴趣

function(){
var url =新网址({{Click URL}})
返回url.pathname;
}

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2019年12月10日
    • 回复

    如果有人对完整点击URL路径感兴趣,则不需要自定义JS。使用以下变量可以达到相同的结果:
    -类型:URL
    -组件类型:路径
    - More Settings > URL Source: {{Click URL}}

安东尼
  • 2020年3月20日
  • 回复

不知道这是否是我想要做的正确方法。

有没有办法使用正则表达式或其他方法来修改url,使其对分析更加通用。例如,网址可能是/ product / 123 / details。在这种情况下,我们的应用程序和分析有很多独特的ID(例如123),使分析更难汇总,我们更关心/ product / details上有多少人,而不必关注哪个特定产品,因此有一种方法可以操纵并删除123部分而不爆炸每个网址?

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2020年3月20日
    • 回复

    尝试使用正则表达式表变量。但是您将需要具备一些正则表达式知识。

      罗伊
      • 2020年12月1日
      • 回复

      我如何使用正则表达式?

米雷克
  • 2020年6月27日
  • 回复

感谢您的输入。很有帮助。我有个问题。
我使用您的脚本下载了第六个“ /”之后的URL片段,但是该脚本使我的URL太长了。
我的脚本如下所示:
function(){
var pageUrl = window.location.href;
返回pageUrl.split(“ /”)[6];
}

但是,我通过脚本下载的网址看起来像这样:

auto23434,Skoda_Octavia-2017

我只想下载URL中以逗号开头的部分,即“ auto23434”。
您能帮我修改脚本吗?

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2020年6月29日
    • 回复

    嗨,我在这篇博客文章中已经解释了同样的原理

    function(){
    var pageUrl = window.location.href;
    返回pageUrl.split(“ /”)[6] .split(',')[0];
    }

赫克托
  • 2020年8月11日
  • 回复

嗨,朱利叶斯。目前正在参加您的GTM中级课程,发现它非常有价值!我的问题是,当我们尝试跟踪的是附加到网址末尾的唯一ID时,我们该如何拆分?换句话说,位置可能会从第3位更改为第5位,但始终在最后。

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2020年8月11日
    • 回复

    在方括号之间,您应该输入以下内容:

    pageUrl.split(“ /”)。length-1

    这将返回最后一个索引

    最终结果可能看起来像这样(但是,当然,您可能需要根据具体情况进行调整)

    function(){
    var pageUrl = window.location.href;
    返回pageUrl.split(“ /”)[pageUrl.split(“ /”)。length-1];
    }

伯恩哈德·瓦格纳
  • 2020年8月21日
  • 回复

感谢您所做的出色工作,那些剧烈的小事可能会带来麻烦。我遇到了以下情况:

name-name2-name3作为在页面url上使用slpit方法的结果

我想知道如何获取结果'name name2 name3'(.replace对我不起作用)

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2020年8月21日
    • 回复

    替换只能执行一次。您有2个破折号。

    使用这个temp.split('-')。join('')

伯恩哈德·瓦格纳
  • 2020年8月21日
  • 回复

工作得很好。谢谢

尼山斯
  • 2020年8月23日
  • 回复

很棒的文章,朱利叶斯(一如既往)!

如果我能为您所从事的SaaS公司的边缘案例提供一些见解而麻烦您,请执行以下操作:

- We use only one form for "Request a demo" and "联系我们"
-无论您点击哪个行业或产品,它都会转到相同的/ contact-us页面。
-我的想法是使用此网址提取变量在Google Analytics(分析)上设置不同的转化目标。例如行业>索取演示或产品>Contact us

    朱利叶斯
    • 2020年8月23日
    • 回复

    尝试在GTM中使用引荐来源网址变量。

赫克托
  • 2020年8月28日
  • 回复

你好!根据您的建议,我将其设置为捕获页面路径​​的末尾。除非在末尾添加了参数(特别是“?glid =“),否则效果很好。然后,它将获取这些参数。有什么办法可以防止这种情况?
感谢所有帮助,朱利叶斯!

    朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
    • 2020年9月1日
    • 回复

    您可以分享无法使用的网址示例吗?还有另一个例子,它在哪里工作?

      赫克托
      • 2020年9月1日
      • 回复

      该URL是动态的,可在页面加载后添加一个唯一的标识符(这是我试图捕获的自定义维度,名为Quote Number)。它以“ example.com/campaign/?utm=4600”开始,然后在加载时转换为“ example.com/campaign/543a726c81001”之类的东西。该着陆页已在带有自动标记的Google Ads广告系列中使用,因此最终结果可能类似于:“ example.com/campaign/543a726c81001?gclid=CjwKCAjwkJj6BRA-EiwA0ZVPViS77Swqm27VVjcP”
      奇怪的是,有时它会正确捕获字符串,而其他时候会捕获gclid参数。它成功的时间约为1/4。

        朱利叶斯·费多罗维奇乌斯(Julius Fedorovicius)
        • 2020年9月1日
        • 回复

        如果在“?gclid = CjwKCAjwkJj6BRA-EiwA0ZVPViS77Swqm27VVjcP”前面始终有一个/,则该脚本将始终有效。

        我的猜测是,有时/会在问号之前添加,有时则不会。这将更改脚本的最终结果。

        尝试玩这个

        function(){
        var splitPageUrl = window.location.href.split(“ /”)[4];
        如果(splitPageUrl.indexOf('?')>-1){
        返回splitPageUrl.split(“?”)[0];
        }
        }

        只需将[4]更改为您想要访问的内容即可(如果现在不适合您)。

亚历克斯
  • 2020年9月16日
  • 回复

嘿朱利叶斯,感谢您的帖子,我尝试了上述方法

function(){
var splitPageUrl = window.location.href.split(“ /”)[5];
如果(splitPageUrl.indexOf('?')> -1) {
返回splitPageUrl.split(“?”)[0];
}
}

但是,例如,某些URL并非采用这种格式

/ app / account / Register?sourceid = 39&campid = 2731-捕获的页面名称为“注册”

/ app / Account / Register?sourceid = 587&campid = 2581-捕获的页面名称是“注册?&sourceid=587&campid=2581"

任何想法为什么对于某些相同类型的URL都可以正常工作,却无法获取正确的页面名称

    朱利叶斯
    • 2020年9月16日
    • 回复

    那是因为在/之前没有/。

    在发表评论之前检查一下评论,您将找到解决方案。

      亚历克斯
      • 2020年9月16日
      • 回复

      你好朱利叶斯,

      我了解,事实上,我只在发布之前将脚本从先前的评论中复制出来

      function(){
      var splitPageUrl = window.location.href.split(“ /”)[5];
      如果(splitPageUrl.indexOf('?')> -1) {
      返回splitPageUrl.split(“?”)[0];
      }
      }

      如您所见,实现了我的大部分页面名称后,它们都被正确存储了

      奇怪的是,请检查以下2个示例,它们都具有相同的url类型,但是其中一个使用此脚本存储了正确的页面名称,另一个则没有

      1.)/ app / account / Register?sourceid = 39&campid = 2731-捕获的页面名称为“注册”

      2.) / app / Account / Register?sourceid = 587&campid=2581
      -捕获的页面名称是“注册?&sourceid=587&campid=2581"

      这是我的疑问,因为脚本可以在第一个网址中将页面名称标识为Register,但在第二个网址中却以某种方式失败

      你能看看吗

        朱利叶斯
        • 2020年9月16日
        • 回复

        然后使用

        function(){
        返回{{Page Path}} .split(“ /”)[{{Page Path}}。length-1];
        }

        它将返回路径的最后一部分

伯恩哈德
  • 2020年12月7日
  • 回复

大家好,检索URL最后部分的另一种方法是:

function(){
var lastItem = {{Click URL}}。substring({{Click URL}}。lastIndexOf('/')+ 1);
返回lastItem;
}

// note:其他变量,例如{{Page URL}}或{{PagePath}}也可以

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

 

嗨,我是Julius Fedorovicius 并且在这里可以帮助您学习Google跟踪代码管理器和Google Analytics(分析)(但主要是GTM)。在这个激动人心的旅程中,与其他100 000多个每月访问量和14000多个新闻通讯订阅者一起加入。 阅读更多
基本资源


热门文章
  • 🔥GTM表格跟踪:7种有效方法
  • 🔥dataLayer.push:指南
  • 🔥GTM vs Google Analytics(分析)
  • 🔥99使用GTM可以做的事情
  • 🔥GTM常见错误
  • 🔥数据层:终极指南
  • 𥔥60 +适用于GTM的自定义JavaScript
分析狂热
  • Google跟踪代码管理器课程
  • Google跟踪代码管理器食谱
  • Google跟踪代码管理器资源
  • Google跟踪代码管理器社区
  • 登录课程
关注Analytics Mania
  • 订阅新闻通讯
  • RSS订阅
最近的帖子
  • Google Analytics(分析)4中的增强测量:指南
  • 使用Google跟踪代码管理器跟踪联系表7
  • 在GTM中缺少DOM准备就绪和窗口加载事件?
分析狂热- Google Tag Manager and Google Analytics 博客 | 隐私政策
管理Cookie设置


  • <article class="fX9OJWN"><span id="dYRf0D3"></span></article>



  • <blockquote id="YhwS9b7" class="YVzjtza"></blockquote>








                    • <dd id="kAKgfUO" class="kW1eCbu"><td class="G5l1XYd"><acronym id="qKx65xR"></acronym></td></dd><rp id="qz86h16" class="qBOUujY"><tt id="X4URbxb"><samp id="Gt0sCtd"></samp></tt></rp>