更新:Google已经发布了
服务器端GTM,可以通过自定义域代理请求和脚本。在我能想象到的大多数用例中,这将是比DIY代理更优越的解决方案。
如我在评论中指出的那样,utm.gif 已不再使用。Google Analytics 已完全转向测量协议,并且数据现在发送到 google-analytics.com/collect 上的测量协议终端。实际上,这仍会返回一个透明像素,因为使用参数调用图像是跨域传输信息的一种可行方式。
现在,您可以使用测量协议来实现自己的 Google Analytics 追踪器。
对于
引用自己:
每个调用至少包括要发送数据的账户ID,一个客户端ID,用于将交互分组为会话(因此应该对每个访问者唯一,但不必个人识别用户),一个交互类型(页面视图、事件、时间等,某些交互类型需要额外的参数)以及您正在使用的协议版本(目前只有一个版本)。
因此,记录页面浏览量的最基本示例如下:
www.google-analytics.com/collect/v=1&tid=UA-XXXXY&cid=555&t=pageview&dp=%2Fmypage
您可能希望添加用户的IP地址(将自动匿名化)和用户代理。
但是,听起来您更喜欢使用标准分析代码收集数据,并通过自己的服务器中继跟踪调用。虽然我没有在生产中使用以下内容,但我认为它应该可以工作。
首先,您需要获取analytics.js文件。不建议自行托管该文件,因为谷歌有时会更新代码,如果您自己托管它,则可能会错过更新。可以通过设置定期下载该文件的cron作业来解决此问题,以便始终拥有最新版本。
接下来,您需要调整GA引导函数以从您自己的服务器加载代码:
(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.myserver.com/analytics.js','ga');
现在你已经有了代码,但跟踪调用仍将被发送到分析服务器(即在您的情况下根本不会被发送)。因此,您需要通过您的服务器重新路由该调用。
为了实现这一点,Google(Universal)Analytics代码具有一个
名为“任务”的功能。任务是跟踪代码中的函数,其中跟踪调用正在被组装。
可以使用跟踪器对象的“set”函数修改任务,使用任务名称作为参数,并传递覆盖/重载任务函数的函数。
以下几乎是来自Google文档的示例(除了我省略了仍然向Google发送数据的部分 - 您此时不需要此部分):
ga('create', 'UA-XXXXX-Y', 'auto');
ga(function(tracker) {
tracker.set('sendHitTask', function(model) {
var payLoad = model.get('hitPayload');
var gifRequest = new XMLHttpRequest();
var gifPath = "/__ua.gif";
gifRequest.open('get', gifPath + '?' + payLoad, true);
gifRequest.send();
});
});
ga('send', 'pageview');
现在,这将把数据发送到名为__ua.gif的文件中,该文件位于您自己的服务器上(如果您需要跨域发送数据,您可以简单地执行var ua = new Image; ua.src = gifPath + '?' + payLoad来创建图像请求)。
sendHitTask
函数的模型参数包含(除了很多开销之外)有效负载,即包含分析数据的组装查询字符串。然后,您可以使_ua.gif成为一个脚本,代理请求到google-analytics.com/collect。
此时,用户代理将是您的脚本,IP地址将是您的服务器的IP地址,因此您需要包括&uip(用户IP覆盖)和&ua(用户代理覆盖)参数(
https://groups.google.com/forum/#!msg/google-analytics-measurement-protocol/8TAp7_I1uTk/KNjI5IGwT58J)以获取地理和技术信息。
如果你想更加冒险,你可以覆盖
buildHitTask
并尝试在那里添加额外的参数(可能会更麻烦,因为你需要从某个地方获取IP地址)。
有关其他参数,请参阅
analytics.js和
Measurement Protocol的参考文档。