Skip to content

Instantly share code, notes, and snippets.

@mbaersch
Last active December 12, 2020 15:04
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mbaersch/72e9f8d2035a0cdac0c6d6eb6893f7ed to your computer and use it in GitHub Desktop.
Save mbaersch/72e9f8d2035a0cdac0c6d6eb6893f7ed to your computer and use it in GitHub Desktop.
Google Analytics customTask: fixOrganic
//Folgenden Code bei einer direkten Implementierung von Universal Analytics
//in den Trackingcode einfügen; vor dem Absenden des Pageviews
ga('set', 'customTask', function(model) {
var r = document.referrer;
//Suchmuster für relevante Suchmaschinen mit "versteckten" Suchparametern
var srch = /(suche\.t-online\.de)|(qwant\.com)|(metager\.de)|(duckduckgo\.com)|(ecosia\.org)|(android\.googlequicksearchbox\.)|(search\.yahoo\.com)|(zapmeta\.)|(\.sosodesktop\.com)|(search\.mysearch\.com)|(search\.mail\.com)|(thesmartsearch\.net)|(zdsearch\.com)|(search\.easydialsearch\.com)|(safesearch\.hypersonica\.com)|(search\.v9\.com)|(search\.genieo\.com)|(search\.avast\.com)|(searches\.uninstallmaster\.com)|(search\.handycafe\.com)|(searches\.safehomepage\.com)|(search\.snapdo\.com)|(search\.selfbutler\.com)|(infospace\.com)|(search\.avira\.)/i;
//Referrer mit Suchmuster vergleichen
if (r.search(srch) > 0) {
//passenden Parameter bestimmen
var prm = (r.search('yahoo') > 0) ? 'p=':'q=';
//Konstanten Suchparameter anfügen, wenn kein Parameter vorhanden ist
if (r.search(prm) < 0)
r += (r.split('?')[1] ? '&':'?') + prm + '(not provided)';
model.set('referrer', r);
//Keine Kampagnenparameter (yahoo paid) gefunden? Dann setzen...
if (document.location.href.indexOf('utm_source=') < 0) {
model.set('campaignSource', r.replace('http://','').replace('https://','').replace('www.','').split(/[/?#]/)[0]);
model.set('campaignMedium', 'organic');
var rgx = new RegExp('[\\?&]' + prm + '([^&#]*)');
var q = rgx.exec(r);
q = decodeURIComponent(q[1].replace(/\+/g, ' '));
model.set('campaignKeyword', q);
}
}
});
//Folgenden Code bei Verwendung des Google Tag Managers als benutzerdefinierte JS-Variable anlegen und
//als Feld customTask bei Hits in den festzulegenden Feldern nutzen
function() {
return function(model) {
var r = {{Referrer}}; //Referrer als Integrierte Variable aktivieren und hier auslesen
//Suchmuster für Suchmaschinen mit "versteckten" Suchparametern
var srch = /(suche\.t-online\.de)|(qwant\.com)|(metager\.de)|(duckduckgo\.com)|(ecosia\.org)|(android\.googlequicksearchbox\.)|(search\.yahoo\.com)|(zapmeta\.)|(\.sosodesktop\.com)|(search\.mysearch\.com)|(search\.mail\.com)|(thesmartsearch\.net)|(zdsearch\.com)|(search\.easydialsearch\.com)|(safesearch\.hypersonica\.com)|(search\.v9\.com)|(search\.genieo\.com)|(search\.avast\.com)|(searches\.uninstallmaster\.com)|(search\.handycafe\.com)|(searches\.safehomepage\.com)|(search\.snapdo\.com)|(search\.selfbutler\.com)|(infospace\.com)|(search\.avira\.)/i;
//Referrer mit Suchmuster vergleichen
if (r.search(srch) > 0) {
//passenden Parameter bestimmen
var prm = (r.search('yahoo') > 0) ? 'p=':'q=';
//Konstanten Suchparameter anfügen, wenn kein Parameter vorhanden ist
if (r.search(prm) < 0)
r += (r.split('?')[1] ? '&':'?') + prm + '(not provided)';
model.set('referrer', r);
//Keine Kampagnenparameter (yahoo paid) gefunden? Dann setzen...
if (document.location.href.indexOf('utm_source=') < 0) {
model.set('campaignSource', r.replace('http://','').replace('https://','').replace('www.','').split(/[/?#]/)[0]);
model.set('campaignMedium', 'organic');
var rgx = new RegExp('[\\?&]' + prm + '([^&#]*)');
var q = rgx.exec(r);
q = decodeURIComponent(q[1].replace(/\+/g, ' '));
model.set('campaignKeyword', q);
}
}
}
}
@mbaersch
Copy link
Author

mbaersch commented Jun 24, 2018

"Fix Organic" für Google Analytics (Universal)

customTask zur Korrektur der Zuordnung zum Kanal "Organic" für Besucher aus Suchmaschinen

Zweck
Üblicherweise landen viele Besucher aus Suchmaschinen im Topf "Verweise", weil typischerweise in den Tracking-Einstellungen keine zusätzlichen "Quellen organischer Suche" definiert wurden.... und selbst wenn, entziehen sich viele Suchmaschinen wie DuckDuckGo u. a. der Zuordnung, weil der erforderliche Suchparameter nicht mehr in der Verweis-URL vorhanden ist.

Hier setzt die obige Lösung an: per customTask wird der Referrer vor dem Senden der Hits untersucht und ggf. mit einem "Pseudoparameter" zur Übergabe des Keywords (not provided) versehen und dessen Kampagnenquelle und -medium auf die verweisende Domain und organic gesetzt.

Verwendung bei direkter Implementierung des Trackingcodes
Wenn der Trackingcode von Analytics - z. B. in einem Template oder über eine Erweiterung des CMS - "direkt verbaut" wurde und modifiziert werden kann, wird der Code aus fixOrganic-direct.js zwischen die Erzeugung des Trackers und dem Senden des Pageviews eingefügt, z. B. vor der ebenso dort eingefügten Anonymisierung der IP. Weitere Anpassungen sind nicht erforderlich; auch die Definition der "Quellen organischer Suche" ist nicht mehr erforderlich.

Verwendung bei Nutzung des Google Tag Managers
Im GTM den Code aus fixOrganic-gtm.js als neue Variable vom Typ Benutzerdefiniertes JavaScript anlegen und diese dann als Feldwert für das Feld customTask hinzufügen. Je nach Nutzung des GTM kann dies zentral bei einer verwendeten Einstellungsvariable geschehen oder muss bei allen genutzten Analytics-Tags unter Festzulegende Felder eintragen. Auch hier gilt: Weitere Anpassungen sind nicht erforderlich; auch die Definition der "Quellen organischer Suche" ist nicht mehr erforderlich.

Ergänzung um neue Suchmaschinen
Wer - z. B. über die Verweisanalyse bei analytrix.de - eine nennenswerte Anzahl von Besuchern aus hierdurch nicht abgedeckten Quellen findet, die statt als Suchmaschine als "Referral-Traffic" eingestuft werden, kann die Liste der zu berücksichtigenden Suchmaschinen im Suchmuster in der Variable srch ergänzen.

Müssen die Kommentare drin bleiben?
Nein ;)

@mbaersch
Copy link
Author

mbaersch commented Jun 25, 2018

Wer alle Suchmaschinen eintragen will, die derzeit unter analytrix.de bekannt sind und deren Suchparameter q lautet (Sonderfall p für Yahoo wird ja abgedeckt) bzw. ohnehin nie zur Identifizierung im Verweispfad bei GA ankommt, der kann folgende Variable für das Suchmuster verwenden und oben austauschen:

var srch = /(\.fvpimageviewer\.com)|(\.ozipcompression\.com)|(\.searchturbo\.com)|(\.sosodesktop\.com)|(airzip\.inspsearch\.com)|(android\.googlequicksearchbox\.)|(anonymous-search\.com)|(dalesearch\.com)|(de\.wow\.com)|(delta-search\.com)|(deusu\.de)|(duckduckgo\.com)|(ecosia\.org)|(enhanced-search\.com)|(isearch\.searchcompletion\.com)|(metager\.de)|(suche\.aol\.de)|(search\.aol\.com)|(metager2\.de)|(metasuche\.ch)|(mysearchguardian\.com)|(qwant\.com)|(search\.avira\.com)|(safesearch\.hypersonica\.com)|(samsung\.de\.searchturbo\.com)|(search\.1and1\.com)|(search\.avast\.com)|(search\.b1\.org)|(search\.ch)|(search\.easydialsearch\.com)|(search\.excite\.com)|(search\.genieo\.com)|(search\.gmx\.net)|(search\.handycafe\.com)|(search\.incredibar\.com)|(search\.infospace\.com)|(search\.lilo\.org)|(search\.mail\.com)|(search\.monstercrawler\.com)|(search\.selfbutler\.com)|(search\.sidecubes\.com)|(search\.snapdo\.com)|(search\.socialdownloadr\.com)|(search\.softonic\.com)|(search\.sweetim\.com)|(search\.v9\.com)|(search\.yahoo\.com)|(searches\.safehomepage\.com)|(searches\.uninstallmaster\.com)|(searchgol\.com)|(searchguide\.level3\.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;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment