Kontaktujte nás a dohodnite si s nami stretnutie v Bratislave, vo Zvolene alebo aj v San Franciscu. Radi Vám pomôžeme s Vašim projektom.
PPC
Scroll Tracking pomocou nástroja Google Tag Manager
25. apríla 2018
PPC
25. apríla 2018
Upozornenie:
Kým začnete čítať o Scroll Trackingu a GTM, odporúčam pozrieť si moje predchádzajúce články, v ktorých som priblížil službu GTM a jej funkcie. Ak už máte základy v malíčku, môžeme smelo vykročiť k pokročilejším implementáciám pomocou služby Google Tag Manager. Tak poďme priamo do deja…
Trackovanie skrolovania môžeme síce nastaviť aj z preddefinovaných triggerov a premenných v Google Tag Manager,no tento príspevok sa bude týkať jeho nasadenia cez custom HTML kód, ktorý sa nám osvedčil.
Existuje veľa vecí, ktoré môžeme urobiť pomocou nástroja GTM, od inštalácie značiek tretích strán až k sledovaniu stiahnutia súborov alebo merania toho, kam sa až dočítal človek, ktorý bol na našej stránke.
V tomto článku si vysvetlíme, ako odoslať konkrétne eventy do Google Analytics, do akej miery ľudia posúvajú – skrolujú stránku nadol. Na začiatok je dobré položiť si jednoduchú otázku…
V Google Analytics sú niektoré metriky, ktoré nie sú až také podstatné ako napríklad bounce rate alebo to, ako dlho bol niekto na našej stránke. Tieto metriky nám však nepovedia celý príbeh, ktorý môžeme vedieť na základe tohto trackovania.
Povedzme, že používame čas na stránke ako metriku – čo sa stane, ak strávi niekto na našej stránke 10 minút? Je to určite dobrá vec, no o vnímaní obsahu nám to nepovie nič. Nezodpovedané tak zostávajú otázky typu: Je obsah zaujímavý? Našiel návštevník to, čo hľadal?
Bounce rate má podobné problémy. Ak návštevník príde na kontaktnú stránku a odíde hneď, nemôžme tvrdiť, že našiel informácie, ktoré hľadal. Tento príklad len podčiarkuje dôležitosť sledovania cieľov a konverzií v analytics. Riešením sú dobré a osvedčené nástroje Hotjar, ktoré mne osobne prídu vhodné na zaznamenávanie správania používateľov.
Bez ohľadu na tieto príklady si myslím, že je jasné, že sa nemôžeme spoliehať iba na bounce rate alebo čas strávený na stránke ako metriky interakcie. V tejto chvíli prichádza na rad hĺbka skrolovania.
Schopnosť trackovať hĺbku skrolovania (aspoň moja verzia – existujú aj iné metódy) zahŕňa plugin ktorý vytvoril Rob Flaherty. Tento plugin, ktorý používa jQuery na zaznamenávanie údajov v GA odosiela eventy do služby Google Analytics na rôznych bodoch stránok – Baseline (0%), 25%, 50%., 75% a 100% – každý signalizuje iný bod, ktorý je vo vzťahu k hornej a spodnej stránky.
Je tu niekoľko požiadaviek, ktoré musíme mať na dokončenie tohto návodu:
Prvú vec, ktorú musíme vytvoriť, je prejsť na webovú stránku v GTM a nájsť kontajner v ktorom chceme pracovať.
Pred tým, ako vytvoríme našu značku, odporúčam vytvoriť trigger, ktorý zabezpečí, že sa skript na meranie hĺbky posúvania spustí, keď je DOM pripravený.
Čo je DOM? No, to je celkom dobrá otázka! Je to skratka z Document Object Model a reprezentuje všetky veci ako tagy, divy, zoznamy položiek v dokumente HTML. DOM poskytuje metódu pre spoluprácu jazyka JavaScript so všetkými týmito „uzlami“. DOM trigger, ktorý vytvoríme, znamená, že značka sa po spustení prehliadača skončí s vytvorením celej stránky DOM.
Ak chceme vytvoriť trigger, prejdeme do sekcie „triggers“ v službe GTM.
Tu klikneme na tlačidlo „nové“. Označíme svoju značku „DOM Ready“ a pridáme značku DOM Ready zo sekcie zobrazenie stránky.
Trigger by mal vyzerať podobne ako ten nižšie:
Predtým, ako sa pohneme na ďalší krok, klikneme na „Uložiť“
Ďalej budeme potrebovať nový tag. Klikneme na „tagy“ v ľavom menu:
Tu klikneme na „nový“ a vyberieme „Custom HTML“
Potom by sme mali prejsť na nasledujúcu URL adresu a skopírovať celý súbor scrolldepth.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 |
/*! * @preserve * jquery.scrolldepth.js | v0.4.1 * Copyright (c) 2014 Rob Flaherty (@robflaherty) * Licensed under the MIT and GPL licenses. */ ;(function ( $, window, document, undefined ) { "use strict"; var defaults = { elements: [], minHeight: 0, percentage: true, testing: false }, $window = $(window), cache = []; /* * Plugin */ $.scrollDepth = function(options) { var startTime = +new Date; options = $.extend({}, defaults, options); // Return early if document height is too small if ( $(document).height() < options.minHeight ) { return; } // Establish baseline (0% scroll) sendEvent('Percentage', 'Baseline'); /* * Functions */ function sendEvent(action, label, timing) { if (!options.testing) { if (typeof(dataLayer) !== "undefined") { dataLayer.push({'event':'ScrollDistance', 'eventCategory':'Scroll Depth', 'eventAction': action, 'eventLabel': label, 'eventValue': 1, 'eventNonInteraction': true}); if (arguments.length > 2) { dataLayer.push({'event':'ScrollTiming', 'eventCategory':'Scroll Depth', 'eventAction': action, 'eventLabel': label, 'eventTiming': timing}); } } else { if (typeof(ga) !== "undefined") { ga('send', 'event', 'Scroll Depth', action, label, 1, {'nonInteraction': 1}); if (arguments.length > 2) { ga('send', 'timing', 'Scroll Depth', action, timing, label); } } if (typeof(_gaq) !== "undefined") { _gaq.push(['_trackEvent', 'Scroll Depth', action, label, 1, true]); if (arguments.length > 2) { _gaq.push(['_trackTiming', 'Scroll Depth', action, timing, label, 100]); } } } } else { $('#console').html(action + ': ' + label); } } function calculateMarks(docHeight) { return { '25%' : parseInt(docHeight * 0.25, 10), '50%' : parseInt(docHeight * 0.50, 10), '75%' : parseInt(docHeight * 0.75, 10), // 1px cushion to trigger 100% event in iOS '100%': docHeight - 1 }; } function checkMarks(marks, scrollDistance, timing) { // Check each active mark $.each(marks, function(key, val) { if ( $.inArray(key, cache) === -1 && scrollDistance >= val ) { sendEvent('Percentage', key, timing); cache.push(key); } }); } function checkElements(elements, scrollDistance, timing) { $.each(elements, function(index, elem) { if ( $.inArray(elem, cache) === -1 && $(elem).length ) { if ( scrollDistance >= $(elem).offset().top ) { sendEvent('Elements', elem, timing); cache.push(elem); } } }); } /* * Throttle function borrowed from: * Underscore.js 1.5.2 * http://underscorejs.org * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Underscore may be freely distributed under the MIT license. */ function throttle(func, wait) { var context, args, result; var timeout = null; var previous = 0; var later = function() { previous = new Date; timeout = null; result = func.apply(context, args); }; return function() { var now = new Date; if (!previous) previous = now; var remaining = wait - (now - previous); context = this; args = arguments; if (remaining <= 0) { clearTimeout(timeout); timeout = null; previous = now; result = func.apply(context, args); } else if (!timeout) { timeout = setTimeout(later, remaining); } return result; }; } /* * Scroll Event */ $window.on('scroll.scrollDepth', throttle(function() { /* * We calculate document and window height on each scroll event to * account for dynamic DOM changes. */ var docHeight = $(document).height(), winHeight = window.innerHeight ? window.innerHeight : $window.height(), scrollDistance = $window.scrollTop() + winHeight, // Recalculate percentage marks marks = calculateMarks(docHeight), // Timing timing = +new Date - startTime; // If all marks already hit, unbind scroll event if (cache.length >= 4 + options.elements.length) { $window.off('scroll.scrollDepth'); return; } // Check specified DOM elements if (options.elements) { checkElements(options.elements, scrollDistance, timing); } // Check standard marks if (options.percentage) { checkMarks(marks, scrollDistance, timing); } }, 500)); }; })( jQuery, window, document ); jQuery.scrollDepth(); |
Po skopírovaní vložíme kód do prázdneho poľa HTML v GTM
Tento script potom vytvorí dataLayer a pushne doň scroll tracking event stále, keď sa spustí.
Eventy v službe GTM však nie sú prepojené do služby Google Analytics. Na to potrebujeme osobitnú značku v GTM, aby sme odoslal eventy do služby GA. Toto za chvíľu vytvoríme.
Po pridaní vyššie uvedeného kódu pridáme trigger, ktorý sme si vytvorili už predtým.
Náš tag by mal vyzerať ako na obrázku nižšie. Na záver si ho pomenujeme tak, aby sme sa v tom vyznali – v mojom prípade to bude „Scroll Tracking“
Ďalej je potrebné vytvoriť premenné, ktoré definujú časti eventov, aby sme ich mohli poslať do Google Analytics. Nezabudnite, že eventy v GTM nie sú rovnaké ako eventy v službe Analytics.
Eventy služby Google Analytics pozostávajú zo štyroch komponentov: Category, Action, Label a Value. Posledné dva z nich nie sú povinné.
Každý z nich vytvoríme ako premenné v GTM. Prečo? Pretože na odosielanie eventov z GTM do GA musíme definovať tieto komponenty vytiahnutím informácií z dataLayer-u. Po vytvorení týchto premenných potom vytvoríme tag Google Analytics, ktorý bude nastavený na event, ktorý sa následne bude posielať do služby Google Analytics.
Ak chceme vytvoriť nové premenné, prejdeme na príslušnú sekciu z výberu na ľavej strane:
Klikneme na položku „nové“ a pomenujeme svoju prvú premennú „eventCategory“. Vyberte typ ako „DataLayer Variable“ a potom zadajte názov premennej ako „eventCategory“. Ponechajte ich na verzii 2. Kliknete na položku Uložiť. Naša premenná by mala vyzerať takto:
Tieto kroky zopakujeme pre premenné pre Action, Label a Value. Ako názov premennej dáme nasledovné:
Nižšie uvedené screenshoty ukazujú, ako by mali vyzerať nasledovné premenné. Je dôležité dodržať názvy týchto premenných tak, ako sú tu napísané.
Teraz, keď máme naše premenné, tak môžeme posielať informácie, ktoré náš JavaScript na sledovanie skrolovania pushne do dataLayeru.
Vráťme sa späť do sekcie značiek, klikneme na „Nové“ a vybertieme položku „Universal Analytics“. Zadáme sem svoje Google Analytics ID (Tracking ID) a vyberieme ako typ „Event“
Teraz máme možnosť vstúpiť do premenných, ktoré sme práve vytvorili. Kliknite na tlačidlo stavebnej kocky vpravo od každého z textových polí Category, Actrion, Label a Value a vyberieme príslušnú premennú:
Posledná vec, ktorú musíme urobiť, je nastaviť trigger. Vyberieme si event „Custom Event“, kde bude názov eventu „ScrollDistance“. Tento trigger uložíme a následne uložíme aj tag.
Keď si dáme Preview mode v GTM, aby sme si skontrolovali či sa naša značka spúšťa správne, tak okno s náhľadom by malo obsahovať tieto značky:
Po niekoľkých hodinách budeme môcť analyzovať výsledky implementácie sledovania skrolovania v prehľade eventov v službe Google Analytics. Ak chceme zobraziť prehľad, navštívime službu Google Analytis. Budeme musieť prejsť na prehľady „Správanie“ v sekcii GA – konkrétne v sekcii eventy:
Keď sa tu objavíme, uvidíme eventy v grafoch ako vo väčšine ostatných prehľadov:
Ak chceme získať rozpis eventov, klikneme na položku „Event Label“ pod časťou „Top Events“ v ľavom dolnom rohu obrazovky. Potom dostaneme rozpis tak, ako môžeme vidieť nižšie:
Poznámka: Názory vyjadrené v tomto článku sú názory autora.
K online marketingu som sa dostal vďaka vlastnému internetovému projektu v roku 2011. V poslednej dobe sa špecializujem hlavne na výkonnostný online marketing - teda platenú reklamu vo vyhľadávaní na sociálnych sieťach a propagáciu prostredníctvom bannerov na rôznych webových stránkach. Veľmi rád sa venujem vzdelávaniu nových zamestnancov resp. stážistov, pričom svoje skúsenosti pravidelne prezentujem aj na odborných školeniach a worskhopoch.
Kontaktujte nás a dohodnite si s nami stretnutie v Bratislave, vo Zvolene alebo aj v San Franciscu. Radi Vám pomôžeme s Vašim projektom.
Ak chcete dostávať naše zaujímavé články a novinky, určite sa pridajte do nášho mailing listu.