GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

69
Reaktor Mannerheimintie 2 00100, Helsinki Finland tel: +358 9 4152 0200 www.reaktor.com [email protected] Confidential ©2015 Reaktor All rights reserved measuring content success Google Tag Manager & Google Analytics Simo Ahava Senior Data Advocate

Transcript of GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Page 1: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

ReaktorMannerheimintie 200100, Helsinki Finland

tel: +358 9 4152 [email protected]

Confidential©2015 ReaktorAll rights reserved

measuring content successGoogle Tag Manager & Google Analytics

Simo AhavaSenior Data Advocate

Page 2: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Simo AhavaSenior Data Advocate, ReaktorGoogle Developer Expert, Google AnalyticsBlogger, developer, www.simoahava.comTwitter-er, @SimoAhavaGoogle+:er, +SimoAhava

Page 3: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

@SimoAhava from @ReaktorNow | #GAUCbe | 25 Aug 2016

Why customize?Google Analytics is GREAT out-of-the-box, right?

Page 4: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

PAGEVIEWS

BOUNCE AND CONVERSION RATE

SESSIONS

Page 5: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Analytics Session

Group of interactions that takes place on a website

That expires after 30 minutes of inactivity…

Or at the end of they day…

Or when acquisition campaign changes… Unless the referral is in the Referral Exclusion List…

Or traffic is cross-domain, and cross-domain tracking is implemented… Unless it’s implemented incorrectly… Which is likely since it’s so !#/%(“% difficult…

Unless you’re using Google Tag Manager… Except if you’ve implemented THAT incorrectly…

There’s also the sessionControl parameter…

Lets not forget mobile and single-page apps!

Who knows what else happens server-side?

Cookies, localStorage, persistent data stores!?

Page 6: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

@SimoAhava from @ReaktorNow | #2015ac | 8–11

X

Page 7: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

All metrics and dimensions used by a platform subscribe to the definitions

of said platform!

GPeC Summit 11-May-2015 | @SimoAhava

Page 8: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

All metrics and dimensions used by a platform subscribe to the definitions

of said platform!

GPeC Summit 11-May-2015 | @SimoAhava

sessionized

Page 9: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

@SimoAhava from @ReaktorNow | #GAUCbe | 25 Aug 2016

Google Tag ManagerThe best only way to deploy Google Analytics tracking

Page 10: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing
Page 11: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Tag ManagerLets you create and deploy tracking and measurement scripts with ease.

Page 12: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Tag ManagerLets you create and deploy tracking and measurement scripts with ease.

Facilitates interaction between variousdepartments within your organization.

Page 13: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Tag ManagerLets you create and deploy tracking and measurement scripts with ease.

Facilitates interaction between variousdepartments within your organization.

Allows you to focus your time on analysisrather than implementation.

Page 14: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Tag Manager

https://analyticsacademy.withgoogle.com/course/5

Page 15: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

@SimoAhava from @ReaktorNow | #GAUCbe | 25 Aug 2016

Tricks and methods…for content marketing via Google Tag Manager…

Page 16: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

WHY?

Page 17: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

WHY?

Scroll% & Read%

Page 18: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

WHY?

SERP Bounce Time

Page 19: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

WHY?

Content Funnel

Page 20: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

WHY?

Article performance

Page 21: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

WHY?

http://goo.gl/rN4VpW

Page 22: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

#1: Track Structured Data As Content Attributes

Page 23: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

function() { var jsonLd = document.querySelector('script[type*="ld+json"]'); return jsonLd ? JSON.parse(jsonLd.innerHTML) : {};}

Custom JS Variable 1: {{JSON-LD}}

Page 24: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

function() { return {{JSON-LD}}.author.name || undefined;}

Custom JS Variable 2: {{JSON-LD - author.name}}

Page 25: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

function() { return {{JSON-LD}}.datePublished || undefined;}

Custom JS Variable 3: {{JSON-LD - datePublished}}

Page 26: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

function() { return {{JSON-LD}}.headline || undefined;}

Custom JS Variable 4: {{JSON-LD - headline}}

Page 27: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Analytics View Settings

Page 28: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Tag Manager - Page View Tag

Page 29: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Analytics - Site Content - All Pages

Page 30: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

