查看文章 |
一、Google Analytics(Google分析)使用技巧 ----出自[月光博客] 原文地址:http://www.williamlong.info/archives/816.html ![]() Google Analytics(Google分析)是Google的一款免费的网站分析服务,自从其诞生以来, 即广受好评。Google Analytics功能非常强大,只要在网站的页面上加入一段代码,就可以提供的丰富详尽的图表式报告。今天,我将总结一下加入代码的一些技巧,使用不同 格式的urchinTracker代码,可以跟踪网站上一些特殊事件(例如不会产生综合浏览量的事件、JavaScript事件、文件下载、出站链接 等),还可以跟踪制定属性的事件(例如Adsense、完整反向链接等)。当然,阅读这些技巧前请先阅读“Google分析师帮助中心”的主要内容。(后记:部分技巧在最新版本的Google Analytics中已经无法使用) 一、统计非HTML的文件点击 在网页文件中跟踪某一个链接,可以通过在链接 <a> 标记中添加onClick属性来实现,实例如下: <a href="http://www.williamlong.info/rss.xml" _fcksavedurl=""http://www.williamlong.info/rss.xml"" onClick="javascript:urchinTracker ('/rss.xml'); "> 注意,使用这个属性,必须将 Analytics跟踪代码放在HTML代码前面,最好<body>的下面。 二、跟踪Adwords Google Analytics官方已经直接支持跟踪Adwords,详细步骤请参看“如何将 Google Analytics(分析)帐户链接到 AdWords 帐户?”。 另外,vdgraaf也提供了一个手动修改代码的方法,也可以实现同样功能,修改的例子是: _uacct = "**-******-*"; // your urchin code generated by Google Analytics if( document.referrer ) 然后在“内容优化”-“内容效果”-“内容细目”里查看目录query的信息,好可以将其内容与“优化市场营销”-“搜索引擎营销”-“按点击付费与自然转化”-Google比较一下Adwords数据。 三、跟踪Adsense点击 我们以前介绍过的Adsense追踪软件只是将用户点击记录下来,并不具备统计功能,如果我们想要对以往的广告点击进行统计,那么可以直接利用Google Analytics来实现统计功能。 实现的大致方法是: 在Google的Adsense广告下面增加如下语句 <script type="text/javascript"> 修改好了以后,请大家不要点击Google广告进行测试,那样会被Google锁定帐户的,大家只要慢慢等待Google Analytics的统计信息即可。 另外seobook也介绍了一个方法,原理是基本类似的。 四、跟踪所有点出链接 使用下面语句可以跟踪所有点出链接。 window.onload = setAdsLinks; function setAdsLinks() } 注意,使用这个代码需要将Google Analytics的统计代码放在页面的最前端,另外这种统计有一个副作用,就是如果网页的超级链接非常多的话,这些语句会影响浏览器的性能,甚至引起“假死”的状态。 五、显示完整的反向链接 统计来源的时候,Google Analytics只显示域名信息,我们可以通过修改统计代码,实现Google Analytics显示完整的反向链接 _uacct = "**-******-*"; // 这些是Google Analytics产生的代码 //用下面的代码替换原有的代码。 六、不修改代码显示完整的反向链接 Google官方提供了一个不修改代码也可以显示完整来源的方法,就是在“优化市场营销”-“访问者群体细分效果”-“造访来源”,选中来源地址左边的图标,点“跨群体效果”,再点“内容”即可返回来源具体静态URL的数据,这个方法用于静态地址的来源,动态地址(例如搜索结果)用这个会不好用。 二、urchin.js作用以及urchin.js注释 常看到代码http://www.google-analytics.com/urchin.js,这个JS是GOOGLE的analytics 分析代码 google analytics 的功能是非常强大的,强烈推荐使用网上找的: //定义全局量 var ur = ""; //来源地址 var urp = new Array(); //来源参数名称 var urpv = new Array(); //来源参数值 var arrayCount = 0; //参数数目 pageOpen = new Date(); //进入页面的时间 var reqURL = "http://192.168.0.219/Analytics/"; //接收数据的页面地址 var GUID = Math.round(Math.random()*2147483647); //用户唯一随机数 var title = document.title; //网页标题 var uexp = pageOpen.getTime() + ( 1000 * 60 * 60 * 24 * 30 ); //设置cookie过期时间 既回访用户的限定 var rtu = "false"; //指示用户是否回访用户 //浏览器特征信息 var brower = new Array(); /**//* * brower[0] 浏览器类型 * brower[1] 浏览器版本 * brower[2] 浏览器java是否打开 1开-1关 * brower[3] 浏览器flash版本 * brower[4] 浏览器操作系统 * brower[5] 浏览器分辨率 * brower[6] 浏览器色深 * brower[7] 浏览器语言 * brower[8] 浏览器插件 */ var sEn=new Array(); //搜索引擎的名称 var keyWord=new Array(); //关键字传输形式 sEn[0]="google"; keyWord[0]="q"; sEn[1]="yahoo"; keyWord[1]="p"; sEn[2]="msn"; keyWord[2]="q"; sEn[3]="aol"; keyWord[3]="query"; sEn[4]="lycos"; keyWord[4]="query"; sEn[5]="ask"; keyWord[5]="q"; sEn[6]="altavista"; keyWord[6]="q"; sEn[7]="search"; keyWord[7]="q"; sEn[8]="netscape"; keyWord[8]="query"; sEn[9]="earthlink"; keyWord[9]="q"; sEn[10]="cnn"; keyWord[10]="query"; sEn[11]="looksmart"; keyWord[11]="key"; sEn[12]="about"; keyWord[12]="terms"; sEn[13]="excite"; keyWord[13]="qkw"; sEn[14]="mamma"; keyWord[14]="query"; sEn[15]="alltheweb"; keyWord[15]="q"; sEn[16]="gigablast"; keyWord[16]="q"; sEn[17]="voila"; keyWord[17]="kw"; sEn[18]="virgilio"; keyWord[18]="qs"; sEn[19]="teoma"; keyWord[19]="q"; sEn[20]="baidu"; keyWord[20]="wd"; //test data----------------------------//////////////////////////////-----------/-/-/-/-/-/-/-/-/-/-/- sEn[21]="localhost"; keyWord[21]="q"; 这里面定义一些全局的量,其中upr,urpv为来源参数和指,比如来源为http://www.google.com/?p=BlackSoul&q=javascript,则urp[0]="p",urp[1]="q" 相对应的urpv[0]="BlackSoul",urpv[1]="javascript". 但是最终传输的时候是以分隔符的形式传递给服务器端的. GUID为随机数,google是这么做的.当初没有想通为什么要保存一个随机数,后来分析数据的才明白过来.为了验证用户的唯一性. 以下是函数处理: //-----------------------------比较url,如果为搜索引擎则保存关键字------------- function getKeyword(url) { var hostname; if(url.indexOf(".") == -1) {hostname = url;} else {hostname = url.substring(url.indexOf("."),url.lastIndexOf("."));} for(var i = 0; i < sEn.length; i++) { if(hostname == sEn) { for(var j = 0; j < urp.length; j ++) { if(urp[j] == keyWord) { return urpv[j]; } } } } return ""; } //将URL转换为地址和页面参数和参数值 参数uri为页面地址 function gethn(uri) { if(!uri || uri == "") return ""; ur = uri; var sub; //带参数 if(ur.indexOf("?") != -1) { var url = ur.substring(0,ur.indexOf("?")); var para = ur.substring(ur.indexOf("?")+1,ur.length); while(para.length > 0) { if(para.indexOf("&") == -1) { urp[arrayCount] = para.substring(0,para.indexOf("=")); urpv[arrayCount] = para.substring(para.indexOf("=")+1,para.length); break; } sub = para.substring(0,para.indexOf("&")); urp[arrayCount] = sub.substring(0,sub.indexOf("=")); urpv[arrayCount] = sub.substring(sub.indexOf("=")+1,sub.length); para = para.substring(para.indexOf("&")+1,para.length); arrayCount ++; } return url; } else return ur; } //----------------------------获得域名--------------------------------------------- function getHostName(url) { url = url.substring(url.indexOf('://')+3,url.length); url = url.substring(0,url.indexOf("/")); return url; } //---------------------------获得flash版本------------------------------------------ function getFlash() { var f="-1",n=navigator; if (n.plugins && n.plugins.length) { for (var ii=0;ii<n.plugins.length;ii++) { if (n.plugins[ii].name.indexOf('Shockwave Flash')!=-1) { f=n.plugins[ii].description.split('Shockwave Flash ')[1]; break; } } } else if (window.ActiveXObject) { for (var ii=10;ii>=2;ii--) { try { var fl=eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash."+ii+"');"); if (fl) { f=ii + '.0'; break; } } catch(e) {} } } if(f == "-1") return f; else return f.substring(0,f.indexOf(".")+2); } //--------------------------设置异步传输----------------------------------- function createXMLHttpRequest() { if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHttp"); } } 以上的方法可以取得一些基本信息.但是关键的问题还是设置用户cookie,判断回访,判断最后一次访问时间,并设置其GUID.这里看了很久没有发现google是怎么做的...于是自己想了一些笨办法.见一下代码: //浏览器特征信息 function BrowserInfo() { brower[0] = navigator.appName; brower[7] = navigator.language; if(brower[0] == "Netscape") { var browerInfo = navigator.userAgent; brower[1] = browerInfo.substring(browerInfo.lastIndexOf(" ")+1,browerInfo.length); brower[0] = brower[1].substring(0,brower[1].lastIndexOf("/")); brower[1] = browerInfo.substring(browerInfo.lastIndexOf("/")+1,browerInfo.length); brower[7] = navigator.language; } else if(brower[0] == "Microsoft Internet Explorer") { brower[1] = navigator.userAgent.split(";")[1]; brower[7] = navigator.userLanguage; } brower[2] = navigator.javaEnabled()?1:-1; brower[3] = getFlash(); brower[4] = getOS(); if (self.screen) { sr=screen.width+"x"+screen.height; sc=screen.colorDepth+"-bit"; } else if (self.java) { var j=java.awt.Toolkit.getDefaultToolkit(); var s=j.getScreenSize(); sr=s.width+"x"+s.height; } //分辨率 brower[5] = sr; //色深 brower[6] = sc; //插件列表 brower[8] = getPlugin(); } //-----------------------获得当前地址----------------------------- function getHref() { return document.location.href; } //-----------------------cookie操作开始------------------------------------- ---------------------------------------------------------------------------- function setCookie(name, value) //设定Cookie值 { var expdate = new Date(); var argv = setCookie.arguments; var argc = setCookie.arguments.length; var expires = 15768000; var path = (argc > 3) ? argv[3] : null; var domain = (argc > 4) ? argv[4] : null; var secure = (argc > 5) ? argv[5] : false; if(expires!=null) { //设置过期时间24小时 expdate.setTime(uexp); document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure=" : ""); } } function delCookie(name) //删除Cookie { var exp = new Date(); exp.setTime (exp.getTime() - 1); var cval = getCookie (name); document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString(); } //获得Cookie的值 function getCookie(fname) { var name,value; var cookies = new Object(); var beginning,middle,end; beginning = 0; while(beginning < document.cookie.length) { middle = document.cookie.indexOf("=",beginning); end = document.cookie.indexOf(";",beginning); if(end == -1) { end = document.cookie.length; } if((middle > end) || (middle == -1)) { name = document.cookie.substring(beginning,end); value = ""; } else { name = document.cookie.substring(beginning,middle); value = document.cookie.substring(middle+1,end); } if(name == fname) { return unescape(value); } beginning = end + 2; } } //-----获取GUID的cookie是否存在获得--------------------------------------------------- function getCookieValue() { var guid = getCookie("GUID"); if(guid != null) { return guid; } else { return "noCookie"; } } //---------------------获得注册用户cookie--------------------------------------------- function getRegUserCookie() { return ; } //-----------------------------cookie 操作完毕-------------------------------------------------------------------- ---------------------------------------- //---------------------------得操作系统--------------------------- function getOS() { var OSlist = new Array(); var OSName = new Array(); OSlist[0] = " Windows4.0"; OSName[0] = "Windows 95"; OSlist[1] = " Windows 98"; OSName[1] = "Windows 98"; OSlist[2] = " Windows NT 5.0"; OSName[2] = "Windows 2000"; OSlist[3] = " Windows NT 5.1"; OSName[3] = "Windows XP"; OSlist[4] = " Windows NT 5.2"; OSName[4] = "Windows Server 2003"; var ua = navigator.userAgent.split(";"); for(var i = 0; i < OSlist.length; i++) { if(ua[2] == OSlist) return OSName; } return ua[2]; } //获得插件 function getPlugin() { var plugin = ""; var ua = navigator.userAgent.split(";"); if(ua.length < 4) return ""; for(var i = 4; i < ua.length; i++) { plugin += ua + ","; } return plugin.substring(0,plugin.length-2); } 需要说明的一点是GetResidentTime这个函数,google采用了img.load的方法加载了接收处理信息页面的,需要再服务器端配置将后缀为.gif或你所取的其他形式的文件使用aspx的方式编译运行.因为我原来考虑的是使用xmlHttp异步调用.但是页面退出的时候有时候不执行.所以就弃用了.代码如下: function GetResidentTime() { pageClose = new Date(); minutes = (pageClose.getMinutes() - pageOpen.getMinutes()); if(minutes < 0) { minutes = minutes + 60; } seconds = (pageClose.getSeconds() - pageOpen.getSeconds()); if(seconds < 0){ seconds += 60;} time = (seconds + (minutes * 60)); //------------------------修改此处为接收链接地址 XML 异步传输------------------------------------ // var xmlHttp = createXMLHttpRequest(); // xmlHttp.open("POSt", reqURL + firstvisit.aspx?" + StrPara(), false); // xmlHttp.send(null); //----------------------------图片形式传递------------------------------------------------------- if(isReturn() == false) { var i = new Image(1,1); i.src = reqURL + "firstVisit.aspx?" + StrPara() + "&GUID=" + GUID; i.onload = function() {LoadVoid();} //进入页面的信息 if(getCookieValue("GUID") == "noCookie"){return ;} i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + time; i.onload=function() {LoadVoid();} } else { var i=new Image(1,1); i.src = reqURL + "pageView.gif?" + pageView() + "&st=" + time; i.onload=function() {LoadVoid();} } } 最后就是调用了.我使用了window.onunload = GetResidentTime 传递的参数大家可以打印出来看一下.应该可以明白其意思. 剩下的就是服务器端的处理了,在服务器端处理其实相当简单.取得request的值,验证并保存入数据库.现在有了数据,分析的事情就由用户按照自己的要求来处理了..补充一句,ip地址是由服务器端来取得保存的. 使用的时候记得一定将其放到服务器端,然后使用<javascript language="javascript" type="text/javascript" src=服务器地址+路径+"statistics.js"> </script> (把文件名改成statistics.js方便记忆) 这里附上完整的代码(加上说明了)下载在附件里面. 该例子我在IE,firefox,netscape下面测试都很正常.搞了一个月,总算有所成就了.但是还有很多需要改进的地方,希望做过的,感兴趣的朋友多多指点交流. |


