2013-12-09 294 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

好吧,我的答案似乎有點不合適 - 我收錄了一些我發現的信息。很高興知道你是否正在取得進展。 –

相關問題