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 相关的错误消息。你的评论给了我工作的方向。我将直接在&lt;script&gt; 标签中加载JS,并在window.bind("load", ... 上进行实际发送(因为他们有旧版本的jQuery)。很快就会回来报告! 你的意思是浏览量的发送?您可能也不应该在 window.load 上这样做,因为您希望能够尽快捕获访问,因此即使在用户有机会卸载页面之前。 @nyuen 嗯,好的。也会尝试的。 如果您只有一个 GA 在现场,我认为使用 get clientid 的快捷版本更容易:ga.getAll()[0].get('clientId'); 【参考方案1】:

您应该考虑按照您网站的&lt;head&gt; 部分而不是$(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

在javascript中找不到clientid

差异 ClientId - FullVisitorId

类型错误:无法读取未定义的属性“clientId”

C# asp.net 为啥ClientID和UniqueID有区别?