Bas*_*asj 4 javascript php apache google-analytics analytics.js
非常相关且有用:使用 API 服务器端将事件发送到 Google Analytics
下载链接通过电子邮件发送给客户:
您好,
请在此处找到您的产品:https : //www.example.com/files/yourfile.zip
我想在 Google Analytics 中跟踪此下载,作为Goal转化。
不幸的是,当用户点击链接时,文件直接由网络服务器传送,而不是通过 .html 页面。
如何在 Analytics 中跟踪此类直接文件下载?
我是否应该在“中间”添加一个虚拟 HTML 页面,该页面将使用analytics.js跟踪代码段并使用 将下载事件发送到 GA ga.send(...),然后在 500 毫秒后使用 重定向到实际文件setTimeout(redirect, 500)?它真的是一个干净安全的解决方案吗?我看到了许多潜在的小问题:500 毫秒可以吗?应该使用什么样的重定向?此外,禁用 JS 的用户永远不会得到他的文件……或者如果<noscript>没有使用目标转换可以记录。
有没有办法在提供yourfile.zip此文件时要求 Apache(为客户端提供服务)或 PHP 向 GoogleAnalytics 发送跟踪事件?
另一个解决方案?
无论客户端是否启用 JS,解决方案 2. 似乎都具有 100% 可靠的优势。
但另一方面,我不想使用很少使用的 hack。对于这种非常常见的情况,通常的解决方案是什么?
谷歌分析实际上有一个协议,用于从任意来源发送分析数据。请参阅此处:https : //developers.google.com/analytics/devguides/collection/protocol/v1/
因此,让您的网络服务器向 Google 发送分析事件并不像看起来那么笨拙。我不确定您是否可以直接连接到 Apache 来生成这些事件。但是,我确实看到了至少两种解决方案。
1) 将所有下载重定向到服务器端脚本,该脚本发送数据并可以生成所需的分析事件。
2) 解析服务器日志并从中生成分析事件。
解决方案 1 的编辑示例:请
确保标签前后没有空格,因为这将是发送给客户端的实际响应的一部分。
下载.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;
?>
Run Code Online (Sandbox Code Playgroud)
.htaccess/mod_rewrite 规则:
RewriteEngine on
RewriteUrl ^/download/(.*)$ download.php?file=$1 [L]
Run Code Online (Sandbox Code Playgroud)
自从我写上一个 PHP 代码以来已经有很长时间了,我没有对此进行测试。但它应该就如何实施选项 1) 给出一个很好的要点
编辑 2:如果您将跟踪请求发送到 www.google-analytics.com/debug/collect,您将收到一些验证信息,告诉您您的请求是否有效(但它不会跟踪事件)。
编辑 3:好的,所以我检查了一个使用 analytics.js 的页面。该脚本设置以下 cookie:
_ga=GA1.3.1788966449.1501761573
_gid=GA1.3.1010429060.1501761573
Run Code Online (Sandbox Code Playgroud)
稍后在它设置的收集请求中
cid:1788966449.1501761573
_gid:1010429060.1501761573
Run Code Online (Sandbox Code Playgroud)
因此,您似乎需要对 _ga cookie 中的内容进行一些字符串拆分。(我已经更新了上面的代码)
编辑 4:如果有人想知道,这是 analytics.js 脚本使用上述 cookie 值生成的请求。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |