以下是使用 Google Analytics 通用事件跟踪方法而不是 GA 标准事件跟踪的更新方法。
整个 UTM 字符串可以从 queryString 中提取(如果有)或从 Google cookie (__utmz) 中提取,然后使用以下代码传递给 Google Analytics。
ga('send', 'event', 'queryString', 'getQueryString', googleString );
然后,在执行您想要创建的任何触发器时(我使用名为“widgetTracker”的函数),您可以执行 GA 事件跟踪器。
这是整个代码:
/* JavaScript Document */
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-xxxxxxx-xx', 'xx.xxx');
ga('send', 'pageview');
var googleString;
var stringArray = [];
var queryStringObject = makeQueryStringObject();
var QUOT = "'";
var EQ = '=';
var AMP = '&';
for ( var v in queryStringObject ) {
var str = v + EQ + queryStringObject[v] ;
stringArray.push(str);
googleString = stringArray.join(AMP);
}
function makeQueryStringObject() {
var obj = [];
var pageURL = window.location.href;
var URLArray = pageURL.split('?');
if( URLArray[1] ) {
var argsArray = URLArray[1].split('&');
var l = argsArray.length;
for( i=0; i<l; i++ ) {
var individualArg = argsArray[i].split('=');
if(individualArg[1] && individualArg[1].indexOf('#') > -1) {
var dropHashArray = individualArg[1].split('#');
individualArg[1] = dropHashArray[0];
}
obj[ individualArg[0] ] = individualArg[1];
console.log("value of queryStringObject: " + individualArg[0] + " :: " + obj[ individualArg[0] ]);
}
} else { /* from http://stackoverflow.com/a/14984832/1013405 */
ga1 = parseGACookie();
if(ga1['utmcsr']) {
var utm_source = ga1['utmcsr'];
}
if(ga1['utmccn']) {
var utm_campaign = ga1['utmccn'];
} if(ga1['utmcmd']) {
var utm_medium = ga1['utmcmd'];
}
if(ga1['utmctr']) {
var utm_term = ga1['utmctr'];
}
if(ga1['utmcct']) {
var utm_content = ga1['utmcct'];
}
}
var googleString2 = "utm_campaign=" + utm_campaign + '&' + "utm_medium=" + utm_medium + '&' + "utm_term=" + utm_term + '&' + "utm_content=" + utm_content;
return obj;
}
function parseGACookie() {
var values = {};
var cookie = readCookie("__utmz");
if (cookie) {
var z = cookie.split('.');
if (z.length >= 4) {
var y = z[4].split('|');
for (i=0; i<y.length; i++) {
var pair = y[i].split("=");
values[pair[0]] = pair[1];
}
}
}
return values;
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function widgetTracker() {
/* event tracking order of elements: send (required), event (required), Category, Action, Label, Value */
if (googleString) {
ga('send', 'event', 'queryString', 'getQueryString', googleString );
} else {
ga('send', 'event', 'queryString2', 'getQueryString2', googleString2 );
}
}