#2: Article Attributes As Content Groups

http://goo.gl/uQi71z

Page 31: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Custom JS Variable: {{JS - Blog Images}}

function() { // Make sure the selector points to your content element var content = document.querySelector('.entry-content'); var imgs = content.querySelectorAll('img').length - 1; if (imgs>20) return '21+'; else if (imgs>15) return '16-20'; else if (imgs>10) return '11-15'; else if (imgs>7) return '8-10'; else if (imgs>5) return '6-7'; else if (imgs>3) return '4-5'; else if (imgs>1) return '2-3'; else if (imgs>0) return '1'; else return '0';}

Page 32: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Custom JS Variable: {{JS - Blog Length}}

function() { // Make sure the selector matches your content element var content = document.querySelector('.entry-content'); var wCount = 0; var cText = content.textContent || content.innerText; cText = cText.replace(/(^\s*)|(\s*$)/gi,''); cText = cText.replace(/[ ]{2,}/gi,' '); cText = cText.replace(/\n /,'\n'); wCount = cText.split(' ').length; if (wCount>3000) return '3k+'; else if (wCount>2500) return '2.5k-3k'; else if (wCount>2000) return '2k-2.5k'; else if (wCount>1500) return '1.5k-2k'; else if (wCount>1100) return '1.1k-1.5k'; else if (wCount>800) return '800-1.1k'; else if (wCount>500) return '500-800'; else if (wCount>200) return '200-500'; else return '<200';}

Page 33: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Custom JS Variable: {{JS - Blog Title Length}}

function() { var title = document.title; var wCount; title = title.replace(/(^\s*)|(\s*$)/gi,''); title = title.replace(/[ ]{2,}/gi,' '); wCount = title.split(' ').length; if (wCount>20) return '21+'; else if (wCount>16) return '17-20'; else if (wCount>12) return '13-16'; else if (wCount>10) return '11-12'; else if (wCount>8) return '9-10'; else if (wCount>6) return '7-8'; else if (wCount>4) return '5-6'; else if (wCount>2) return '3-4'; else return '<3';}

Page 34: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Page View Tag

Page 35: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Google Analytics - Site Content - All Pages

Page 36: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://support.google.com/analytics/answer/2853423?hl=en

You can create up to five Content Groupings."

Page 37: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://support.google.com/analytics/answer/2853423?hl=en

You can create up to five Content Groupings."

Page 38: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://support.google.com/analytics/answer/2853423?hl=en

You can create up to five Content Groupings."

Page 39: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://support.google.com/analytics/answer/2853423?hl=en

"W

You can create up to five Content Groupings.

Page 40: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://support.google.com/analytics/answer/2853423?hl=en

"W T

You can create up to five Content Groupings.

Page 41: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://support.google.com/analytics/answer/2853423?hl=en

"W T F

You can create up to five Content Groupings.

Page 42: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

https://developers.google.com/analytics/devguides/collection/analyticsjs/custom-dims-mets

There is a maximum of 20 CustomDimensions (200 for Premium…)"

Page 43: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

#3: Measure SERP Bounce Time

http://goo.gl/jzQXD2

Page 44: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Total SERP

Average Dwell Time Before Bounce

Page 45: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

<script> (function() { var s = document.location.search; var h = document.location.hash; var e = {{Event}}; var n = {{New History Fragment}}; var o = {{Old History Fragment}}; // Only run if the History API is supported if (window.history) {

// Create a new history state if the user lands from Google's SERP if (e === 'gtm.js' && document.referrer.indexOf('www.google.') > -1 && s.indexOf('gclid') === -1 && s.indexOf('utm_') === -1 && h !== '#gref') { window.oldFragment = false; window.history.pushState(null,null,'#gref'); } else if (e === 'gtm.js') { window.oldFragment = true; }

// When the user tries to return to the SERP using browser back, fire the // Google Analytics timing event, and after it's dispatched, manually // navigate to the previous history entry, i.e. the SERP if (e === 'gtm.historyChange' && n === '' && o === 'gref') { var time = new Date().getTime() - {{DLV - gtm.start}}; if (!window.oldFragment) { dataLayer.push({ 'event' : 'returnToSerp', 'timeToSerp' : time, 'eventCallback' : function() { window.history.go(-1); } }); } else { window.history.go(-1); } } } })();</script>

Custom HTML Tag

Page 46: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Triggers for the Custom HTML Tag

+ All Pages

Page 47: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Data Layer Variables

Page 48: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Trigger for the Event Tag

Page 49: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Custom JS Variable: {{JS - SERP Time In Seconds}}

function() { return {{DLV - timeToSerp}} < 1800000 ? {{DLV - timeToSerp}} / 1000 : undefined;}

Page 50: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

GA Admin -> Property Settings -> Custom Definitions -> Custom Metrics

Page 51: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Event Tag

Page 52: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

GA View Settings -> Calculated Metrics

Page 53: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Custom Report

Page 54: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Total SERP

Average Dwell Time Before Bounce

Page 55: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

#4: Track Content Engagement

http://goo.gl/DkoTox

Page 56: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

x5x10x7x7x8x8x9

Interactive Time = Time when user is actively interacting with the page (keyboard and mouse)

Page 57: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

<script> (function() { var startEngage = new Date().getTime(); var timeEngaged = 0; var idleTime = 0; var idle = true; var idleReport = false; var idleTimer, reportTimer; /* Set the user as idle, and calculate the time they were non-idle */ var setIdle = function() { idleTime = new Date().getTime(); timeEngaged += idleTime - startEngage; idle = true; }; /* Reset the 5 second idle timer. If the user was idle, start the non-idle timer */ var pulse = function(evt) { if (idle) { idle = false; startEngage = new Date().getTime(); idleReport = false; } window.clearTimeout(idleTimer); idleTimer = window.setTimeout(setIdle, 5000); }; // Utility function for attaching listeners to the window var addListener = function(evt, cb) { if (window.addEventListener) { window.addEventListener(evt, cb); } else if (window.attachEvent) { window.attachEvent('on' + evt, cb); } }; /* Push an event to dataLayer every 15 seconds unless the user is idle. Also, push an event when the user leaves the page */ var report = function(evt) { if (!idle) { timeEngaged += new Date().getTime() - startEngage; } // Push the payload to dataLayer, and only push valid time values if (!idleReport && timeEngaged > 0 && timeEngaged < 3600000) { window.dataLayer.push({ 'event' : 'nonIdle', 'nonIdleTimeElapsed' : timeEngaged }); } if (idle) { idleReport = true; } // Fix possible beforeunload duplication problem if (evt && evt.type === 'beforeunload') { window.removeEventListener('beforeunload', report); } timeEngaged = 0; startEngage = new Date().getTime(); reportTimer = window.setTimeout(report, 15000); }; addListener('mousedown', pulse); addListener('keydown', pulse); addListener('scroll', pulse); addListener('mousemove', pulse); addListener('beforeunload', report); idleTimer = window.setTimeout(setIdle, 5000); reportTimer = window.setTimeout(report, 15000); })();</script>

Custom HTML Tag

Page 58: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Trigger for the Custom HTML Tag

Page 59: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Data Layer Variable

Page 60: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Custom JS Variable: {{JS - Get Engagement Time In Seconds}}

function() { return {{DLV - nonIdleTimeElapsed}} / 1000;}

Page 61: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

GA: New Custom Metric

Page 62: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Trigger for the Event Tag

Page 63: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

Event Tag

Page 64: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

GA: New Calculated Metric

Page 65: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

GA: New Custom Report

Page 66: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

x5x10x7x7x8x8x9

Interactive Time = Time when user is actively interacting with the page (keyboard and mouse)

Page 67: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

#5: Track Content As Ecommerce

http://goo.gl/8BFc1M

Page 68: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

@SimoAhava from @ReaktorNow | #GAUCbe | 25 Aug 2016

5 Takeaways1. Data quality is earned, not acquired2. Google Analytics is too generic out-of-the-box3. Analytics platforms need to be customized so that they enable

you to make informed decisions that suit your organization4. Understanding how content can be measured is a great proxy for

all measurement goals5. Knowledge about web technologies is a must for the modern

analyst

Page 69: GAUC 2016 - Simo Ahava - Measuring the ROI of your content marketing

[email protected]: @SimoAhavaGoogle+: +SimoAhava