可能你知道这个,可能你不知道,但是你网站或app发送给Google Analytics服务器的数据大小是有一个限制的,更准确的说,就是有效载荷的大小有个最大值,简单的就是请求的主体的大小有限制。
有效载荷的最大值是8192bytes,这意味一次发送给Google Analytics的所有的参数字段加起来的大小不能超过8192个字符,超过的结果就是,Google Analytics将把这个hits丢掉,而且这个过程,没有错误提示,没有警告。这个hits根本不会被成功发送出去。如果你运行浏览器的拓展工具Google Analytics Debugger,你可以看到有效载荷大小已经超过的警示:
如果你看到这个警告,这意味这个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 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中的谷歌分析设置变量里面设置,找到更多设置>要设置的区域,新增一个设置,具体设置如下:
现在任何有这个设置的tag都会将有效载荷作为一个自定义维度增加在请求里面。
你可以在浏览器开发者工具里面“network”去确认,这个代码是通过collect请求的,点击这个请求,你可以看到包含有有效载荷的自定义维度参数:
其他一些思路:
你也可以通过重写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