在大型網(wǎng)站以及高流量網(wǎng)站中,,數(shù)據(jù)分析無疑是非常重要的一個環(huán)節(jié),,通過數(shù)據(jù)分析,,我們可以了解到網(wǎng)站的流量、流量來源,、哪些頁面訪問最高,、哪些頁面需要提升,哪些回頭用戶,,哪些用戶瀏覽之后沒有轉(zhuǎn)換成目標(biāo)用戶,,轉(zhuǎn)換的目標(biāo)用戶是通過那些頁面進入交易頁面的、等等,。對于任何一個商業(yè)網(wǎng)站,,這些數(shù)據(jù)都非常重要,不但對于網(wǎng)站的用戶體驗,、搜索引擎優(yōu)化(SEO)有很大幫助,,并且對于網(wǎng)站的用戶和收入都非常重要。在眾多的免費流量統(tǒng)計軟件中,,Google Analytics (谷歌分析)無疑是相當(dāng)優(yōu)秀又易用的一款,。因此,我們在這里打算開始一系列Google Analytics的相關(guān)經(jīng)驗總結(jié),,以供大家參考,。
Google Analytics的工作原理
首先,我們來看一下Google Analytics的基本工作原理,。Google Analytics通過在網(wǎng)頁中嵌入一段GA的JS代碼,,然后這段GA的JS代碼會收集相關(guān)信息發(fā)送到Google Analytics的服務(wù)器以完成數(shù)據(jù)統(tǒng)計。
在頁面中,,如果調(diào)用了_trackPageview函數(shù),,GA就會向Google的服務(wù)器發(fā)送統(tǒng)計信息,這個是如何實現(xiàn)的呢,?
因為,,我們知道跨域的AJAX請求是受限制的,GA通過向Google服務(wù)器發(fā)起一張1像素的gif圖片來發(fā)送相關(guān)的信息給Google的服務(wù)器,。
如圖所示:
主要參數(shù)解釋:
- utmac:GA賬號ID
- utmcc:當(dāng)前頁面GA所需的所有Cookie值,,這個很關(guān)鍵。
- utmcs: 瀏覽器的編碼
- utmdt: 頁面的標(biāo)題
- utmn: gif的隨機ID,,以免圖片緩存,。
- utmr: 頁面的referURL
此外還有一些其他的電子商務(wù)相關(guān)的參數(shù)等。
不只一張圖片
GA并不只是發(fā)送一張gif請求,,有些時候GA會發(fā)送多張gif請求,,如下圖所示,我們執(zhí)行了一個電子商務(wù)的track,,通過Firebug觀察,,GA一共發(fā)送了4個請求,。
Google Analytics代碼的基本設(shè)置
Google Analytics目前分為異步版本和非異步版本,我們推薦最好使用異步版本的代碼,。
傳統(tǒng)代碼(非異步)
<script type="text/javascript">// <![CDATA[ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); // ]]></script><script type="text/javascript">// <![CDATA[ try{ var pageTracker = _gat._getTracker("UA-xxxxxx-x"); pageTracker._trackPageview(); } catch(err) {} // ]]></script> |
傳統(tǒng)代碼中,,pageTracker是GA追蹤代碼的主要對象,如果我們見到pageTracker就可以認(rèn)定它是非異步的傳統(tǒng)GA代碼,。
異步代碼
var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); |
異步代碼中,,_gaq是GA用于追蹤的主要對象,_gaq在剛開始是一個javascript數(shù)組,,在GA的完整的js加載之后_gaq就成為了一個GA的完整實例,。
_gat 對象
在GA中,有一個全局對象_gat,,官方的GA文檔中描述,,_gat應(yīng)該僅僅用于創(chuàng)建跟蹤對象,而不應(yīng)該用它來做其他的追蹤,。因此,,我們應(yīng)該通過_gaq的push方法來追蹤其他任何操作。
但是,,這里有一點需要注意,,通常情況下我們會把GA的js代碼放在頁面的末尾,如果我們需要在頁面加載的時候就用如下代碼追蹤一個用戶動作(如:電子商務(wù)交易),,
var _gaq = _gaq || [] ; _gaq.push(['_addTrans', txID, // order ID - required 'Acme Clothing', // affiliation or store name '11.99', // total - required '1.29', // tax '5', // shipping 'San Jose', // city 'California', // state or province 'USA' // country ]); _gaq.push(['_addItem', txID, // order ID - required 'DD44', // SKU/code - required 'T-Shirt', // product name 'Green Medium', // category or variation '11.99', // unit price - required '1' // quantity - required ]); _gaq.push(['_trackTrans']); |
上面的代碼不會起作用,,原因是調(diào)用_trakTrans前必須先調(diào)用_trackPageview。因此,,最佳的實踐是把GA的追蹤代碼和GA的JS加載代碼分開,。
把這部分放在頂部:
// <![CDATA[ var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-XXXXX-X']); _gaq.push(['_trackPageview']); // ]] |
把JS的加載放在頁面的尾部:
(function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); |
這樣,在頁面的HTML中,,如果調(diào)用需要調(diào)用任何的GA函數(shù),都不會有任何問題,。
在Drupal中有一個Google Analytics的模塊,,但是該模塊沒有把兩個代碼分開,所以我們建議還是手動修改一下這個模塊,,或者通過手動加載Google Analytics代碼到頁面中,,這樣能更好的發(fā)揮GA的異步追蹤的特性。
關(guān)于異步代碼加載位置,,請參考博文:正確使用 Google 統(tǒng)計代碼的異步加載特性。
Google Analytics的其他高級特性會在后續(xù)文章中陸續(xù)討論,。
聲明: 本站所有文章歡迎轉(zhuǎn)載,,所有文章未說明,,均屬于原創(chuàng),轉(zhuǎn)載均請注明出處,。
本文有效鏈接: http://www./2012/04/google-analytics-mechanism/
版權(quán)所有: Drupal與高性能網(wǎng)站架構(gòu) http://www.