Google Analytics服务器端跟踪

时间:2013-12-09 03:35:11

标签: php google-analytics

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

非常感谢!!

2 个答案:

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

   }
?>