好好的 Google,必须折腾一番才能好好的用起来。Google 搜索如此,Google Analytics 肯定也不例外(网上据说 Google Analytics 没有被屏蔽)。 Google Analytics 支持服务端发送统计信息(via:Jerry Qu),而通过服务端统计可以解决 Google Analytics 连接缓慢问题,提高页面打开速度。
Google Analytics 服务端发送统计信息是通过「用户 <==> 博客/网站服务器 <==> Google Analytics 服务器」这样的方式来通信,而不是通常的「用户 <==> Google Analytics 服务器」,而且使用了非阻塞的方式请求(需要 fastcgi)。
下面是代码:
首先是 js 代码,添加到需要追踪的每个页面,也可以集成到主题的 js 文件。
//Google Analytics 异步请求(服务端请求) function ga(){!function(e,n,o){var t=e.screen,a=encodeURIComponent,r=["dt="+a(n.title),"dr="+a(n.referrer),"ul="+(o.language||o.browserLanguage),"sd="+t.colorDepth+"-bit","sr="+t.width+"x"+t.height,"vp="+e.innerWidth+"x"+e.innerHeight,"z="+ +new Date],i="?"+r.join("&");e.__beacon_img=new Image,e.__beacon_img.src="/analytics.php"+i}(window,document,navigator,location);}if (window.addEventListener)window.addEventListener("load",ga,false);else if (window.attachEvent)window.attachEvent("onload",ga);else window.onload=ga;
如果 WordPress 主题样式文件名字为 style.css,可以将 analytics.php 放至与 style.css 相同目录下,然后使用下面代码,会自动获取到 analytics.php 路径。
//Google Analytics 异步请求(服务端请求)https://stneng.com/google-analytics-异步请求(服务端请求)/ function themeurl(){ //https://zww.me/archives/25376 - js获取WordPress主题目录函数 var i=0,got=-1,url,len=document.getElementsByTagName('link').length; while(i<=len && got==-1){ url=document.getElementsByTagName('link')[i].href; got=url.indexOf('/style.css'); i++; } return url.replace(/style(.*)/,''); }; function ga(){!function(e,n,o){var t=e.screen,a=encodeURIComponent,r=["dt="+a(n.title),"dr="+a(n.referrer),"ul="+(o.language||o.browserLanguage),"sd="+t.colorDepth+"-bit","sr="+t.width+"x"+t.height,"vp="+e.innerWidth+"x"+e.innerHeight,"z="+ +new Date],i="?"+r.join("&");e.__beacon_img=new Image,e.__beacon_img.src= themeurl() + "analytics.php"+i}(window,document,navigator,location);}if (window.addEventListener)window.addEventListener("load",ga,false);else if (window.attachEvent)window.attachEvent("onload",ga);else window.onload=ga;
然后是 PHP 代码,下面代码保存为 analytics.php,并放至网站根目录。当然,也可以放至主题目录下,但是上面 js 代码中的 /analytics.php 需要补全完整路径。比如:https://xxx.com/wp-content/themes/xxx/js/analytics.php
<?php $tid = 'UA-xxx-Y'; //Your Google Analytics tid , like UA-XXXX-Y $check_referer_domain = false; $domain = 'xxx.com'; //If open the domain check set your domain here if (empty($_SERVER['HTTP_REFERER']) || empty($_SERVER['HTTP_USER_AGENT'])){ echo 'error'; die(); } if ($check_referer_domain){ $info = parse_url($_SERVER['HTTP_REFERER']); $local = isset($info['host']) ? $info['host'] : ''; if ($local!=$domain){ echo 'error'; die(); } } function create_uuid(){ $str = md5(uniqid(mt_rand(), true)); $uuid = substr($str,0,8) . '-'; $uuid .= substr($str,8,4) . '-'; $uuid .= substr($str,12,4) . '-'; $uuid .= substr($str,16,4) . '-'; $uuid .= substr($str,20,12); return $uuid; } if (!isset($_COOKIE["uuid"])) { $uuid=create_uuid(); setcookie("uuid", $uuid , time()+368400000); }else{ $uuid=$_COOKIE["uuid"]; } if (function_exists("fastcgi_finish_request")) { fastcgi_finish_request(); } $url='v=1&t=pageview&'; $url.='tid='.$tid.'&'; $url.='cid='.$uuid.'&'; $url.='dl='.rawurlencode(rawurldecode($_SERVER['HTTP_REFERER'])).'&'; $url.='uip='.rawurlencode(rawurldecode($_SERVER['REMOTE_ADDR'])).'&'; $url.='ua='.rawurlencode(rawurldecode($_SERVER['HTTP_USER_AGENT'])).'&'; $url.='dt='.rawurlencode(rawurldecode($_GET['dt'])).'&'; $url.='dr='.rawurlencode(rawurldecode($_GET['dr'])).'&'; $url.='ul='.rawurlencode(rawurldecode($_GET['ul'])).'&'; $url.='sd='.rawurlencode(rawurldecode($_GET['sd'])).'&'; $url.='sr='.rawurlencode(rawurldecode($_GET['sr'])).'&'; $url.='vp='.rawurlencode(rawurldecode($_GET['vp'])).'&'; $url.='z='.$_GET['z']; $url='https://www.google-analytics.com/collect?'.$url; $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_exec($ch); curl_close($ch);
如无意外,Ctrl+F5 就能看到效果。