感谢伟大的祖国,使得好好的 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;
2018.9.14 后记:如果 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://cyhour.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 = 'cyhour.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 就能看到效果。
转自:stneng - Google Analytics 异步请求(服务端请求)
Google Analytics 去掉好久了,总是拖慢速度,这个有用么?
@灰常记忆 试试就知道。
@老头 有时间再折腾,碎觉了!
@老头 抛弃CNZZ,拥抱谷歌,用了你的方法真的很溜!
@灰常记忆 可喜可贺……
@老头 然而我还是用老方法…
@灰常记忆 没看到有旧的统计代码……
这个插件我已经删除了,现在博客上没有任何统计。
不过,maps.Google.cn和translate.Google.cn好像可以不用番茄。
@方室网志 翻译一直不用爱国,地图很少用。加个统计也挺好的啊,一年看一次也不错嘛。
看的一脸懵逼。。。
@姜辰 不至于啊,浅显易懂。
@老头 不是,是我不知道Google Analytics 究竟有啥具体的作用
@姜辰 就一网站统计工具——企业级的网站分析服务。最简单的功能就是访问量统计。
不用wp,看不懂说什么(ー_ー)!!
@老何 Google 统计并不是 wp 专属啊。
我在想怎么好多国内网站在用Google Analytics,不慢么?原来是没被墙,墙了估计大部分网站都慢的不要不要的~~
@夜枫 原本也是异步代码,对访问速度影响感觉不大,只是圈圈一直转……