Отправить событие загрузки файла с сервера в 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>
, преобразование цели не может быть записано.Есть ли способ попросить Apache (который обслуживает
yourfile.zip
клиенту) или PHP отправить событие отслеживания в GoogleAnalytics при подаче этого файла?Еще один решение?
Похоже, что решение 2. будет иметь преимущество в 100% надежности, независимо от того, включен ли JS у клиента или нет.
Но, с другой стороны, я не хочу использовать очень мало использованных взломов. Каково обычное решение для этой очень распространенной ситуации?
1 answers
В Google analytics фактически есть протокол для отправки аналитических данных из произвольных источников. Смотрите здесь: https://developers.google.com/analytics/devguides/collection/protocol/v1/
Таким образом, отправка вашим веб-сервером события аналитики в Google не так сложна, как может показаться. Я не уверен, что вы можете напрямую подключиться к 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
Так что, похоже, вам нужно сделать небольшое разделение строк с тем, что вы найдете в файле cookie _ga. (Я обновил приведенный выше код)
ПРАВКА 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