2013-12-09 228 views
1

只需将Google Analytics的源代码放在我的网站上,Google Analytics就会自动跟踪我以前需要的所有内容(综合浏览量,唯一访问者)。Google Analytics(分析)服务器端跟踪

但是现在,我需要跟踪事件,唯一的方法就是在服务器端执行此操作。每当任何用户就一个具体的行动,我需要跟踪,服务器数据发布到谷歌跟踪信息,如下解释:

https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#event

而且它确实工作得非常完美,但是,因为我realiced,我现在正在接受来自西班牙的很多访问,使来自美国的访问翻了一番。而在我执行事件跟踪之前,西班牙甚至还没有进入前十名的国家。

今天我已经意识到我的服务器在西班牙,这可能会导致问题。

如何跟踪事件,而不会将其视为综合浏览量?

$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

我想的标题是“谷歌Analytics(分析)服务器端跟踪”。我为这个错误感到抱歉。 – ice24

+0

看看这个:http://stackoverflow.com/q/9503329/722135(另外,我定的题目) – Babblo

+0

这https://support.google.com/analytics/answer/1034840?rd=1 – Babblo

回答

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!!'); 

    } 
?> 
+0

如果我链接到其他网站,并添加onclick方法,它会工作吗?例如:click me。我认为,当我点击链接时,浏览器会将我带到google.com,并且由于该页面已卸载,因此不会考虑该功能。我错了吗? – ice24

+0

@ ice24 - 不,你可以在外部页面加载之前抓住该事件(使用preventDefault)。如果我显示的服务器端代码对您没有用处,我将使用js代码更新此答案。 – cerd

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,也许有帮助。

+0

非常感谢您的回答。我会尝试一下! – ice24

+0

好吧,我的答案似乎有点不合适 - 我收录了一些我发现的信息。很高兴知道你是否正在取得进展。 –

相关问题