Instantly share code, notes, and snippets.
Last active
November 1, 2020 19:06
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save mbaersch/d1c4c63dd11077b1eb821b1cafac6f4d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Variante: Nur speichern der ersten Quelle (als Cookie "gmsOrgSource"). Alle anderen Hinweise: Siehe oben */ | |
function setSourceCookie(domain) { | |
function getParamValue(pname, url) { | |
pname = pname.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); | |
var rx = new RegExp("[\\?&]" + pname + "=([^&#]*)"); | |
var results = rx.exec(url); | |
if (results == null) { | |
return ""; | |
} else return results[1]; | |
} | |
var res; | |
//Erste Quelle schon ausgewertet? Dann uebergehen | |
if (document.cookie.indexOf('gmsOrgSource') < 0) { | |
var srcTag = ""; | |
var url = document.location.href; | |
var host = document.location.hostname; | |
var ref = document.referrer.toLowerCase(); | |
refdomain = (ref) ? ref.split('/')[2] : ''; | |
if ((url.indexOf('utm_source=') >= 0) && (url.indexOf('utm_medium=') >= 0)) { | |
//UTM Parameter verwenden, wenn vorhanden | |
srcTag = getParamValue('utm_source', url) + ' / ' + | |
getParamValue('utm_medium', url); | |
if (url.indexOf('utm_campaign=') >= 0) | |
srcTag += ' [' + getParamValue('utm_campaign', url) + ']'; | |
} else if ((ref == "") || (refdomain == host)) { | |
//Kein Referrer vorhanden oder Selbstreferenz | |
srcTag = "direct / none"; | |
} else { | |
//Referrer auswerten... | |
if ((refdomain.substring(0, 21) == 'www.googleadservices.') || ( | |
refdomain.indexOf('googlesyndication.com') > 0) || ( | |
refdomain.substring(0, 27) == 'googleads.g.doubleclick.net' | |
)) { | |
srcTag = "google / cpc"; | |
} else if (refdomain.substring(0, 11) == 'www.google.') { | |
srcTag = (url.indexOf('gclid=') >= 0) ? 'google / cpc' : (url | |
.indexOf('dclid=') >= 0) ? 'google / cpm' : | |
'google / organic'; | |
} else if (refdomain.substring(0, 9) == 'www.bing.') { | |
//Ja, hier steckt die Annahme drin, dass das Keyword als Parameter bei Ziel-URLs verwendet wird. | |
//Ansonsten greifen die hoffentlich verwendeten UTM Parameter | |
srcTag = (url.indexOf('keyword=') >= 0) || (url.indexOf('msclkid=') >= 0) ? 'bing / cpc' : | |
'bing / organic'; | |
} else if (ref.search(/ (daum\.net)|(eniro\.se)|(naver\.com)|(yahoo\.com)|(msn\.com)|(aol\.com)|(lycos\.com)|(ask\.com)|(altavista\.com)|(search\.netscape\.com)|(about\.com)|(alltheweb\.com)|(voila\.fr)|(search\.virgilio\.it)|(baidu\.com)|(alice\.com)|(yandex\.com)|(najdi\.org\.mk)|(seznam\.cz)|(wp\.pl)|(online\.onetceßter\.org)|(szukacz\.pl)|(yam\.com)|(pchome\.com)|(kvasir\.no)|(sesam\.no)|(ozu\.es)|(terra\.com)|(mynet\.com)|(ekolay\.net)|(rambler\.ru)|(duckduckgo\.com)|(ecosia\.org)|(metager\.de)|(suche\.aol\.de)|(search\.aol\.com)|(metager2\.de)|(metasuche\.ch)|(qwant\.com)|(search\.avira\.com)|(samsung\.de\.searchturbo\.com)|(search\.1and1\.com)|(search\.avast\.com)|(search\.excite\.com)|(search\.gmx\.net)|(search\.infospace\.com)|(search\.mail\.com)|(search\.selfbutler\.com)|(search\.yahoo\.com)|(searchthis\.com)|(sm\.de)|(suche\.1und1\.de)|(suche\.gmx\.at)|(suche\.gmx\.ch)|(suche\.gmx\.net)|(suche\.t-online\.de)|(suche\.web\.de)|(suchen\.1und1\.de)|(suchen\.co\.at)|(swissle\.ch)|(thesmartsearch\.net)|(vodafone\.de\.searchturbo\.com)|(yoursearch\.me)|(zapmeta\.at)|(zapmeta\.ch)|(zapmeta\.com)|(zapmeta\.de)|(zdsearch\.com)/i) > 0){ | |
//andere Bekannte Suchmaschinen. Annahme: Alles, was hierher kommt, ist organisch. | |
//Das muss freilich nicht immer stimmen (z. B. bei Links aus Foren etc.) | |
srcTag = refdomain + " / organic"; | |
} else srcTag = refdomain + " / referral"; | |
} | |
//Ergebnis speichern als erste Quelle | |
if (srcTag != "direct / none") { | |
res = srcTag; | |
var cExDate = new Date(+new Date() + 1000 * 60 * 60 * 24 * 30 * 6); | |
document.cookie = 'gmsOrgSource=' + srcTag + ';Expires=' + | |
cExDate.toGMTString() + ';domain=' + | |
domain || host + ';path=/'; | |
} | |
} | |
return res; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Ermittelt die Quelle eines Besuchers und speichert diese in einem Session-Cookie "gmsSource" für die laufende Sitzung. | |
Wenn es die erste Sitzung ist (erkannt anhand des eigenen Cookies), wird der Wert als ursprüngliche Trafficquelle | |
zusätzlich dauerhaft (inkl. aller Probleme mit ITP & Co. für maximal 6 Monate) in einem weiteren | |
Cookie "gmsOrgSource" gespeichert. | |
Wird eine ursprüngliche Quelle im Fall einer ersten Sitzung gespeichert, liefert die Funktion die Quelle | |
als Rückgabewert zurück. | |
Nutzung: z. B. als verstecktes Feld in Kontaktformularen zur Dokumentation der Besucherquelle. Auch die | |
Speicherung in einer Benutzerdefinierten Dimension auf User-Ebene in Google Analytics ist damit möglich. | |
*/ | |
function setSourceCookie(domain) { | |
function getParamValue(pname, url) { | |
pname = pname.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); | |
var rx = new RegExp("[\\?&]" + pname + "=([^&#]*)"); | |
var results = rx.exec(url); | |
if (results == null) { | |
return ""; | |
} else return results[1]; | |
} | |
var res; | |
//Quelle schon ausgewertet? Dann uebergehen | |
if (document.cookie.indexOf('gmsSource') < 0) { | |
var srcTag = ""; | |
var url = document.location.href; | |
var host = document.location.hostname; | |
var ref = document.referrer.toLowerCase(); | |
refdomain = (ref) ? ref.split('/')[2] : ''; | |
if ((url.indexOf('utm_source=') >= 0) && (url.indexOf('utm_medium=') >= 0)) { | |
//UTM Parameter verwenden, wenn vorhanden | |
srcTag = getParamValue('utm_source', url) + ' / ' + | |
getParamValue('utm_medium', url); | |
if (url.indexOf('utm_campaign=') >= 0) | |
srcTag += ' [' + getParamValue('utm_campaign', url) + ']'; | |
} else if ((ref == "") || (refdomain == host)) { | |
//Kein Referrer vorhanden oder Selbstreferenz | |
srcTag = "direct / none"; | |
} else { | |
//Referrer auswerten... | |
if ((refdomain.substring(0, 21) == 'www.googleadservices.') || ( | |
refdomain.indexOf('googlesyndication.com') > 0) || ( | |
refdomain.substring(0, 27) == 'googleads.g.doubleclick.net' | |
)) { | |
srcTag = "google / cpc"; | |
} else if (refdomain.substring(0, 11) == 'www.google.') { | |
srcTag = (url.indexOf('gclid=') >= 0) ? 'google / cpc' : (url | |
.indexOf('dclid=') >= 0) ? 'google / cpm' : | |
'google / organic'; | |
} else if (refdomain.substring(0, 9) == 'www.bing.') { | |
//Ja, hier steckt die Annahme drin, dass das Keyword als Parameter bei Ziel-URLs verwendet wird. | |
//Ansonsten greifen die hoffentlich verwendeten UTM Parameter | |
srcTag = (url.indexOf('keyword=') >= 0) ? 'bing / cpc' : | |
'bing / organic'; | |
} else if (ref.search(/ (daum\.net)|(eniro\.se)|(naver\.com)|(yahoo\.com)|(msn\.com)|(aol\.com)|(lycos\.com)|(ask\.com)|(altavista\.com)|(search\.netscape\.com)|(about\.com)|(alltheweb\.com)|(voila\.fr)|(search\.virgilio\.it)|(baidu\.com)|(alice\.com)|(yandex\.com)|(najdi\.org\.mk)|(seznam\.cz)|(wp\.pl)|(online\.onetceßter\.org)|(szukacz\.pl)|(yam\.com)|(pchome\.com)|(kvasir\.no)|(sesam\.no)|(ozu\.es)|(terra\.com)|(mynet\.com)|(ekolay\.net)|(rambler\.ru)|(duckduckgo\.com)|(ecosia\.org)|(metager\.de)|(suche\.aol\.de)|(search\.aol\.com)|(metager2\.de)|(metasuche\.ch)|(qwant\.com)|(search\.avira\.com)|(samsung\.de\.searchturbo\.com)|(search\.1and1\.com)|(search\.avast\.com)|(search\.excite\.com)|(search\.gmx\.net)|(search\.infospace\.com)|(search\.mail\.com)|(search\.selfbutler\.com)|(search\.yahoo\.com)|(searchthis\.com)|(sm\.de)|(suche\.1und1\.de)|(suche\.gmx\.at)|(suche\.gmx\.ch)|(suche\.gmx\.net)|(suche\.t-online\.de)|(suche\.web\.de)|(suchen\.1und1\.de)|(suchen\.co\.at)|(swissle\.ch)|(thesmartsearch\.net)|(vodafone\.de\.searchturbo\.com)|(yoursearch\.me)|(zapmeta\.at)|(zapmeta\.ch)|(zapmeta\.com)|(zapmeta\.de)|(zdsearch\.com)/i) > 0){ | |
//andere Bekannte Suchmaschinen. Annahme: Alles, was hierher kommt, ist organisch. | |
//Das muss freilich nicht immer stimmen (z. B. bei Links aus Foren etc.) | |
srcTag = refdomain + " / organic"; | |
} else srcTag = refdomain + " / referral"; | |
} | |
//Ergebnis speichern in Session und ggf. als erste Quelle | |
if (!domain) domain = host; | |
//Quelle der Sitzung speichern | |
document.cookie = 'gmsSource=' + srcTag + ';domain=' + domain + | |
';path=/'; | |
//Quelle dauerhaft speichern, wenn nicht bereits vorhanden. | |
//Aktiv ist eine "First Non-Direct-Click"-Variante, die nur speichert, was nicht "direct" ist. | |
//Soll auch Direct als erste Quelle gespeichert werden, folgende Bedingung statt der aktiven verwenden: | |
//if (document.cookie.indexOf('gmsOrgSource') < 0) { | |
if ((srcTag != "direct / none") && (document.cookie.indexOf('gmsOrgSource') < 0)) { | |
res = srcTag; | |
var cExDate = new Date(+new Date() + 1000 * 60 * 60 * 24 * 30 * | |
6); | |
document.cookie = 'gmsOrgSource=' + srcTag + ';Expires=' + | |
cExDate.toGMTString() + ';domain=' + | |
domain + ';path=/'; | |
} | |
} | |
return res; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment