首页 > 解决方案 > 我们如何在没有 __utmz cookie 的情况下获取流量源数据?

问题描述

我曾经能够通过读取 __utmz cookie 来提取流量源数据,这样我可以将数据发布到内部转化跟踪数据库。但现在 GA 不使用此 cookie,而且其他 cookie 似乎没有我们可以使用的任何客户端数据。

还有其他方法可以将流量源数据拉入我们自己的内部数据库吗?

标签: google-analytics

解决方案


您可以使用页面中的自定义 JavaScript 或通过 Google 跟踪代码管理器模拟 Google Analytics 处理流程并确定流量来源参数的值,例如来源、媒体、活动等。

这可以是一个解决方案:

function crumbleCookie(a) {
  for (var d = document.cookie.split(";"), c = {}, b = 0; b < d.length; b++) {
      var e = d[b].substring(0, d[b].indexOf("=")).trim(),
          i = d[b].substring(d[b].indexOf("=") + 1, d[b].length).trim();
      c[e] = i
  }
  if (a) return c[a] ? c[a] : null;
  return c
}

function bakeCookie(a, d, c, b, e, i) {
  var j = new Date;
  j.setTime(j.getTime());
  c && (c *= 864E5);
  j = new Date(j.getTime() + c);
  document.cookie = a + "=" + escape(d) + (c ? ";expires=" + j.toGMTString() : "") + (b ? ";path=" + b : "") + (e ? ";domain=" + e : "") + (i ? ";secure" : "")
}

function writeLogic(n) {
  var a = getTrafficSource(n, '.example.com');  //Insert your domain here

  a = a.replace(/\|{2,}/g, "|");
  a = a.replace(/^\|/, "");
  a = unescape(a);

  bakeCookie(n, a, 182, "/", "", "")        // Cookie expiration sets to 182 days
};

function getParam(s, q) {
  try{
    var match = s.match('[?&]' + q + '=([^&]+)');
    return match ? match[1] : '';
  } catch(e){
return '';    
  }
}

function calculateTrafficSource() {
var source='', medium='', campaign='', term='', content='';
var search_engines = [['bing', 'q'], ['google', 'q'], ['yahoo', 'q'], ['baidu', 'q'], ['yandex', 'q'], ['ask', 'q']];   //List of search engines
var ref = document.referrer;
ref = ref.substr(ref.indexOf('//')+2);
ref_domain = ref;
ref_path = '/';
ref_search = '';

// Checks for campaign parameters
var url_search = document.location.search;

if(url_search.indexOf('utm_source') > -1) {
  source   = getParam(url_search, 'utm_source');
  medium   = getParam(url_search, 'utm_medium');
  campaign = getParam(url_search, 'utm_campaign');
  term     = getParam(url_search, 'utm_term');
  content  = getParam(url_search, 'utm_content');
} 
else if (getParam(url_search, 'gclid')) {
  source = 'google';
  medium = 'cpc';
  campaign = '(not set)';
} 
else if(ref) {

  // separate domain, path and query parameters
  if (ref.indexOf('/') > -1) {
    ref_domain = ref.substr(0,ref.indexOf('/'));
    ref_path = ref.substr(ref.indexOf('/'));
    if (ref_path.indexOf('?') > -1) {
      ref_search = ref_path.substr(ref_path.indexOf('?')+1);
      ref_path = ref_path.substr(0, ref_path.indexOf('?'));
    }
  }
  medium = 'referral';
  source = ref_domain;                      
  // Extract term for organic source
  for (var i=0; i<search_engines.length; i++){
    if(ref_domain.indexOf(search_engines[i][0]) > -1){
      medium = 'organic';
      source = search_engines[i][0];
      term = getParam(ref_search, search_engines[i][1]) || '(not provided)';
      break;
    } 
  }
}

return {
  'source'  : source,
  'medium'  : medium,
  'campaign': campaign,
  'term'    : term,
  'content' : content
  };
}

function getTrafficSource(cookieName, hostname) {
  var trafficSources = calculateTrafficSource();
  var source = trafficSources.source.length === 0 ? 'direct' : trafficSources.source;
var medium = trafficSources.medium.length === 0 ? 'none' : trafficSources.medium;
var campaign = trafficSources.campaign.length === 0 ? 'direct' : trafficSources.campaign;
// exception
if(medium === 'referral') {
    campaign = '';
}
var rightNow = new Date();
var value = 'source='   + source +
          '&medium='  + medium +
          '&campaign='+ campaign +
          '&term='    + trafficSources.term +
          '&content=' + trafficSources.content +
          '&date='    + rightNow.toISOString().slice(0,10).replace(/-/g,"");
  return value;
}

// Self-invoking function
(function(){
var date = new Date();  
var fr_date = date.getUTCFullYear().toString() + ((date.getUTCMonth() < 9) ? '0' + (date.getUTCMonth()+1).toString() : (date.getUTCMonth()+1).toString()) + ((date.getUTCDate() < 10) ? '0' + date.getUTCDate().toString() : date.getUTCDate().toString());
var session = crumbleCookie()['FirstSession'];

if (typeof session == 'undefined') {
    writeLogic('FirstSession');     
  }
  else {
    writeLogic('ReturningSession');     
  }
})();

此处代码:http: //clients.first-rate.com/firstrate/NewSession%20and%20ReturningSession%20cookies.txt


推荐阅读