Successfully reported this slideshow.
Your SlideShare is downloading. ×

GMP-Con 2019 - GTM Hacks - Maik Bruns (Metrika)

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 119 Ad

GMP-Con 2019 - GTM Hacks - Maik Bruns (Metrika)

Download to read offline

Den Google Tag Manager kannst du an allen Ecken und Kanten noch besser machen und ausnutzen, um dein Online Marketing zu verbessern. Im Workshop gibt's alltags- und praxistaugliche Hacks für dein Lieblingstool.

Den Google Tag Manager kannst du an allen Ecken und Kanten noch besser machen und ausnutzen, um dein Online Marketing zu verbessern. Im Workshop gibt's alltags- und praxistaugliche Hacks für dein Lieblingstool.

Advertisement
Advertisement

More Related Content

Similar to GMP-Con 2019 - GTM Hacks - Maik Bruns (Metrika) (20)

More from e-dialog GmbH (20)

Advertisement

Recently uploaded (20)

GMP-Con 2019 - GTM Hacks - Maik Bruns (Metrika)

  1. 1. II
  2. 2. Ich weiß, warum du hier bist!
  3. 3. Du solltest Webanalyst werden …
  4. 4. » „Not everything that counts can be counted, and not everything that can be counted counts.“ Albert Einstein, Theoretischer Physiker 1879 – 1955
  5. 5. Maik Bruns #metrika #analyticspro #dsmdm #trainer #writer #papa #freeletics #enabler @brunsmaik@maikbrunsmetrika@maikbruns #markenfaible FOLLOW ME FOR STORIES, LIVESTREAMS, INSIGHTS ON #mentor Ich mache Websites profitabler. #dwzwa
  6. 6. „War das nicht der Typ mit den vielen Slides?“
  7. 7. Dein und mein erstes Mal
  8. 8. You are here … maybe Your GTM Skill? Simo is here
  9. 9. IT‘S NOT EASY BUT IT‘S WORTH IT
  10. 10. » I can see crazy people
  11. 11. Nicht alles machen! Kritisch sein.
  12. 12. RTFM! Sonst …
  13. 13. What‘s in it for you today? GTM Hacks Tools
  14. 14. Je mehr Hacker, desto mehr Script … Immer daran denken …
  15. 15. TALK NERDY TO ME … And now …
  16. 16. QUICK
  17. 17. Level Fähigkeit Dateiendungen weiter nutzen Dein Vorteil Relevante Informationen weitergeben Genau triggern
  18. 18. Hack #1: Dateinamenserweiterung nutzen • Neuer URL-Variablen-Typ: „Dateinamenserweiterung“ • URL-Quelle festlegen (wo soll die Information geparst werden?) • Dateityp wird automatisch in der Variable gespeichert bei Click, Aufruf oder was auch immer
  19. 19. Anwendungsbeispiel „Download Tracking“ • Klick-Trigger anlegen, z. B. mithilfe der Variablen und dem Tag zuweisen = genaueres Triggering Hack #1: Dateinamenserweiterung nutzen
  20. 20. Anwendungsbeispiel „Download Tracking“ • Tag anlegen (z. B. Ereignis-Tracking für Google Analytics) • Neben z. B. „{{Click Text}}“ auch die Dateinamenserweiterung ergänzen (z. B. im Label) • Dateinamenserweiterung ggf. in Suchtabelle „verfeinern“ Hack #1: Dateinamenserweiterung nutzen
  21. 21. Level Fähigkeit Vereinheitlichung von Variablen- Inhalten Dein Vorteil Beugt Fehlern vor Datenqualität verbessern
  22. 22. Hack #2: Vereinheitlichung von Inhalten Früher Variablen wurden vor der Verwendung (wenn überhaupt) nochmal durch ein JavaScript „gejagt“, das sie „vereinheitlicht“ hat. Zum Beispiel function () { return {{url}}.toLowerCase(); }
  23. 23. Hack #2: Vereinheitlichung von Inhalten • Immer, wenn Daten auch an Dritt-Systeme weitergegeben werden, kommt es besonders auf die Datenqualität der Variablen an. • Oftmals „einfache“ Fehler wie falsche Groß-/Kleinschreibung, nicht definierte Werte usw. • „Korrektur“/„Bereinigung“ jetzt durch Funktion in Variablen
  24. 24. Hack #2: Vereinheitlichung von Inhalten Einfache Möglichkeit der Einflussnahme: „Formatwerte“
  25. 25. Level Fähigkeit Neue Scroll und YouTube Trigger Dein Vorteil Vor allem bei Lazy Load mehr Präzision
  26. 26. Hack #3: Neue Scroll und YouTube Trigger Bisheriges Problem Bei Lazy Loading oder sehr kurzen Seiten funktionierten die Trigger für Scrolling und YouTube teils schlecht. Scrolling war oftmals zu schnell bei 100 % (bevor die Seite fertig geladen hatte) YouTube wurde oftmals nicht ausgelöst
  27. 27. Hack #3: Neue Scroll und YouTube Trigger
  28. 28. Hack #3: Neue Scroll und YouTube Trigger Aber bitte … • Aussagekraft Scroll Trigger? • Besser: Visibility Trigger • Denke an die Limits: 500 Hits/Session und 10 Mio. Hits/Monat • Wenn Video Trigger nicht funktionieren, kann das auch andere Ursachen haben, z. B. – Fehlender JS API Support • entweder „enablejsapi=1“ in Abruf-URLeinbinden • oder im GTM im YT Trigger den Haken setzen: – Fehlendes YouTube API Script • Einfach <script src="https://www.youtube.com/iframe_api"> per Custom HTML, Trigger: Pageview auf allen relevanten Seiten. Im Anschluss YT Trigger mind. auf DOM Ready verzögern.
  29. 29. Hack #4: Zeitgebundene Tags ausspielen Level Fähigkeit Dauer der Tag-Ausspielung regeln Dein Vorteil Weniger kümmern um Kampagnen- basierte Dinge Unabhängigkeit von Anwesenheit
  30. 30. Hack #4 Zeitgebundene Tags ausspielen Was, wenn bestimmte Tags nicht ständig laufen sollen? Was, wenn keiner Bock hat auf ständige Container- Veröffentlichungen (inkl. kompletter Testings)? Da gibt‘s nur eine Lösung ...
  31. 31. Tag Man
  32. 32. Hack #4: Zeitgebundene Tags ausspielen Anwendungsfälle Support-Tag/Chat-Bot soll nur zu Geschäftszeiten ausgespielt werden. Aktions-Hinweise sollen nur zu bestimmten Zeiten oder in einem bestimmten Zeitraum gesetzt werden. …
  33. 33. Hack #4: Zeitgebundene Tags ausspielen Möglichkeit im Tag selbst Schon ganz OK, aber immer noch etwas unflexibel
  34. 34. Hack #4: Zeitgebundene Tags ausspielen Noch besser: JavaScript nutzen. Wir brauchen Benutzerdefinierte JavaScript-Variable(n) (danke an Bounteous!)
  35. 35. Auf Tagesbasis, benutzerdefinierte JavaScript-Variable function() { var myTimeZone = 1; //UTC-Zeitzone ggf. anpassen var userTime = new Date(); var utc = userTime.getTime() + (userTime.getTimezoneOffset() * 60000); var currentDate = new Date(utc + (3600000 * myTimeZone)); var daysOfWeek = new Array(7); daysOfWeek[0] = "Sonntag"; daysOfWeek[1] = "Montag"; daysOfWeek[2] = "Dienstag"; daysOfWeek[3] = "Mittwoch"; daysOfWeek[4] = "Donnerstag"; daysOfWeek[5] = "Freitag"; daysOfWeek[6]= "Samstag"; return(daysOfWeek[currentDate.getDay()]); } Hack #4: Zeitgebundene Tags ausspielen
  36. 36. Auf Stundenbasis, benutzerdefinierte JavaScript-Variable function(){ var userTime = new Date(); var myTimeZone = 1; //ggf. UTC-Zeitzone anpassen var currentHour = (userTime.getTime()%(24*60*60*1000))/(60*60*1000)+ myTimeZone; if (currentHour < 0){ return (currentHour+24); } else { return (currentHour); } } Hack #4: Zeitgebundene Tags ausspielen
  37. 37. Hack #4: Zeitgebundene Tags ausspielen
  38. 38. INTENSE
  39. 39. Level Fähigkeit dataLayer.push nutzen Dein Vorteil Das ewige Gescrape reduzieren Zuverlässig Informationen in den DL legen
  40. 40. dataWHAT?
  41. 41. Was ist der dataLayer (oder auch „die Datenschicht“)? dataLayer Daten dataLayer Daten Daten Facebook uvm.
  42. 42. Hack #5: dataLayer.push nutzen dataLayer = „unsichtbare“ Informationsschicht, auf die der Tag Manager zugreifen kann. = wird vom Tag Manager permanent „abgehört“ = Werte können durch GTM z. B. in dataLayer Variablen eingelesen werden und stehen so für Tags und Trigger zur Verfügung. = gehört zum Tag Manager wie Tags, Trigger und Variablen
  43. 43. Hack #5: dataLayer.push nutzen Wer Informationen zuverlässig in den dataLayer bringen möchte, sollte „pushy“ werden, ohne ihn jedes Mal zu initialisieren. Dann „überschreibt“ man ihn nicht, sondern „fügt hinzu“. Daher dataLayer immer leer (und bitte nur ein Mal!!1elf!) initialisieren und Informationen pushen. window.dataLayer = window.dataLayer || []; //Initialisieren (nur 1x oberhalb des Container Code Snippets) window.dataLayer.push({ 'einSchluessel' : 'einWert' }); //später Push ohne Init
  44. 44. Hack #5: dataLayer.push nutzen Der dataLayer kann dann z. B. so aussehen: <script> window.dataLayer = window.dataLayer || []; window.dataLayer.push({ 'event': 'registrierung', 'loginStatus': 'logged in', 'eventCategory': 'click' }); </script> Event kann auch als Trigger für Tags dienen! Beliebige wichtige Information
  45. 45. Hack #5: dataLayer.push nutzen Anwendungsbeispiele: • Du bist Entwickler und möchtest Informationen für die Marketer bereitstellen, z. B. – Produktinformationen – Kauf-Informationen – Formular-Optionen – Sonstige Metadaten – … • Du bist Wordpress-Anwender und möchtest, dass Informationen für den CTA-Click für den Tag Manager zur Verfügung stehen.
  46. 46. Level Fähigkeit Nur die größte Scroll-Tiefe per Event senden Dein Vorteil Überflüssige Informationen reduzieren Hit-Anzahl begrenzen
  47. 47. Hack #6: Nur letzte Scroll Position schicken Vor allem bei kurzen Seiten und ohne Trigger-Verzögerung werden Scroll Events sehr schnell hintereinander gefeuert.
  48. 48. Hack #6: Nur letzte Scroll Position schicken Lösung: Wir senden nur die letzte Scroll-Position. Dafür -> Browser-Event „beforeunload“ nutzen (Dazu gedacht beim Nutzer nachzufragen, ob die Seite wirklich verlassen werden soll.) „Beforeunload“ reagiert (meist) bei Verlassen der Seite via Klick auf andere Seite oder anderen „unterbrechbaren“ Aktionen. Trigger: Sobald „beforeunload“-Event eintritt Custom HTML Tag, um „beforeunload“ zu bemerken <script> window.addEventListener('beforeunload', function() { window.dataLayer.push({ event: 'beforeunload' }); }); </script>
  49. 49. Hack #6: Nur letzte Scroll Position schicken • Wenn Custom HTML sauber installiert, sollte im Preview-Mode bei Exit-Klick folgendes erscheinen: • „beforeunload“-Event als Trigger für unser Scroll Event nutzen (ggf. für andere Events) • „Verlassen“ der Seite ist „unruhiges“ Gefilde … (heißt: Hit wird oft nicht übertragen, bevor der Seitenwechsel stattfindet)
  50. 50. Hack #6: Nur letzte Scroll Position schicken Lösung: Wir nutzen ein anderes Transport-Protokoll: Beacon • = neues HTML Feature, das asynchron sendet und damit genau diese Probleme beheben soll. • Wird voraussichtlich zukünftig sogar das bevorzugte Protokoll für GA. • Bewirkt, dass selbst ein Hit Callback noch ankommt. Haken an der Sache: Nicht jeder Browser unterstützt das. Allerdings ist Fallback immer die „normale“ Methode. Haken II: Debugging erschwert, da „Beacon“ bewirkt, dass Payload „unübersichtlich“ übertragen wird.
  51. 51. Hack #6: Nur letzte Scroll Position schicken Einbau in GA-Basis-Variable (oder dem konkreten Tag) als „festzulegendes Feld“.
  52. 52. Und alles wird gut
  53. 53. Level Fähigkeit Holt sich kopierten Text aus Zwischenablage Dein Vorteil Wissen, was Menschen kopieren Genau triggern
  54. 54. Was interessiert Menschen auf deiner Website?
  55. 55. Hack #7: Kopierten Text erfassen Benutzerdefiniertes HTML Tag • für markierten Text Event Listener • damit wir wissen, wann kopiert wird dataLayer-Variablen • um alles in den GTM zu holen Irgendwas Sinnvolles, das wir damit machen wollen • z. B. GA Event Zutaten
  56. 56. Hack #7: Kopierten Text erfassen Benutzerdefiniertes HTML Tag für markierten Text function getSelectionText() { var text = ''; if (window.getSelection) { text = window.getSelection().toString(); } else if (document.selection && document.selection.type != 'Control') { text = document.selection.createRange().text; } return text; } > http://stackoverflow.com/questions/5379120/get-the-highlighted-selected-text
  57. 57. Hack #7: Kopierten Text erfassen Zusätzlich in das HTML Tag einbauen: „Event Listener“ und „dataLayer.push“ für das „Kopieren“ document.addEventListener('copy', function(e){ dataLayer.push({ 'event': 'textKopiert', 'kopierterText': getSelectionText(), 'kopierterTextLaenge': getSelectionText().length }); }); > http://stackoverflow.com/questions/5379120/get-the-highlighted-selected-text
  58. 58. Hack #7: Kopierten Text erfassen Mix it up … Die brauchen wir gleich noch
  59. 59. Hack #7: Kopierten Text erfassen Dann noch Datenschichtvariablen und Trigger anlegen
  60. 60. Hack #7: Kopierten Text erfassen … und verarbeiten
  61. 61. Level Fähigkeit RegEx Tabelle statt Suchtabelle nutzen Dein Vorteil flexibler Besser Konsolidierung von Suchtabellen
  62. 62. Hack #8: RegEx-Tabelle statt Suchtabelle „Suchtabelle“ • Eingabewert (exakt) und gibt Ausgabewert zurück. • Hilfreich, aber stumpf! Weil kein Spielraum. Es geht flexibler …
  63. 63. Hack #8: RegEx-Tabelle statt Suchtabelle „RegEx-Tabelle“ • Eingabewert basiert auf regulären Ausdrücken und gibt Ausgabewert zurück. • Viiiiel Spielraum Zusätzliche Optionen! Darf auch Variable sein (z. B. weitere Suchtabelle)
  64. 64. Lerne reguläre Ausdrücke ^(?=.*?[A-Z]) (?=.*?[a-z]) (?=.*?[0-9]) (?=.*?[#?!@$%^&*- ]).{8,}$
  65. 65. Hack #8: RegEx-Tabelle statt Suchtabelle Hier kannst du RegEx lernen und testen • Super erklärt https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/ • https://regexone.com/ (interaktiv) • https://regex101.com/ (u. a. Test-Tool) • https://regexr.com/ (u. a. Test-Tool)
  66. 66. Level Fähigkeit Site-Search- Ordner als Suchbegriff übergeben Dein Vorteil Bordmittel von GA überlisten
  67. 67. Google Analytics braucht für Erfassung der Site Search eigentlich einen Suchparameter Was, wenn wir nur URL-Ordner haben? Hack #9: Site Search ohne Parameter
  68. 68. Benutzerdefiniertes JavaScript function() { var regex = /^/suchordner/(.*)/; //mit deinem Suchordner ersetzen var pagePath = '/suchordner/(.*)/‘; //mit deinem Suchordner ersetzen if(regex.test({{Page Path}})) { var searchTerm = regex.exec({{Page Path}})[1]; var NewUri = "/suchordner/?s=" + searchTerm; //mit deinem Suchordner ersetzen return NewUri; } return false; //sorgt dafür, dass der alte Wert nicht überschrieben wird, wenn kein Unterordner von /suchordner/ } Hack #9: Site Search ohne Parameter
  69. 69. GA Pageview Tag oder GA-Einstellungen-Variable anpassen Hack #9: Site Search ohne Parameter JS-Variable einbinden
  70. 70. Site-Search-Einstellungen in GA wie üblich Hack #9: Site Search ohne Parameter Optional, aber oft sinnvoll Suchparameter
  71. 71. Level Fähigkeit Filtert doppelte Transaktionen außerhalb der gleichen Sitzung Dein Vorteil Keine doppelten Transaktionen
  72. 72. Hack #10: Doppelte Transaktionen vermeiden E-Commerce Transaktionen Pro Sitzung dürfen mehrere vorkommen … jedoch nicht mit der gleichen Transaktions-ID innerhalb der gleichen Sitzung (GA filtert diese automatisch) … aaaaber: sitzungsübergreifend geht das dennoch …
  73. 73. Hack #10: Doppelte Transaktionen vermeiden So sieht das aus … Eigentlich darf da nur „1“ stehen …
  74. 74. Hack #10: Doppelte Transaktionen vermeiden Wie verhindern wir doppelte Transaktionen? Nachträglich korrigieren (Rückerstattung) • Nur mit Enhanced E-Commerce • Verzerrt die Berichte (z. B. wenn nicht am gleichen Tag korrigiert wird) Verhindern, dass der Nutzer die Danke-Seite ein weiteres Mal mit Transaktions-Daten aufrufen kann • Transaktionsdaten entfernen bei Refresh, neuer Sitzung, Back-Button, … Serverseitig verhindern, dass die Transaktion doppelt gezählt wird • in der Regel die beste Lösung, aber eben kein GTM-Hack  Mithilfe des GTM verhindern, dass Transaktion doppelt gezählt wird (Lösung hier)
  75. 75. Hack #10: Doppelte Transaktionen vermeiden Wie können wir das Zählen doppelter Transaktionen verhindern? • Z. B. mittels Cookie-Check und Zeitstempel (Lösung von von Bounteous unter https://www.bounteous.com/insights/2014/07/07/duplicate-transactions/?ns=l) • Oder Prüfung mittels Custom-Task*-Variable im local Storage, ob die Transaktions-ID vorhanden ist (hier behandelte Lösung von Simo Ahava unter https://www.simoahava.com/analytics/prevent-google-analytics-duplicate- transactions-with-customtask/) *Custom Task: Schon beim Erzeugen des Hits via „send“ werden die Daten des Treffers direkt zu Beginn modifiziert.
  76. 76. Hack #10: Doppelte Transaktionen vermeiden Benutzerdefiniertes JavaScript „customtask – transaction deduper“ function() { // customTask Builder by Simo Ahava // // More information about customTask: https://www.simoahava.com/analytics/customtask-the-guide/ // // Change the default values for the settings below. // transactionDeduper: Configuration object for preventing duplicate transactions from being recorded. // https://bit.ly/2AvSZ2Y var transactionDeduper = { keyName: '_transaction_ids', cookieExpiresDays: 365 }; // DO NOT EDIT ANYTHING BELOW THIS LINE var readFromStorage = function(key) { if (!window.Storage) { // From: https://stackoverflow.com/a/15724300/2367037 var value = '; ' + document.cookie; var parts = value.split('; ' + key + '='); if (parts.length === 2) return parts.pop().split(';').shift(); } else { return window.localStorage.getItem(key); } }; var writeToStorage = function(key, value, expireDays) { if (!window.Storage) { var expiresDate = new Date(); expiresDate.setDate(expiresDate.getDate() + expireDays); document.cookie = key + '=' + value + ';expires=' + expiresDate.toUTCString(); } else { window.localStorage.setItem(key, value); } }; var globalSendHitTaskName = '_ga_originalSendHitTask'; return function(customTaskModel) { window[globalSendHitTaskName] = window[globalSendHitTaskName] || customTaskModel.get('sendHitTask'); var tempFieldObject, dimensionIndex, count, ga, tracker, decorateTimer, decorateIframe, iframe; customTaskModel.set('sendHitTask', function(sendHitTaskModel) { var originalSendHitTaskModel = sendHitTaskModel, originalSendHitTask = window[globalSendHitTaskName], canSendHit = true; var hitPayload, hitPayloadParts, param, val, regexI, trackingId, snowplowVendor, snowplowVersion, snowplowPath, request, originalTrackingId, hitType, nonInteraction, d, transactionId, storedIds; try { // transactionDeduper if (typeof transactionDeduper === 'object' && transactionDeduper.hasOwnProperty('keyName') && transactionDeduper.hasOwnProperty('cookieExpiresDays') && typeof sendHitTaskModel.get('&ti') !== 'undefined') { transactionId = sendHitTaskModel.get('&ti'); storedIds = JSON.parse(readFromStorage(transactionDeduper.keyName) || '[]'); if (storedIds.indexOf(transactionId) > -1 && ['transaction', 'item'].indexOf(sendHitTaskModel.get('hitType')) === -1) { canSendHit = false; } else if (storedIds.indexOf(transactionId) === -1) { storedIds.push(transactionId); writeToStorage(transactionDeduper.keyName, JSON.stringify(storedIds), transactionDeduper.cookieExpiresDays); } } // /transactionDeduper if (canSendHit) { originalSendHitTask(sendHitTaskModel); } } catch(e) { originalSendHitTask(originalSendHitTaskModel); } }); }; }
  77. 77. Hack #10: Doppelte Transaktionen vermeiden Ein paar Variablen … Datenschichtvariable 1st Party Cookie Custom JavaScript
  78. 78. Hack #10: Doppelte Transaktionen vermeiden … und ein Blocking-Trigger – sowie die Verwendung im Tag Blocking-Trigger Verwendung des Blocking-Triggers im Tag
  79. 79. Level Fähigkeit Dokumentation des GTM Containers Dein Vorteil Nicht alles per Hand abschreiben
  80. 80. Du vergisst sonst sowieso alles … Und noch schlimmer: Niemand anderer blickt das noch. Du dokumentierst doch, oder?
  81. 81. Hack #11: Dokumentation leicht gemacht Lass dir von Tools helfen. Export des jeweiligen GTM-Containers Schreib‘s alles auf … oder -> GTM Tools von Simo Ahava (Chrome Plugin, nicht das andere  )
  82. 82. GTM Tools for Spreadsheets Hack #11: Dokumentation leicht gemacht
  83. 83. Hack #11: Dokumentation leicht gemacht
  84. 84. Hack #11: Dokumentation leicht gemacht
  85. 85. Hack #11: Dokumentation leicht gemacht
  86. 86. Hack #11: Dokumentation leicht gemacht
  87. 87. Hack #11: Dokumentation leicht gemacht • Einträge in „Notes“ machen – Wer hat was angefordert? – Wer hat umgesetzt? – Was war der Zweck? • Upload:
  88. 88. OVERKILL
  89. 89. Level Fähigkeit „Rohdaten“ nachbauen. Wir tun so als wäre GA = GA360 Dein Vorteil Wir können die Daten besser weiterverarbeiten Debugging wird leichter
  90. 90. Die Herausforderung: GA (kostenlos) aggregiert Daten für uns Hack #12: „Rohdaten“ nachbauen Die Herausforderung: GA (kostenlos) aggrogiert Daten für uns
  91. 91. Hack #12: „Rohdaten“ nachbauen vs
  92. 92. Hack #12: „Rohdaten“ nachbauen
  93. 93. Hack #12: „Rohdaten“ nachbauen Warum Rohdaten? • In welcher Reihenfolge fanden die Hits statt? • Welche werden welcher Session und welchem Client zugerechnet? • Scope-übergreifende Berichte ermöglichen. Daher: Manchmal brauchen wir sie einzeln und UNaggregiert We need RAW …
  94. 94. Hack #12: „Rohdaten“ nachbauen „Rohdaten“ bedeutet, dass wir ein paar Dinge brauchen Session ID Zeitstempel Client ID Hit Type Zutaten
  95. 95. Hack #12: „Rohdaten“ nachbauen Zutaten In der GA Property „benutzerdefinierte Dimensionen“ anlegen Auf Scope achten!
  96. 96. Hack #12: „Rohdaten“ nachbauen Und dann rein damit … ClientID Custom-JavaScript-Variable anlegen (Indexnummer!). Diese im GA-Tag oder den GA-Einstellungen per customTask nutzen cJS – clientIdToDimension1
  97. 97. Hack #12: „Rohdaten“ nachbauen Und dann rein damit … Hit Type Custom-JavaScript-Variable anlegen (Indexnummer!). Diese im GA-Tag oder den GA-Einstellungen per customTask nutzen.
  98. 98. Hack #12: „Rohdaten“ nachbauen Short break: Custom Task darf nur 1x je GA Tag rein! Also konsolidieren und nur 1x in GA Tags! Siehe nächste Seite. Danke an Simo Ahava für den Custom Task Builder! https://www.simoahava.com/tools/customtask-builder/#the-customtask-builder-tool Nicht ganz trivial für Nicht-Developer …
  99. 99. function() { var clientIdIndex = 1; var hitTypeIndex = 6; // DO NOT EDIT ANYTHING BELOW THIS LINE var readFromStorage = function (key) { if (!window.Storage) { // From: https://stackoverflow.com/a/15724300/2367 037 var value = '; ' + document.cookie; var parts = value.split('; ' + key + '='); if (parts.length === 2) { return parts.pop().split(';').shift(); } } else { return window.localStorage.getItem(key); } }; var writeToStorage = function (key, value, expireDays) { if (!window.Storage) { var expiresDate = new Date(); expiresDate.setDate(expiresDate.getDate() + expireDays); document.cookie = key + '=' + value + ';expires=' + expiresDate.toUTCString(); } else { window.localStorage.setItem(key, value); } }; var globalSendHitTaskName = '_ga_originalSendHitTask'; return function (customTaskModel) { window[globalSendHitTaskName] = window[globalSendHitTaskName] || customTaskModel.get('sendHitTask'); // clientIdIndex if (typeof clientIdIndex === 'number') { customTaskModel.set('dimension' + clientIdIndex, customTaskModel.get('clientId')); } // /clientIdIndex // hitTypeIndex if (typeof hitTypeIndex === 'number') { customTaskModel.set('dimension' + hitTypeIndex, customTaskModel.get('hitType')); } // /hitTypeIndex customTaskModel.set('sendHitTask', function (sendHitTaskModel) { var originalSendHitTaskModel = sendHitTaskModel, originalSendHitTask = window[globalSendHitTaskName], canSendHit = true; try { if (canSendHit) { originalSendHitTask(sendHitTaskModel); } } catch(err) { originalSendHitTask(originalSendHitTaskMod el); } }); }; }
  100. 100. Hack #12: „Rohdaten“ nachbauen Und dann rein damit … SessionID Custom-JavaScript-Variable anlegen (Zufallszahl setzen) Diese im GA-Tag oder den GA-Einstellungen nutzen
  101. 101. Hack #12: „Rohdaten“ nachbauen Und dann rein damit … Zeitstempel Custom-JavaScript-Variable anlegen Diese im GA-Tag oder den GA-Einstellungen nutzen
  102. 102. Hack #12: „Rohdaten“ nachbauen Und wofür der ganze Stress? Dafür: Oder um die Daten anderweitig zu nutzen: Segmente, Berichte, Plakate, …
  103. 103. Level Fähigkeit Sendet GA Hits an mehr als eine Property Dein Vorteil Du sparst dir das Anlegen mehrerer Tags, die das Gleiche tun. Dein Tracking wird flexibler
  104. 104. Hack #13: Hits an mehrere Propertys senden Benutzerdefiniertes JavaScript (Name hier: „cJS – customTask hit duplicator“) function() { // Replace newTrackingId value with the UA property to which you want to duplicate this tag var newTrackingId = 'UA-XXXXX-Y‘; var globalSendTaskName = '_' + newTrackingId + '_originalSendTask‘; return function(customModel) { window[globalSendTaskName] = window[globalSendTaskName] || customModel.get('sendHitTask‘); customModel.set('sendHitTask', function(sendModel) { var hitPayload = sendModel.get('hitPayload‘); var trackingId = new RegExp(sendModel.get('trackingId'), 'gi‘); window[globalSendTaskName](sendModel); sendModel.set('hitPayload', hitPayload.replace(trackingId, newTrackingId), true); window[globalSendTaskName](sendModel); }); }; } > https://www.simoahava.com/gtm-tips/send-google-analytics-tag-multiple-properties/
  105. 105. Hack #13: Hits an mehrere Propertys senden Custom Task zu Google Analytics Einstellungen oder zu entsprechenden Hits hinzufügen Nicht vergessen: Custom Task nur 1x je Tag ausführen! Ggf. kombinieren.
  106. 106. Hacks: Tooltime Anwendungsgebiet Fähigkeit diverse Dein Vorteil Höher, schneller, weiter
  107. 107. Hack #14: Tooltime: Injection Level Fähigkeit Tag Manager ohne Installation nutzen Dein Vorteil Du musst nicht auf die IT warten Du kannst Gas geben
  108. 108. Hack #14: Tooltime: Injection „Tag Manager Injector“ „Analytics Pros dataLayer Inspector+“ Chrome Plugins
  109. 109. Level Fähigkeit GTM Copy & Paste Dein Vorteil Elemente des GTM kopieren und einfügen Du sparst dir Export und Import eines Containers Du musst den Tag Manager nicht verlassen
  110. 110. Hack #15: Tooltime: Copy & Paste Chrome Plugin
  111. 111. Hack #15: Tooltime: Copy & Paste Beachten Wenn Tag einen Trigger beinhaltet, sollte dieser ggf. mitkopiert werden. Ansonsten wird der Trigger automatisch entfernt.
  112. 112. Level Fähigkeit GTM Spy Dein Vorteil Tag Manager Container „ausspionieren“ Verstehen, wie andere es machen Gute Lösungen nachbauen
  113. 113. Hack #16: Tooltime: GTM Spy https://gtmspy.com/ ©Dustin Recko, um veröffentlichte Container auszulesen. Tags, Trigger und Variablen können so eingesehen werden.
  114. 114. Hack #16: Tooltime: GTM Spy
  115. 115. BABO-Hack: Nutze den GTM Anwendungsgebiet GTM Allgemein Fähigkeit Nutze den GTM Dein Vorteil Er macht dich schneller, … … flexibler … … besser.
  116. 116. LIKEABOSS
  117. 117. © 121WATT Hörbuch “Dein Weg zum Webanalysten” • Deine Abkürzung zum beruflichen Erfolg • Über 5 Stunden (!) Inhalt PLUS Bonusmaterial • Wie du Webanalyst wirst und wo dein Startpunkt ist • Wie du Unternehmen mit Webanalyse weiterbringst • Zugang zu einer geschlossenen Facebook-Gruppe zum Austausch
  118. 118. Du bist mein #analyseheld
  119. 119. Biddeschön! @brunsmaik@maikbrunsmetrika@maikbruns Maik Bruns Analytics Professional undCoach maik.bruns@metrika.de Trag‘ dich ein: https://go.metrika.de /GMPCON19 inkl. Container mit Code und Co. FOLLOW ME FOR STORIES, LIVESTREAMS, INSIGHTS

×