将发送给Google Analytics的数据长度作为维度

Google Tag Manager Haran 7年前 (2018-04-19) 4266次浏览 2个评论

可能你知道这个,可能你不知道,但是你网站或app发送给Google Analytics服务器的数据大小是有一个限制的,更准确的说,就是有效载荷的大小有个最大值,简单的就是请求的主体的大小有限制。

有效载荷的最大值是8192bytes,这意味一次发送给Google Analytics的所有的参数字段加起来的大小不能超过8192个字符,超过的结果就是,Google Analytics将把这个hits丢掉,而且这个过程,没有错误提示,没有警告。这个hits根本不会被成功发送出去。如果你运行浏览器的拓展工具Google Analytics Debugger,你可以看到有效载荷大小已经超过的警示:
将发送给Google Analytics的数据长度作为维度
如果你看到这个警告,这意味这个hits由于超过了8192个字节而被忽略了。

需要注意的是,如果你直接通过测量协议给GA发送数据,这个大小限制对post请求的主体有效,如果是get,对整个请求的最大限额是8000bytes。

好的,在这篇文章中,我要教你的是,如果将每个hits的有效载荷大小设置成Google Analytics里面的一个自定义维度,这样你就可以知道你发送的hits是不是快接近限额了,你就可以才去一些方式去防止超过最大限额,我们将通过Google Analytics和customTask去实现。

用customTask发送hits的有效载荷长度
如果你不知道什么是customTask,你可以查看我站点关于customTask的文章,简而言之,customTask可以让你修改其他任何东西,可以在请求发送给google analytics之前就发送,可以动态给有效载荷添加信息,这个信息可以PII信息,如clientid。

customTask是通过一个自定义js变量来实现的,为了将hits的有效载荷作为一个自定义维度,你需要在GA里面的自定义维度里面创建一个新的索引,你创建完后,记下这个新维度的索引值。
将发送给Google Analytics的数据长度作为维度
然后在Google Tag Manager中创建一个自定义变量,直接按照用途来命名,如customTask-hit payload length,下面的就是你需要添加的代码:

function() {
  // Change this index to match that of the Custom Dimension you created in GA
  var customDimensionIndex = 10;
  
  return function(model) {
    
    var globalSendTaskName = '_' + model.get('trackingId') + '_sendHitTask';
    
    var originalSendHitTask = window[globalSendTaskName] = window[globalSendTaskName] || model.get('sendHitTask');
    
    model.set('sendHitTask', function(sendModel) {
      
      try {
        
        var originalHitPayload = sendModel.get('hitPayload');
        
        var hitPayload = sendModel.get('hitPayload');
        var customDimensionParameter = '&cd' + customDimensionIndex;
      
        // If hitPayload already has that Custom Dimension, note this in the console and do not overwrite the existing dimension
      
        if (hitPayload.indexOf(customDimensionParameter + '=') > -1) {
          
          console.log('<a href="https://www.ichdata.com/tag/google-analytics" title="查看更多关于Google Analytics的文章" target="_blank">Google Analytics</a> error: tried to send hit payload length in an already assigned Custom Dimension');
          originalSendHitTask(sendModel);
        
        } else {
      
        // Otherwise add the Custom Dimension to the string
        // together with the complete length of the payload
          hitPayload += customDimensionParameter + '=';
          hitPayload += (hitPayload.length + hitPayload.length.toString().length);
        
          sendModel.set('hitPayload', hitPayload, true);
          originalSendHitTask(sendModel);
        
        }
      } catch(e) {
       
        console.error('Error sending hit payload length to <a href="https://www.ichdata.com/tag/google-analytics" title="查看更多关于Google Analytics的文章" target="_blank">Google Analytics</a>');
        sendModel.set('hitPayload', originalHitPayload, true);
        originalSendHitTask(sendModel);
        
      }
    });
  };
}

为了配置这个customTask,你只需要将自定义维度的索引值变量添加自定义索引值,在这个例子中是10.

这个函数的作用是中断sendHitTask,这个发送给google analytics的请求,然就将你创建的自定义维度添加上发给Google Analytics,当在tag用到这个customTask,这个请求就会包含你所创建的自定义维度了。

添加到你的代码中,只需要在gtm中的谷歌分析设置变量里面设置,找到更多设置>要设置的区域,新增一个设置,具体设置如下:
将发送给Google Analytics的数据长度作为维度
现在任何有这个设置的tag都会将有效载荷作为一个自定义维度增加在请求里面。

你可以在浏览器开发者工具里面“network”去确认,这个代码是通过collect请求的,点击这个请求,你可以看到包含有有效载荷的自定义维度参数:
将发送给Google Analytics的数据长度作为维度

其他一些思路:
你也可以通过重写customTask,通过一些逻辑去判断长度是否要接近限额,需要注意的是,如果有效载荷超过限额,是不会被发送的,也就是这个自定义维度也就失效了。

通过添加自定义代码,你可以实现如下情况:
1、当有效载荷长度超过8192的时候,你可以选择性的丢掉一些不必要的字段,使得这个请求不会超过限额。
2、当有效载荷超过8192的时候,你可以将其他重要的的信息通过另一个hits去发送,但是你会有一个数据断开的问题。

一个典型的例子就是在增强型电商发送数据需要特别注意发送的有效载荷大小,对于很大一个购物车数据,比如有50~60件产品,那你就很有可能会超过8192比特,你可以通过统一的规则命名去减少发送数据的大小或丢弃一些不重要的字段。

你可以只要留id而丢弃其他数据,然后通过数据导入的形式去添加其他信息。

总结
那么,它看起来像customTask再次帮了我们很大的忙,这是一个非常强大的功能,我只是喜欢这个可以通过Google Analytics数据获得所有元数据。

使用另外混淆的细节来对有效载荷进行细化,这是为数据收集添加全新级别的调试机会的好方法。

hits的有效载荷大小限制是令人讨厌的,因为如果问题出现,您将不会收到警报。 Google Analytics界面无法通知您此问题,因为这些请求从未首先发送给Google Analytics。 使用此自定义维度,你可以将此信息作为自定义维度添加到有效内容中,然后事先准备好您可能很快就会达到有效载荷最大大小的可能性。

说两句:
GA的hits是有数据大小限制的,单hist和多hits的限制大小是不同的,不同的请求模式,最高限额也是不同的。
有效载荷一般是在增强型电商部署的时候是需要特别注意的,不然超过限额,数据就丢失了,结果就是GA里面的数据比自己后台的数据少。

 

来源:https://www.simoahava.com


如有疑问,可以在文章底部留言或邮件(haran.huang@ichdata.com) 我~
喜欢 (2)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 您好,很喜欢你的文章,了解了这个hit的知识,但我遇到的问题更加棘手一点,我变成了超过最大长度变成CORS错误,已经排除是网站没有设置好CORS的问题,因为其他页面是好的,只有一些特殊的页面出现了,发现原因是因为一次性上传太多了,现在我依照您的办法,设置了hit,但是发现没有用,而且即使设置到50的hit,还是有cors的错误,但是会有另外一个get请求出来了,请问您之后遇到过类似的错误吗?我的数据每条都很大,一般24条是好的,但是设置了33条就出现问题了。即使成功了,发现之后发的GA的page view也没有调用API,请问您了解这方面的知识吗?因为网站是工作上的,网址就不方便贴了
    努力学习GA的小王2020-11-03 18:09 回复 Mac OS X | Chrome 85.0.4183.121
    • Haran
      太长会发送不成功,可以用batch发送
      黄业忠2020-11-03 18:55 回复 Mac OS X | Safari浏览器 604.1