Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Javascript
Posted by: Mikael Malmgren
Added: Aug 21, 2018 1:03 PM
Views: 2
Tags: no tags
  1. <script id="gtm-__utmzz-cookie-replicator">
  2.   /**
  3.    * UTMZ Cookie Replicator
  4.    *
  5.    * Makes a generally faithful representation of the old __utmz cookie
  6.    * from Classic Analytics. Stores the data in a cookie named __utmzz.
  7.    * Also sets a session cookie named __utmzzses.
  8.    *
  9.    * Data is stored in the __utmzz cookie in the following format; brackets
  10.    * indicate optional data and are aexcluded from the stored string:
  11.    *
  12.    * utmcsr=SOURCE|utmcmd=MEDIUM[|utmccn=CAMPAIGN][|utmcct=CONTENT]
  13.    * [|utmctr=TERM/KEYWORD]
  14.    *
  15.    * e.g.:
  16.    *
  17.    * utmcsr=example.com|utmcmd=affl-link|utmccn=foo|utmcct=bar|utmctr=biz
  18.    *
  19.    * Follows the same campaign assignment/overriding flow as Classic Analytics.
  20.    */
  21.   (function(document) {
  22.  
  23.     var referrer = document.referrer;
  24.     var gaReferral = {
  25.       'utmcsr': '(direct)',
  26.       'utmcmd': '(none)',
  27.       'utmccn': '(not set)'
  28.     };
  29.                 var thisHostname = document.location.hostname;
  30.     var thisDomain = getDomain_(thisHostname);
  31.     var referringDomain = getDomain_(document.referrer);
  32.                 var sessionCookie = getCookie_('__utmzzses');
  33.     var cookieExpiration = new Date(+new Date() + 1000 * 60 * 60 * 24 * 30 * 6);
  34.                 var qs = document.location.search.replace('?', '');
  35.                 var hash = document.location.hash.replace('#', '');
  36.     var gaParams = parseGoogleParams(qs + '#' + hash);
  37.     var referringInfo = parseGaReferrer(referrer);
  38.     var storedVals = getCookie_('__utmz') || getCookie_('__utmzz');
  39.     var newCookieVals = [];
  40.     var keyMap = {
  41.       'utm_source': 'utmcsr',
  42.       'utm_medium': 'utmcmd',
  43.       'utm_campaign': 'utmccn',
  44.       'utm_content': 'utmcct',
  45.       'utm_term': 'utmctr',
  46.       'gclid': 'utmgclid',
  47.       'dclid': 'utmdclid'
  48.     };
  49.     var keyName,
  50.       values,
  51.       _val,
  52.       _key,
  53.       raw,
  54.       key,
  55.       len,
  56.       i;
  57.  
  58.     if (sessionCookie && referringDomain === thisDomain) {
  59.  
  60.       gaParams = null;
  61.       referringInfo = null;
  62.  
  63.     }
  64.  
  65.     if (gaParams && (gaParams.utm_source || gaParams.gclid || gaParams.dclid)) {
  66.  
  67.       for (key in gaParams) {
  68.  
  69.         if (typeof gaParams[key] !== 'undefined') {
  70.  
  71.           keyName = keyMap[key];
  72.           gaReferral[keyName] = gaParams[key];
  73.  
  74.         }
  75.  
  76.       }
  77.  
  78.       if (gaParams.gclid || gaParams.dclid) {
  79.  
  80.         gaReferral.utmcsr = 'google';
  81.         gaReferral.utmcmd = gaReferral.utmgclid ? 'cpc' : 'cpm';
  82.  
  83.       }
  84.  
  85.     } else if (referringInfo) {
  86.  
  87.       gaReferral.utmcsr = referringInfo.source;
  88.       gaReferral.utmcmd = referringInfo.medium;
  89.       if (referringInfo.term) gaReferral.utmctr = referringInfo.term;
  90.  
  91.     } else if (storedVals) {
  92.  
  93.       values = {};
  94.       raw = storedVals.split('|');
  95.       len = raw.length;
  96.  
  97.       for (i = 0; i < len; i++) {
  98.  
  99.         _val = raw[i].split('=');
  100.         _key = _val[0].split('.').pop();
  101.         values[_key] = _val[1];
  102.  
  103.       }
  104.  
  105.       gaReferral = values;
  106.  
  107.     }
  108.  
  109.     for (key in gaReferral) {
  110.  
  111.       if (typeof gaReferral[key] !== 'undefined') {
  112.  
  113.         newCookieVals.push(key + '=' + gaReferral[key]);
  114.  
  115.       }
  116.  
  117.     }
  118.  
  119.     writeCookie_('__utmzz', newCookieVals.join('|'), cookieExpiration, '/', thisDomain);
  120.     writeCookie_('__utmzzses', 1, null, '/', thisDomain);
  121.  
  122.     function parseGoogleParams(str) {
  123.  
  124.       var campaignParams = ['source', 'medium', 'campaign', 'term', 'content'];
  125.       var regex = new RegExp('(utm_(' + campaignParams.join('|') + ')|(d|g)clid)=.*?([^&#]*|$)', 'gi');
  126.       var gaParams = str.match(regex);
  127.       var paramsObj,
  128.         vals,
  129.         len,
  130.         i;
  131.  
  132.       if (gaParams) {
  133.  
  134.         paramsObj = {};
  135.         len = gaParams.length;
  136.  
  137.         for (i = 0; i < len; i++) {
  138.  
  139.           vals = gaParams[i].split('=');
  140.  
  141.           if (vals) {
  142.  
  143.             paramsObj[vals[0]] = vals[1];
  144.  
  145.           }
  146.  
  147.         }
  148.  
  149.       }
  150.  
  151.       return paramsObj;
  152.  
  153.     }
  154.  
  155.     function parseGaReferrer(referrer) {
  156.  
  157.       if (!referrer) return;
  158.  
  159.       var searchEngines = {
  160.         'daum.net': {
  161.           'p': 'q',
  162.           'n': 'daum'
  163.         },
  164.         'eniro.se': {
  165.           'p': 'search_word',
  166.           'n': 'eniro '
  167.         },
  168.         'naver.com': {
  169.           'p': 'query',
  170.           'n': 'naver '
  171.         },
  172.         'yahoo.com': {
  173.           'p': 'p',
  174.           'n': 'yahoo'
  175.         },
  176.         'msn.com': {
  177.           'p': 'q',
  178.           'n': 'msn'
  179.         },
  180.         'bing.com': {
  181.           'p': 'q',
  182.           'n': 'live'
  183.         },
  184.         'aol.com': {
  185.           'p': 'q',
  186.           'n': 'aol'
  187.         },
  188.         'lycos.com': {
  189.           'p': 'q',
  190.           'n': 'lycos'
  191.         },
  192.         'ask.com': {
  193.           'p': 'q',
  194.           'n': 'ask'
  195.         },
  196.         'altavista.com': {
  197.           'p': 'q',
  198.           'n': 'altavista'
  199.         },
  200.         'search.netscape.com': {
  201.           'p': 'query',
  202.           'n': 'netscape'
  203.         },
  204.         'cnn.com': {
  205.           'p': 'query',
  206.           'n': 'cnn'
  207.         },
  208.         'about.com': {
  209.           'p': 'terms',
  210.           'n': 'about'
  211.         },
  212.         'mamma.com': {
  213.           'p': 'query',
  214.           'n': 'mama'
  215.         },
  216.         'alltheweb.com': {
  217.           'p': 'q',
  218.           'n': 'alltheweb'
  219.         },
  220.         'voila.fr': {
  221.           'p': 'rdata',
  222.           'n': 'voila'
  223.         },
  224.         'search.virgilio.it': {
  225.           'p': 'qs',
  226.           'n': 'virgilio'
  227.         },
  228.         'baidu.com': {
  229.           'p': 'wd',
  230.           'n': 'baidu'
  231.         },
  232.         'alice.com': {
  233.           'p': 'qs',
  234.           'n': 'alice'
  235.         },
  236.         'yandex.com': {
  237.           'p': 'text',
  238.           'n': 'yandex'
  239.         },
  240.         'najdi.org.mk': {
  241.           'p': 'q',
  242.           'n': 'najdi'
  243.         },
  244.         'seznam.cz': {
  245.           'p': 'q',
  246.           'n': 'seznam'
  247.         },
  248.         'search.com': {
  249.           'p': 'q',
  250.           'n': 'search'
  251.         },
  252.         'wp.pl': {
  253.           'p': 'szukaj ',
  254.           'n': 'wirtulana polska'
  255.         },
  256.         'online.onetcenter.org': {
  257.           'p': 'qt',
  258.           'n': 'o*net'
  259.         },
  260.         'szukacz.pl': {
  261.           'p': 'q',
  262.           'n': 'szukacz'
  263.         },
  264.         'yam.com': {
  265.           'p': 'k',
  266.           'n': 'yam'
  267.         },
  268.         'pchome.com': {
  269.           'p': 'q',
  270.           'n': 'pchome'
  271.         },
  272.         'kvasir.no': {
  273.           'p': 'q',
  274.           'n': 'kvasir'
  275.         },
  276.         'sesam.no': {
  277.           'p': 'q',
  278.           'n': 'sesam'
  279.         },
  280.         'ozu.es': {
  281.           'p': 'q',
  282.           'n': 'ozu '
  283.         },
  284.         'terra.com': {
  285.           'p': 'query',
  286.           'n': 'terra'
  287.         },
  288.         'mynet.com': {
  289.           'p': 'q',
  290.           'n': 'mynet'
  291.         },
  292.         'ekolay.net': {
  293.           'p': 'q',
  294.           'n': 'ekolay'
  295.         },
  296.         'rambler.ru': {
  297.           'p': 'words',
  298.           'n': 'rambler'
  299.         },
  300.         'google': {
  301.           'p': 'q',
  302.           'n': 'google'
  303.         }
  304.       };
  305.       var a = document.createElement('a');
  306.       var values = {};
  307.       var searchEngine,
  308.         termRegex,
  309.         term;
  310.  
  311.       a.href = referrer;
  312.  
  313.       // Shim for the billion google search engines
  314.       if (a.hostname.indexOf('google') > -1) {
  315.  
  316.         referringDomain = 'google';
  317.  
  318.       }
  319.  
  320.       if (searchEngines[referringDomain]) {
  321.  
  322.         searchEngine = searchEngines[referringDomain];
  323.         termRegex = new RegExp(searchEngine.p + '=.*?([^&#]*|$)', 'gi');
  324.         term = a.search.match(termRegex);
  325.  
  326.         values.source = searchEngine.n;
  327.         values.medium = 'organic';
  328.  
  329.         values.term = (term ? term[0].split('=')[1] : '') || '(not provided)';
  330.  
  331.       } else if (referringDomain !== thisDomain) {
  332.  
  333.         values.source = a.hostname;
  334.         values.medium = 'referral';
  335.  
  336.       }
  337.  
  338.       return values;
  339.  
  340.     }
  341.  
  342.     function writeCookie_(name, value, expiration, path, domain) {
  343.  
  344.       var str = name + '=' + value + ';';
  345.       if (expiration) str += 'Expires=' + expiration.toGMTString() + ';';
  346.       if (path) str += 'Path=' + path + ';';
  347.       if (domain) str += 'Domain=' + domain + ';';
  348.  
  349.       document.cookie = str;
  350.  
  351.     }
  352.  
  353.                 function getCookie_(name) {
  354.  
  355.                         var cookies = '; ' + document.cookie
  356.                         var cvals = cookies.split('; ' + name + '=');
  357.  
  358.                         if (cvals.length > 1) return cvals.pop().split(';')[0];
  359.  
  360.                 }
  361.  
  362.     function getDomain_(url) {
  363.  
  364.       if (!url) return;
  365.  
  366.       var a = document.createElement('a');
  367.       a.href = url;
  368.  
  369.       try {
  370.  
  371.         return a.hostname.match(/[^.]*\.[^.]{2,3}(?:\.[^.]{2,3})?$/)[0];
  372.  
  373.       } catch(squelch) {}
  374.  
  375.     }
  376.  
  377.   })(document);
  378.  
  379. </script>