查看文章
 
Google Analytics(Google分析,urchin.js)使用技巧
2008-08-15 23:03
一、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 )
{
if( document.referrer.indexOf( 'google' ) != -1 )
{
   var urlPattern = /(\?|&)q=([^&]*)/;
   var aMatches = urlPattern.exec( document.referrer );
   if( aMatches != null )
   {
    urchinTracker( '/query/' + aMatches[2] );
   }
   else
   {
    urchinTracker();
   }
}
else
{
   urchinTracker();
}
}
else
{
urchinTracker();
}

  然后在“内容优化”-“内容效果”-“内容细目”里查看目录query的信息,好可以将其内容与“优化市场营销”-“搜索引擎营销”-“按点击付费与自然转化”-Google比较一下Adwords数据。

  三、跟踪Adsense点击

  我们以前介绍过的Adsense追踪软件只是将用户点击记录下来,并不具备统计功能,如果我们想要对以往的广告点击进行统计,那么可以直接利用Google Analytics来实现统计功能。

  实现的大致方法是:

  在Google的Adsense广告下面增加如下语句

  <script type="text/javascript">
function log() {
urchinTracker ('/adsense');
}
var elements2;
elements2 = document.getElementsByTagName("iframe");
for (var i = 0; i < elements2.length; i++) {
if(elements2[i].src.indexOf('googlesyndication.com') > -1) {
elements2[i].onfocus = log;
}
}
</script>

  修改好了以后,请大家不要点击Google广告进行测试,那样会被Google锁定帐户的,大家只要慢慢等待Google Analytics的统计信息即可。

  另外seobook也介绍了一个方法,原理是基本类似的。

  四、跟踪所有点出链接

  使用下面语句可以跟踪所有点出链接。

  window.onload = setAdsLinks;

  function setAdsLinks()
{
var Links = document.getElementsByTagName( 'A' );
for( var i = 0; i < Links.length; i++ )
{
   Links[i].onclick = function() {
    urchinTracker( this.href );

     }
}
}

  注意,使用这个代码需要将Google Analytics的统计代码放在页面的最前端,另外这种统计有一个副作用,就是如果网页的超级链接非常多的话,这些语句会影响浏览器的性能,甚至引起“假死”的状态。

  五、显示完整的反向链接

  统计来源的时候,Google Analytics只显示域名信息,我们可以通过修改统计代码,实现Google Analytics显示完整的反向链接

  _uacct = "**-******-*"; // 这些是Google Analytics产生的代码

  //用下面的代码替换原有的代码。
if( document.referrer )
{
urchinTracker(document.referrer);
}
else
{
urchinTracker();
}

  六、不修改代码显示完整的反向链接

  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下面测试都很正常.搞了一个月,总算有所成就了.但是还有很多需要改进的地方,希望做过的,感兴趣的朋友多多指点交流.


类别:网站开发||添加到搜藏 |分享到i贴吧|浏览(1107)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu