google tag manager for nerds

36
Simo Ahava | NetBooster

Upload: simo-ahava

Post on 09-Feb-2015

1.686 views

Category:

Internet


0 download

DESCRIPTION

Here's the slides from my MeasureCamp presentation on Google Tag Manager, the data layer, and the tool-specific data model. Here's an accompanying blog post as well: http://www.simoahava.com/analytics/google-tag-manager-data-model/

TRANSCRIPT

Page 1: Google Tag Manager For Nerds

Simo Ahava | NetBooster

Page 2: Google Tag Manager For Nerds

GTM For NerdsMeasureCamp V – 20 September 2014

function MeasureCampV() { this.awesome = awesome; }

Page 3: Google Tag Manager For Nerds

GTM For NerdsMeasureCamp V – 20 September 2014

@SimoAhava

http://google.me/+SimoAhava

[email protected]

www.simoahava.com

function MeasureCampV() { this.awesome = awesome; }

Page 4: Google Tag Manager For Nerds

MASTERED by desire impulsive,By a mighty inward urging,I am ready now for singing,Ready to begin the coding --

A. Gallen-Kallela: The Boat’s Lament

Page 5: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array

Page 6: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

Page 7: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

dataLayer.push('item1'); // dataLayer[0] => 'item1’

Page 8: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

dataLayer.push('item1'); // dataLayer[0] => 'item1'

dataLayer.push({'item2' : [{'data1' : true},{'data2' : 'Peter'}]});

// dataLayer[1] => 'item2' : Array[2]

Page 9: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

dataLayer.push('item1'); // dataLayer[0] => 'item1'

dataLayer.push({'item2' : [{'data1' : true},{'data2' : 'Peter'}]});

// dataLayer[1] => 'item2' : Array[2]

var item2 = dataLayer.pop(); // item2 => Array[2], dataLayer[1] =>

undefined

Page 10: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

dataLayer.push('item1'); // dataLayer[0] => 'item1'

dataLayer.push({'item2' : [{'data1' : true},{'data2' : 'Peter'}]});

// dataLayer[1] => 'item2' : Array[2]

var item2 = dataLayer.pop(); // item2 => Array[2], dataLayer[1] =>

undefined

dataLayer.push({'event' : 'gtm.js'}); // No special effects

Page 11: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

dataLayer.push('item1'); // dataLayer[0] => 'item1'

dataLayer.push({'item2' : [{'data1' : true},{'data2' : 'Peter'}]});

// dataLayer[1] => 'item2' : Array[2]

var item2 = dataLayer.pop(); // item2 => Array[2], dataLayer[1] =>

undefined

dataLayer.push({'event' : 'gtm.js'}); // No special effects

There is absolutely nothing special about dataLayer ... or is there?

Page 12: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

A JavaScript Array dataLayer = [];

dataLayer.push('item1'); // dataLayer[0] => 'item1'

dataLayer.push({'item2' : [{'data1' : true},{'data2' : 'Peter'}]});

// dataLayer[1] => 'item2' : Array[2]

var item2 = dataLayer.pop(); // item2 => Array[2], dataLayer[1] =>

undefined

dataLayer.push({'event' : 'gtm.js'}); // No special effects

There is absolutely nothing special about dataLayer ... or is there?

It’s the default name of the data structure that Google Tag Manager

uses

Page 13: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

…but it looks like GTM overrides the default push() method:

Page 14: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

…but it looks like GTM overrides the default push() method:

This does three (visible) things:

Page 15: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

…but it looks like GTM overrides the default push() method:

This does three (visible) things:1. Initiates a listener which processes the new state of dataLayer after each

push()

2. Sets the maximum length of dataLayer to 300

3. Instead of returning the length of the Array, a push() returns true if no tags

were fired and false if tags were fired – synchronous operation for ”Wait for

Tags”!

Page 16: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is dataLayer

…but it looks like GTM overrides the default push() method:

This does three (visible) things:1. Initiates a listener which processes the new state of dataLayer after each

push()

2. Sets the maximum length of dataLayer to 300

3. Instead of returning the length of the Array, a push() returns true if no tags

were fired and false if tags were fired – synchronous operation for ”Wait for

Tags”!

These will all be part of the specification that vendors need to adhere

to

Memory management such as setting the maximum length of the Array

will eventually be configurable

Page 17: Google Tag Manager For Nerds

A. Gallen-Kallela: Lemminkainen’s Mother

THERE the blood-stained data model,There Google's son and hero,Cuts in pieces dataLayer,Chops it with his mighty hatchet --

Page 18: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

An abstract data model, which passes and processes data from

dataLayer to Google Tag Manager

Page 19: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

An abstract data model, which passes and processes data from

dataLayer to Google Tag Manager

dataLayer Data model

Tool-agnostic Tool-specific

Generic Unique

Accessed directly Accessed via helper

Structured Abstract

Page 20: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

In GTM, the interface exposes two methods: google_tag_manager["GTM-XXXX"].dataLayer.get('key')

google_tag_manager["GTM-XXXX"].dataLayer.set('key','value')

Page 21: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

In GTM, the interface exposes two methods: google_tag_manager["GTM-XXXX"].dataLayer.get('key')

google_tag_manager["GTM-XXXX"].dataLayer.set('key','value')

These are used to access the data stored in the data model, and should

not be used directly

Page 22: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

In GTM, the interface exposes two methods: google_tag_manager["GTM-XXXX"].dataLayer.get('key')

google_tag_manager["GTM-XXXX"].dataLayer.set('key','value')

These are used to access the data stored in the data model, and should

not be used directly

Using get() retrieves the most recent value for ’key’ dataLayer.push({'key1' : 'value1'}); // dataLayer[0]

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // 'value1'

dataLayer.push({'key1' : 'value2'}); // dataLayer[1]!

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // 'value2'

Page 23: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

Cool, get() works nicely with dotted names and nested objects dataLayer.push({'key1.id' : '123'});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1.id'); // '123'

dataLayer.push({'key2' : {'id' : '234'}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key2.id'); // '234’

Page 24: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

Cool, get() works nicely with dotted names and nested objects dataLayer.push({'key1.id' : '123'});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1.id'); // '123'

dataLayer.push({'key2' : {'id' : '234'}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key2.id'); // '234’

Yes, get() is the method that is called by your Data Layer Variable

Macros

Page 25: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

Cool, get() works nicely with dotted names and nested objects dataLayer.push({'key1.id' : '123'});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1.id'); // '123'

dataLayer.push({'key2' : {'id' : '234'}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key2.id'); // '234’

Yes, get() is the method that is called by your Data Layer Variable

Macros

So…

When a dataLayer.push() occurs, the arguments are copied to the

data model

Page 26: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

What is Google Tag Manager’s data model

Cool, get() works nicely with dotted names and nested objects dataLayer.push({'key1.id' : '123'});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1.id'); // '123'

dataLayer.push({'key2' : {'id' : '234'}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key2.id'); // '234’

Yes, get() is the method that is called by your Data Layer Variable

Macros

So…

When a dataLayer.push() occurs, the arguments are copied to the

data model

The get() method can be used to retrieve data from the data model

Page 27: Google Tag Manager For Nerds

A. Gallen-Kallela: The Forging Of The Sampo

dataLayer, worthy brother,Thou, my faithful indexed Array,Come and see this wondrous beauty,Abstract structure, awesome methods --

Page 28: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Changing value type overwrites the previous value dataLayer.push({'key1' : [1, 2, 3]});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // Array[3]

dataLayer.push({'key1' : 'cool'});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // 'cool'

Page 29: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Changing value type overwrites the previous value dataLayer.push({'key1' : [1, 2, 3]});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // Array[3]

dataLayer.push({'key1' : 'cool'});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // 'cool'

Array to Array and plain object to plain object behave a bit differently dataLayer.push({'key1' : [1, 2, 3]});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [1, 2, 3]

dataLayer.push({'key1' : [4, 5]});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [4, 5, 3]!

Page 30: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Updating an Array in the data model is clumsy (and not a good idea) dataLayer.push({'key1' : [1, 2, 3]});

var k = google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [1, 2, 3]

k.push(4, 5);

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [1, 2, 3, 4, 5]

Page 31: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Updating an Array in the data model is clumsy (and not a good idea) dataLayer.push({'key1' : [1, 2, 3]});

var k = google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [1, 2, 3]

k.push(4, 5);

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [1, 2, 3, 4, 5]

So there’s a special ’command array’ you can use, which accesses all

supported methods of the value dataLayer.push({'key1' : [1, 2, 3]});

dataLayer.push(['key1.push', 4, 5]); // Note the square brackets!

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // [1, 2, 3, 4, 5]

Page 32: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Plain object to plain object is more straightforward dataLayer.push({'key1' : {'one' : 1}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: 1}

Page 33: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Plain object to plain object is more straightforward dataLayer.push({'key1' : {'one' : 1}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: 1}

dataLayer.push({'key1' : {'two' : 2}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: 1}, {two: 2}

Page 34: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

Plain object to plain object is more straightforward dataLayer.push({'key1' : {'one' : 1}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: 1}

dataLayer.push({'key1' : {'two' : 2}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: 1}, {two: 2}

dataLayer.push({'key1' : {'one' : {'two' : 3}}});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: {two: 3}},

{two: 2}

Page 35: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Peculiarities of the data model

You can also run your own functions on values in the data model dataLayer.push({'key1' : {'one' : 1}});

dataLayer.push(function() {

var key1 = this.get('key1');

if(key1.hasOwnProperty('one') {

this.set('key1', {'one' : 2});

}

});

google_tag_manager["GTM-XXXX"].dataLayer.get('key1'); // {one: 2}

Page 36: Google Tag Manager For Nerds

@SimoAhava | MeasureCamp V

Thank you

www.simoahava.com/analytics/data-layer/

www.simoahava.com/analytics/google-tag-manager-data-model/

#GTMtips

@SimoAhavahttp://google.me/+SimoAhava