ClientId 没有被捕获
Posted
技术标签:
【中文标题】ClientId 没有被捕获【英文标题】:ClientId not getting captured 【发布时间】:2017-02-22 17:01:14 【问题描述】:我们在 Google Analytics 中定义了三个自定义维度:
ClientId(维度 1):会话范围 SessionId(维度 2):会话范围 命中时间戳(维度 3):命中范围这些是从页面脚本提供的:
$(document).ready(function()
(function(i,s,o,g,r,a,m)i['GoogleAnalyticsObject']=r;i[r]=i[r]||function()
(i[r].q=i[r].q||[]).push(arguments),i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
)(window,document,'script','//www.google-analytics.com/analytics.js','ga');
function getClientId()
try
var trackers = ga.getAll();
var i, len;
for (i= 0, len = trackers.length; i < len; i += 1)
if (trackers[i].get('trackingId') === 'UA-XXXXXXXX-1')
return trackers[i].get('clientId');
catch(e)
//do nothing
return 'false';
function getSessionId()
return new Date().getTime() + '.' + Math.random().toString(36).substring(5);
function getTimeStamp()
return new Date().getTime();
ga('create', 'UA-XXXXXXXX-1', 'auto');
ga('require', 'displayfeatures');
ga('require', 'linkid', 'linkid.js');
var clientId = getClientId();
var sessionId = getSessionId();
var timeStamp = getTimeStamp();
ga('send', 'pageview',
'dimension1' : clientId,
'dimension2' : sessionId,
'dimension3' : timeStamp
);
);
</script>
现在,营销团队告诉我们 。他们共享了我们有大约 24,000 行的数据,其中只有两个具有有效的客户端 ID。相比之下,Session ID 和 Hit Timestamp 被完美地捕获。
当我在网站上进行快速检查时(通过将 getClientId() 的代码分配给另一个临时函数并调用它),我得到了 ClientId。
我真的不确定是什么导致实时网站上错过了这一点。有人可以指出可能有问题的地方吗?
【问题讨论】:
您有什么理由将分析库加载到$(document).ready
,而不是在
@nyuen 非常好!我认为这是个坏主意。页面加载时没有与 GA 相关的错误消息。你的评论给了我工作的方向。我将直接在<script>
标签中加载JS,并在window.bind("load", ...
上进行实际发送(因为他们有旧版本的jQuery)。很快就会回来报告!
你的意思是浏览量的发送?您可能也不应该在 window.load
上这样做,因为您希望能够尽快捕获访问,因此即使在用户有机会卸载页面之前。
@nyuen 嗯,好的。也会尝试的。
如果您只有一个 GA 在现场,我认为使用 get clientid 的快捷版本更容易:ga.getAll()[0].get('clientId');
【参考方案1】:
您应该考虑按照您网站的<head>
部分而不是$(document).ready
中的建议加载GA 库。这样一来,分析跟踪就可以最快地开始跟踪用户参与度。此外,如果您在 DOM 准备好或页面完全加载后加载分析,那么您可能会错过一些指标,例如,用户登陆您的页面,然后在分析库之前导航离开有机会捕获他们的数据。
【讨论】:
谢谢,成功了!但我有一个问题。我听说 JS 本质上是异步的,这(对我来说)意味着它不会等待 analytics.js 加载。因此,我担心后面的代码会在文件完全加载之前执行。你对此有何看法? 您可以将hitCallback
添加到您的 GA 点击(事件、网页浏览)中,这样您调用的函数将在发送 GA 点击后立即执行。你可以在这里阅读更多相关信息:developers.google.com/analytics/devguides/collection/…以上是关于ClientId 没有被捕获的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET DataGrid ClientID 值返回 null
如何在没有 oauth 但使用 angular 和 dotnet 自定义实现的情况下安全地发送 clientid 和 clientsecret