谷歌分析

谷歌分析

问题描述:

发送文件下载事件从服务器下载链接通过电子邮件发给客户的谷歌分析

你好,
请找到你的产品在这里:https://www.example.com/files/yourfile.zip

我d想要在Google Analytics中跟踪此下载,作为Goal转换。

不幸的是,当用户点击链接时,文件是由网络服务器直接发送的,而无需通过.html页面。

如何跟踪Google Analytics内的这种直接文件下载?

  1. 我应该“在中间的”添加一个虚拟的HTML页面,会使用analytics.js跟踪代码段,并发送一个下载事件GA与ga.send(...),然后重定向到实际的文件后500毫秒setTimeout(redirect, 500) ?它真的是一个干净和安全的解决方案吗?我看到很多小小的潜在问题:500毫秒好吗?应该使用什么样的重定向?另外,禁用JS的用户永远不会得到他的文件......或者如果使用<noscript>,则无法记录目标转换。

  2. 有没有办法让Apache(向服务端提供yourfile.zip服务的人)或PHP在发送此文件时向GoogleAnalytics发送跟踪事件?

  3. 另一种解决方案?

似乎解决方案2将具有100%可靠的优点,无论客户端是否启用了JS。

但另一方面,我不想使用非常少的二手黑客。这种常见情况的通常解决方案是什么?

谷歌分析实际上有一个从任意来源发送分析数据的协议。看到这里:https://developers.google.com/analytics/devguides/collection/protocol/v1/

因此,让您的网络服务器发送一个分析事件给谷歌并不像看起来那么可笑。我不确定是否可以直接钩入Apache来生成这些事件。不过,我确实看到至少有两种解决方案。

1)将所有下载重定向到发送数据并可以生成所需分析事件的服务器端脚本。
2)解析服务器日志并从中生成分析事件。用于解决方案1 ​​

编辑示例:
一定要确保有之前或之后的标签,因为这将是发送给客户端的实际反应的一部分没有空格。

的download.php:

<?php 
    // Read ?file=xxx URL parameter 
    $requestedFile = $_GET["file"]; 

    // Read Google Analytics cookie 
    $rawCookie = $_COOKIE["_ga"]; 
    $splitCookie = explode('.', $rawCookie); 
    $trackingId = $splitCookie[2] . '.' . $splitCookie[3]; 

    // Create Google Analytics request data (see here https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide) 
    $data = array('v' => 1, 
        'tid' => 'UA-XXXXX-Y', 
        'cid' => $trackingId, 
        't' => 'event', 
        'ec' => 'download', 
        'ea' => 'download', 
        'el' => $requestedFile); 

    // Create the request options 
    $options = array(
     'http' => array(
      'method' => 'POST', 
      'content' => http_build_query($data) 
     ) 
    ); 

    $context = stream_context_create($options); 

    // Send GA request 
    $result = file_get_contents('https://www.google-analytics.com/collect', false, $context); 

    // GA request failed 
    if($result === FALSE) { /* Error */ } 

    // Requested file does not exist 
    if(!file_exists($requestedFile)) { /* Error */ } 

    // Set response headers for binary data 
    header('Content-Type: application/octet-stream'); 
    header('Content-Length: ' . filesize($requestedFile)); 

    // Open the requested file 
    $fileHandle = fopen($requestedFile, 'r'); 

    // Write the requested file to stdout (which is what the client receives) 
    print fread($fileHandle, filesize($requestedFile)); 
    flush(); 

    // Close the requested file again 
    fclose($fileHandle); 

    exit; 
?> 

。htaccess的/ mod_rewrite的规则:

RewriteEngine on 
RewriteUrl ^/download/(.*)$ download.php?file=$1 [L] 

不是它一直年龄,因为我写我的最后一个PHP代码,我没有测试这一点。但它应该给如何实现选项1)

编辑2:如果您将跟踪请求发送到www.google-analytics.com/debug/collect,您将收到一些验证信息,告诉您是否您的请求是否有效(但它不会跟踪事件)。

编辑3: 好了,所以我与使用analytics.js的页面进行检查。该脚本设置了以下Cookie:

_ga=GA1.3.1788966449.1501761573 
_gid=GA1.3.1010429060.1501761573 

后来在收集请求它设置

cid:1788966449.1501761573 
_gid:1010429060.1501761573 

所以好像你需要做的与你在_ga饼干查找有点字符串分割。 (我已经更新上述代码)

EDIT 4:如果任何人的疑惑,这与上面提到的Cookie值在analytics.js脚本生成该请求。

GET https://www.google-analytics.com/collect?v=1&_v=j56&a=1178408574&t=pageview&_s=1&dl=https%3A%2F%2Fdevelopers.google.com%2Fanalytics%2Fdevguides%2Fcollection%2Fanalyticsjs%2Fcommand-queue-reference&ul=de&de=UTF-8&dt=The%20ga%20Command%20Queue%20Reference%20%C2%A0%7C%C2%A0%20Analytics%20for%20Web%20(analytics.js)%20%C2%A0%7C%C2%A0%20Google%20Developers&sd=24-bit&sr=1920x1200&vp=1899x1072&je=0&_u=QDCAAAIhI~&jid=&gjid=&cid=1788966449.1501761573&tid=UA-41425441-2&_gid=1010429060.1501761573&z=1116872044 
+0

感谢。我目前正在解析服务器日志,但这很难手动提取信息。然后,将这些信息发送给GA更加困难。要有一个完整的自动化解决方案看起来很复杂(脚本从服务器日志+ GA API中提取信息,将这些数据发送到GA +'cron'作业等)。我想应该有一个更简单的解决方案,因为*这是一个非常普遍的情况,想跟踪网站上的下载?*非程序员博客谁想跟踪他们给的免费PDF下载? – Basj

+0

1)听起来不错。你可以提供更多的信息,它将如何工作? – Basj

+0

Apache提供了mod_rewrite,它允许在客户端没有注意到的情况下重写服务器上的URL。所以你可以把/downloads/cool.zip改写成/download.php?file=cool.zip。然后,PHP脚本可以读取文件参数,与Google Analytics交谈并发送用户请求的文件。 或者,而不是给直接下载链接到你的用户,你可以发送出/download.php?file=something链接这将不需要任何服务器端URL重写。 –