Google Analytics(分析)只需将其源代码放在我的网站上,即可自动跟踪我以前需要的所有内容(网页浏览量,唯一身份访问者)。
但是现在,我需要跟踪事件,唯一的方法是在服务器端执行此操作。每当任何用户执行我需要跟踪的特定操作时,服务器都会将数据发布到Google以跟踪信息,如下所述:
https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#event
它确实非常完美,但是,自从我意识到,我现在收到了很多来自西班牙的访问,使来自美国的访问量增加了一倍。在我实施事件跟踪之前,西班牙甚至不是前10个国家的一部分。
今天我已经意识到我的服务器在西班牙,这可能会导致问题。
如何在不将其视为综合浏览量的情况下跟踪事件?
$url = 'http://www.google-analytics.com/collect';
$data = array('v' => '1', 'tid' => 'UA-HIDDEN-1', 'cid' => $_SERVER["REMOTE_ADDR"], 'ni' => '1', 't' => 'event', 'ec' => '', 'ea' => 'JUMP', 'el' => '');
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
非常感谢!!
答案 0 :(得分:1)
您正在将IP地址作为客户端ID发送,这是错误的。首先,客户端ID应为to be an UUID。其次,Google Analytics不会认识到这些事件属于现有用户。
您需要在网页上获取现有用户的现有客户端ID:
ga(function(tracker) {
var clientId = tracker.get('clientId');
});
然后将其发送回服务器并在您的请求中使用它(1)。目前GA无法分配正确的地理信息,因为事件不属于发起事件的用户的会话(这很可能也会影响其他一些指标)。
(1)你也可以在PHP中阅读GA cookie,但Google建议不要使用它,因为cookie格式可能会更改,恕不另行通知。即使cookie格式发生变化,上面的脚本也会始终返回正确的客户端ID。
更新:我已经阅读了更多文档,虽然我的答案似乎仍然有些相关,但实际用例可能是错误的 - Geo由IP决定,服务器端脚本仍将发送服务器IP。所以很可能(还没有完成科学)这看起来像一个有两个设备而不是一个访客的访客。
更新2:显然现在可以将用户IP地址作为参数包含在内,因此这个答案可能不再相关。
Here is a techopad presentation about mixing UA client- and serverside,也许这有帮助。
答案 1 :(得分:0)
事件本身不是网页浏览。请参阅:Event Tracking
是否有特定原因需要从正常的ga.js客户端代码跟踪事件服务器端和网页浏览量?
如果您不知道这一点,您可以轻松地从客户端跟踪事件:
<a href="#" onClick="_gaq.push(['_trackEvent', 'Videos', 'Play', 'Baby\'s First Birthday']);">Click Link to Track Event</a>
假设您需要在服务器端保留事件和综合浏览量:
<?php
//Put SERVER_ADDR into a var
$request_ip = $_SERVER['REMOTE_ADDR'];
// Put any server IPs you need to filter out below in an array
$localhosts = array('127.0.0.1','192.168.15.1','10.1.10.1');
// Use this later
$url = 'http://www.google-analytics.com/collect';
现在,弄清楚如何处理REMOTE_ADDR检查它是否在上面的列表中。然后构建一个类型数组来发送GA(事件,综合浏览量)
$actions = array();
// Note that the values are arbitrary and will let you do what you need.
if(in_array($request_ip)){
//Only track event, or track pageview differently, or track two events.
$handle_myServer = true;
$actions = ('event');
} else {
// Track everyone else
$handle_myServer = false;
$actions = ('event','pageview','mySpecialPageview','mySpecialEvent');
}
最后,我们已经构建了一个可以在流控制中使用的事件列表,其中包含现有的网页浏览,用户时间,事件等代码。具有创造性!
foreach($actions as $action){
$data = null; $options=null;
if($handle_myServer){
$someFlagForGA = 'RequestFromSpainServer';
}
if($action == 'event'){
$data = array('v' => '1'
, 'tid' => 'UA-HIDDEN-1',
,'cid' => $request_ip
,'ni' => '1'
, 't' => 'event'
, 'ec' => $someFlagForGA,
,'ea' => 'JUMP', 'el' => ''
);
} elseif($action == 'pageview'){
$data = array('v' => '1', 'tid' => 'UA-HIDDEN-1'
, 't' => 'pageview'
, 'dh'=> 'yourGAenabledDomainHere.com'
, 'dp'=> 'ViewedPage.html'
, 'dt'=> 'homepage'.' SERVER VISITED '.$someFlagForGA
);
} else {
// Do whatever else
}
// Would be better to do below with a single function
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
) ,$data);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context) or die('Error!!');
}
?>