Google Analytics跨域跟踪的实现方法
大多数情况é‡åˆ°çš„是一个主域多个å域的数æ®è¿½è¸ªï¼Œæ®æˆ‘ç›®å‰æ‰€çŸ¥çš„方法如下: 对所有å域使用相åŒçš„跟踪代ç ,然åŽä½¿ç”¨è¿‡æ»¤å™¨æ¥åˆ†ç¦»æŠ¥å‘Šæ•°æ®ï¼Œè¿™æ ·æ—¢å¯ä»¥å¾—到整站数æ®ï¼Œåˆå¯ä»¥å¾—到å域的数æ®ã€‚Google Analytics很好很强大,今天æ‰æ„识到对GA的了解æ‰ä»…仅入门,还有太多需è¦è¿›ä¸€æ¥ç ”究与探索的空间,想想GA跟踪从商店到è´ç‰©è½¦çš„用户会è¯å’Œå¹¿å‘Šç³»åˆ—æ•°æ®ï¼Œç”šè‡³æ˜¯å¤§è‡´è®¡ç®—注册æµç¨‹çš„æµå¤±çŽ‡æˆ–订å•çš„æµç¨‹ï¼Œæˆ‘è¦æ¶è¡¥ä¸‹äº†ã€‚
什么是跨域跟踪?
跨域跟踪是指GA在多个域(包括å域与主域)跟踪访问者的访问行为。
为什么è¦è¿›è¡Œè·¨åŸŸè·Ÿè¸ªï¼Ÿ
这个问题与cookieçš„pathã€domain属性以åŠGA的域哈希值有关。pathåŠdomain决定了cookieçš„å¯è§æ€§ã€‚GAçš„ cookie默认情况下åªèƒ½ç”±è®¾ç½®çš„主域读写。虽然cookieå¯ä»¥åœ¨å„å域间共享,但是,默认情况下,GA会为ä¸åŒçš„å域指定ä¸åŒçš„åŸŸå“ˆå¸Œå€¼ï¼Œå› æ¤ï¼Œå 域之间的GAæ•°æ®æ— 法共享。
å¦å¤–,通过设置pathå¯ä»¥å°†cookieé™åˆ¶ä»…为该域或å域下的æŸä¸ªç›®å½•å¯è¯»å†™ã€‚
å› æ¤ï¼Œå½“我们需è¦åœ¨å域间共享GAæ•°æ®æ—¶ï¼Œéœ€è¦ç»Ÿä¸€å„ååŸŸçš„åŸŸå“ˆå¸Œå€¼ã€‚è€Œä¸»åŸŸé—´æ˜¯æ— æ³•å…±äº«cookieçš„ï¼Œæƒ³ä¸€æƒ³å¦‚æžœä½ åœ¨A网站的cookieä¿å˜äº†å¯†ç ä¿¡æ¯ï¼Œè€ŒB网站å¯ä»¥è¯»å–这些cookieä¿¡æ¯æ˜¯å¤šä¹ˆå¯æ€•çš„äº‹æƒ…ï¼Œå› æ¤ï¼Œcookie自身的安全设置就ç¦æ¢äº†è¿™æ ·çš„共享。
PS:通过ä¸åŒçš„domainå’ŒPath设置,在一个域å¯ä»¥å˜å‚¨å¤šç»„GAçš„cookie。
如何进行跨主域的跟踪?
主è¦æœ‰ä¸¤ç§æ–¹å¼ï¼š
一ã€å€ŸåŠ©äºŽç¬¬ä¸‰æ–¹cookie。比如广告投放过程ä¸ï¼Œå…ˆåœ¨ç¬¬ä¸‰æ–¹åŸŸçš„一个页é¢è¿›è¡Œè·³è½¬ï¼Œç„¶åŽåœ¨ç¬¬ä¸‰æ–¹åŸŸä¸Šè®¾ç½®cookie,当访问者访问A网站åŠB 网站时,都å‘第三方域å‘é€ä¿¡æ¯ï¼Œå‘第三方域å‘é€è¯·æ±‚时会在headerä¸æºå¸¦ç¬¬ä¸‰æ–¹åŸŸä¸Šçš„cookie。通过第三方域上的cookieä¿¡æ¯å°±å¯ä»¥å°†è®¿é—®è€… 在A网站åŠB网站的行为统一起æ¥ã€‚
AdWords的转化跟踪就是采用这ç§æ–¹å¼ã€‚用户在点击AdWords广告时会在Google的域下写入相关cookie,当用户å‘生转化时,会å‘googleå‘é€ä¸€ä¸ªå›¾ç‰‡è¯·æ±‚,这个请求会æºå¸¦ä¹‹å‰ç‚¹å‡»å¹¿å‘Šæ—¶å†™å…¥çš„cookieä¿¡æ¯ï¼Œä»Žè€Œåœ¨è½¬åŒ–与广告点击之间建立è”系。
但是,éšç€è®¿é—®è€…éšç§æ„识的ä¸æ–æå‡ï¼Œç¦ç”¨ç¬¬ä¸‰æ–¹cookie的比例ä¸æ–æå‡ï¼Œä¸€äº›æµè§ˆå™¨çš„默认设置就是ç¦ç”¨ç¬¬ä¸‰æ–¹cookie,从而é™ä½Žäº†ä½¿ç”¨ç¬¬ä¸‰æ–¹cookie跟踪的准确性。
二ã€ä½¿ç”¨ç¬¬ä¸€æ–¹cookieï¼Œé€šè¿‡åœ¨å‡ ä¸ªä¸»åŸŸé—´è·³è½¬çš„URLæ·»åŠ å‚æ•°ä¼ é€’cookieä¿¡æ¯ã€‚这是GA跨域跟踪采用的方å¼ã€‚也是本文下é¢å°†è¦ä»‹ç»çš„主è¦å†…容。
如何使用GA进行跨域跟踪?
GA的跨域跟踪主è¦æ¶‰åŠåˆ°å…个方法的使用。
1. _setDomainName
这个方法用æ¥æŽ§åˆ¶GAçš„cookie(__utmaã€__utmbã€__utmcã€__utmzç‰ï¼‰çš„domain属性åŠåŸŸå“ˆå¸Œå€¼ã€‚默认情况 下,GA使用主域作为domain的值,通过这个方法,å¯ä»¥ä¼ 递一个å‚数指定domain的值。主è¦æœ‰ä¸¤ç§ç”¨æ³•ï¼Œä¸€ç§æ˜¯è·¨å域跟踪时,将主域作为å‚æ•°ä¼ å…¥ï¼Œå¯ä»¥åœ¨å„å域间共用一个域哈希值;一ç§æ˜¯å…³é—è·¨å域跟踪时,å¯ä»¥ä¼ 入一个noneï¼Œè¿™æ ·GA会将cookieçš„domain设置为å域,从而将å„å域 作为独立主体跟踪,且ä¸ä¼šå½±å“主域的GA cookie。
2._setAllowHash
这个方法用æ¥æŽ§åˆ¶åŸŸå“ˆå¸Œå€¼ï¼Œæœ‰ä¸€ä¸ªå‚数,其值为布尔值,默认值为true,开å¯åŸŸå“ˆå¸Œå€¼ï¼Œè®¾ç½®ä¸ºfalse则会将域哈希值设置为1,关é—域哈希值。
3. _setAllowLinker
这个方法用æ¥å¼€å¯æˆ–å…³é—通过链接接å—å’Œä¼ é€’cookie。åªæœ‰ä¸€ä¸ªå‚数布尔值,默认状æ€ä¸‹ä¸ºfalse,关é—通过链接接å—å’Œä¼ é€’cookie;当需è¦è·¨ä¸»åŸŸè·Ÿè¸ªæ—¶ï¼Œæ‰éœ€è¦å¼€å¯ï¼Œè®¾ç½®ä¸ºtrue。开å¯åŽå¿…须与_link或_linkByPost一起使用。
4. _link
这个方法用在需è¦é€šè¿‡é“¾æŽ¥å‚æ•°ä¼ é€’cookie的出站aæ ‡ç¾ä¸Šã€‚有两个å‚数,第一个为URL,第二个为是å¦ä½¿ç”¨#ä¼ é€’cookieå‚数,æ¤å‚æ•°å¯é€‰ã€‚
5. _linkByPost
这个方法通过将一个å—ç¬¦ä¸²é™„åŠ åˆ°å¼•è表å•çš„æ“作值 (HTTP POST),从而将 Cookie 从引è表å•ä¼ 递到å—符串ä¸åŒ…å«çš„å¦ä¸€ç½‘站。在从一个网站到第三方è´ç‰©è½¦ç½‘站跟踪用户行为时通常使用æ¤æ–¹æ³•ï¼Œä½†ä¹Ÿå¯ç”¨äºŽå°† Cookie æ•°æ®å‘é€åˆ°å¼¹å‡ºå¼çª—å£æˆ– iFrame ä¸çš„其他域。åŒæ ·æ”¯æŒä¸¤ä¸ªå‚数,第一个为表å•å¯¹è±¡ï¼Œç¬¬äºŒä¸ªä¸ºæ˜¯å¦ä½¿ç”¨#ä¼ é€’cookieå‚数。
注:目å‰ä¸ºæ¢ï¼Œå¾ˆå°‘é‡åˆ°è¿™ç§ç±»åž‹çš„è·¨åŸŸï¼Œå› æ¤ï¼Œä»¥ä¸‹å†…容ä¸åŒ…括_linkByPost方法的使用åŠé€šè¿‡è¡¨å•è·¨åŸŸã€‚
6. _setCookiePath
这个方法å¯ä»¥å°†GA cookie的读写仅é™äºŽè¯¥åŸŸä¸‹çš„æŸä¸ªå目录。
常用的GA跨域跟踪情境åŠGA代ç 部署方å¼
了解了上é¢çš„基础知识,下é¢ä»‹ç»ä¸€ä¸‹å¸¸è§çš„GA跨域跟踪情境åŠGA代ç 部署方å¼ã€‚
å•ä¸€ä¸»åŸŸå¤šä¸ªå域作为一个整体跟踪
这是最常è§ï¼ŒåŒæ—¶ä¹Ÿæ˜¯æœ€ç®€å•çš„è·¨åŸŸè·Ÿè¸ªæƒ…å¢ƒã€‚æ ¹æ®ä¸Šé¢çš„介ç»ï¼Œæˆ‘们知é“è¿™ç§æƒ…况åªæ˜¯è¦åœ¨åŒä¸€ä¸»åŸŸçš„ä¸åŒå域间共享域哈希值。åªéœ€åœ¨_trackPageview方法å‰è°ƒç”¨_setDomainName方法指定主域å。
GATCæ ·ä¾‹ï¼š
<script> var _gaq = _gaq || []; _gaq.push(['_setAccount','GA网络资æºID']); _gaq.push(['_setDomainName','ä½ çš„ä¸»åŸŸ']); _gaq.push(['_addOrganic','baidu','word']); _gaq.push(['_addOrganic','soso','w']); _gaq.push(['_addOrganic','sogou','query']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']);
(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); })(); </script> |
注:本文的GATC都是以异æ¥ä»£ç 为准。
å•ä¸€ä¸»åŸŸå¤šä¸ªå域,整个主域作为一个整体跟踪,å„个å域也å„自作为一个整体跟踪
è¿™ç§æƒ…况与上é¢çš„情况相比还涉åŠåˆ°å¤šè·Ÿè¸ªå™¨éƒ¨ç½²ã€‚å› ä¸ºï¼Œå¯¹äºŽæ¯ä¸€ä¸ªé¡µé¢éœ€è¦éƒ¨ç½²ä¸¤ä¸ªGA跟踪器,一个是主域的跟踪器,一个是å域的跟踪器。
跟踪器在GATCä¸ç”¨æ¥æ ‡è¯†GA账户的对象,异æ¥ä»£ç 的默认情况下,GA会使用一个å称为空的对象æ¥æ ‡è¯†GA账户。
这里的一个技巧是一个域ä¸è€ƒè™‘path的情况下,åªèƒ½å˜åœ¨ä¸¤ç»„GA cookie。一组是主域的cookie,一组是å域的cookie。
一个跟踪器使用_setDomainName(‘none’);,这个跟踪器会将cookieé™åˆ¶åœ¨å域,用于跟踪å域的æµé‡ï¼Œå¦ä¸€ä¸ªè·Ÿè¸ªå™¨åˆ™è°ƒç”¨_setDomainName(‘ä½ çš„ä¸»åŸŸ’),这个跟踪器使用的是主域的cookie,用于跟踪整个主域的æµé‡ã€‚
GATCæ ·ä¾‹å¦‚ä¸‹ï¼š
<script> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'å域的网络资æºID']); _gaq.push(['_setDomainName','none']); _gaq.push(['_addOrganic','baidu','word']); _gaq.push(['_addOrganic','soso','w']); _gaq.push(['_addOrganic','sogou','query']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']);
_gaq.push(['t2._setAccount', '主域的网络资æºID']); _gaq.push(['t2._setDomainName','ä½ çš„ä¸»åŸŸ']); _gaq.push(['t2._addOrganic','baidu','word']); _gaq.push(['t2._addOrganic','soso','w']); _gaq.push(['t2._addOrganic','sogou','query']); _gaq.push(['t2._trackPageview']); _gaq.push(['t2._trackPageLoadTime']);
(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); })(); </script> |
注:部署多跟踪器时,需è¦æ³¨æ„,对于其他的一些自定义GATC,比如事件跟踪ã€è‡ªå®šä¹‰å˜é‡ã€ç”µå商务也都需è¦æŒ‡æ˜Žè·Ÿè¸ªå™¨ã€‚如果这些数æ®æ˜¯ä¸¤ä¸ªè·Ÿè¸ªå™¨æ‰€åœ¨çš„GA账户都需è¦çš„,则需è¦é’ˆå¯¹æ¯ä¸€ä¸ªè·Ÿè¸ªå™¨æ·»åŠ 一次。
å•ä¸€ä¸»åŸŸå¤šä¸ªå域,整个主域作为一个整体跟踪,å„个å目录也å„自作为一个整体跟踪
è¿™ç§æƒ…形与上é¢çš„情形类似,所ä¸åŒçš„å°±æ˜¯æ·»åŠ _setCookiePath指定cookie所属的目录。GATCæ ·ä¾‹å¦‚ä¸‹ï¼š
<script> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'å目录的网络资æºID ']); _gaq.push(['_setDomainName','none']); _gaq.push(['_setCookiePath', '/å目录å称/']); _gaq.push(['_addOrganic','baidu','word']); _gaq.push(['_addOrganic','soso','w']); _gaq.push(['_addOrganic','sogou','query']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']);
_gaq.push(['t2._setAccount', '主域的网络资æºID ']); _gaq.push(['t2._setDomainName','ä½ çš„ä¸»åŸŸ']); _gaq.push(['t2._addOrganic','baidu','word']); _gaq.push(['t2._addOrganic','soso','w']); _gaq.push(['t2._addOrganic','sogou','query']); _gaq.push(['t2._trackPageview']); _gaq.push(['t2._trackPageLoadTime']);
(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); })(); </script> |
多个主域作为一个整体跟踪
跨主域跟踪æ‰æ˜¯GAä¸è¾ƒå¤æ‚的情况,除了需è¦åœ¨GATCä¸ä½œå‡ºä¿®æ”¹ï¼Œè¿˜éœ€è¦åœ¨è·¨åŸŸçš„链接åŠè¡¨å•ä¸Šä½œå‡ºå¯¹åº”的修改。
首先,需è¦è°ƒç”¨_setDomainName(‘主域å’)åŠ_setAllowHash(false)将域哈希值关é—。这里没有使用 _setDomainName(‘none’ï¼‰çš„åŽŸå› æ˜¯_setDomainName(‘none’)会将GA cookieçš„Domain属性设置ååŸŸï¼Œè¿™æ ·çš„è¯ï¼Œä¼šå°†æƒ…况å˜å¾—æ›´å¤æ‚,我们需è¦åœ¨å„个ååŸŸä¹‹é—´çš„è·³è½¬é“¾æŽ¥ä¼ é€’cookie。
其次,需è¦è°ƒç”¨_setAllowLinker(true),开å¯é€šè¿‡URLå‚数接å—å’Œä¼ é€’cookie值。
最åŽï¼Œä¹Ÿæ˜¯æœ€å¤æ‚的,在æ¯ä¸ªå‡ºç«™é“¾æŽ¥ä¸Šè°ƒç”¨_link方法。
GATCæ ·ä¾‹å¦‚ä¸‹ï¼š
<script> var _gaq = _gaq || []; _gaq.push(['_setAccount', '总的网络资æºID ']); _gaq.push(['_setDomainName','网站主域']); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_setAllowHash', false]); _gaq.push(['_addOrganic','baidu','word']); _gaq.push(['_addOrganic','soso','w']); _gaq.push(['_addOrganic','sogou','query']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']);
(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); })(); </script> |
主域间跳转链接的_linkæ–¹æ³•ä½¿ç”¨æ ·ä¾‹ï¼š
<a href=”http://example.com/test.html” onclick=”_gaq.push(['_link', 'http://example.com/test.html']); return false;”>click me</a> |
手动在æ¯ä¸ªä¸»åŸŸé—´è·³è½¬çš„é“¾æŽ¥ä¸Šæ·»åŠ _linkæ–¹æ³•å‡ ä¹Žæ˜¯ä¸å¯èƒ½å®Œæˆçš„任务。å¯ä»¥åˆ©ç”¨ä¸‹é¢çš„JSé历aæ ‡ç¾ï¼Œåœ¨ä¸»åŸŸé—´è·³è½¬çš„é“¾æŽ¥ä¸Šæ·»åŠ _link方法。
<script> var oldwhandler=window.onload window.onload =function whandler () { if (!!oldwhandler){oldwhandler()}; var links = document.getElementsByTagName(‘a’); for (var x=0; x < links.length; x++) { var oldlhandler=links[x].onclick links[x].onclick = function () { if (!!oldlhandler){oldlhandler()}; var mydomain = new RegExp(‘ä½ çš„ä¸»åŸŸå’, ‘i’);//ä¸åŒ…括.comã€.cnç‰åŽç¼€ if(!mydomain.test(this.getAttribute(‘href’))) { _gaq.push(['_link', this.getAttribute("href")]);return false; } }; } } </script> |
注:这里需è¦æ³¨æ„的是,这段JS必须在页é¢å®Œå…¨åŠ è½½åŽæ‰ä¼šæ‰§è¡Œï¼Œå› æ¤ï¼Œå½“访问者在页é¢æ²¡æœ‰åŠ 载完æˆå‰ç‚¹å‡»è·¨ä¸»åŸŸçš„链接,会导致跨域跟踪失败。
多个带有å域的主域,æ¯ä¸ªä¸»åŸŸä½œä¸ºä¸€ä¸ªæ•´ä½“跟踪,且多个主域作为统一的整体跟踪
è¿™ç§è·¨ä¸»åŸŸè·Ÿè¸ªæ˜¯æ›´å¤æ‚的情况。除了上é¢çš„设置外,还涉åŠåˆ°å¤šè·Ÿè¸ªå™¨ã€‚
GATCæ ·ä¾‹ï¼š
<script> var _gaq = _gaq || []; _gaq.push(['_setAccount', '具体主域的网络资æºID ']); _gaq.push(['_setDomainName','网站主域']); _gaq.push(['_setAllowHash', false]); _gaq.push(['_setAllowLinker', true]); _gaq.push(['_addOrganic','baidu','word']); _gaq.push(['_addOrganic','soso','w']); _gaq.push(['_addOrganic','sogou','query']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']);
_gaq.push(['t2._setAccount', '总的网络资æºID ']); _gaq.push(['t2._setDomainName','网站主域']); _gaq.push(['t2._setAllowHash', false]); _gaq.push(['t2._setAllowLinker', true]); _gaq.push(['t2._addOrganic','baidu','word']); _gaq.push(['t2._addOrganic','soso','w']); _gaq.push(['t2._addOrganic','sogou','query']); _gaq.push(['t2._trackPageview']); _gaq.push(['t2._trackPageLoadTime']);
(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); })(); </script> |
å‚考资料:Google Analytics官方关于跨域追踪的帮助文档