Upload
nico-miceli
View
104
Download
1
Embed Size (px)
DESCRIPTION
In this talk I discuss discuss ways that you can use the new version of Google Analytics (universal analytics) to measure the REAL engagement of your users, create new custom dimensions & metrics, track off site activities in Google Analytics and ways to track the same user across devices.
Citation preview
All about Engagement with
Universal Analytics
Nico Miceli+nico miceli|@nicomiceli
At work:
- Marketer at the core
- Technical Analytics
@SEERInteractive
- GDE for Google
Analytics
For Fun:
Hacker/Maker
People Watcher
Quantified Selfer
Curious Dude
Who are you?
First,
what is
engagement?
I am going to talk
about:Event Tracking
Custom Dimensions
Cross Device Management
The Measurement Protocol
The old days
Analytics
was easier
But after
a couple
years…
The web
got way
cooler
Tracking got
harder
With great power apps comes great
responsibility tracking needs
Welcome to
Universal Analytics
var _gaq = _gaq || [];_gaq.push(['_setAccount', 'UA-XXXXX-X']);_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript';ga.async = true; ga.src = ('https:' == document.location.protocol ?'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s =document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga,s); })();
javascript
ga.js
Old
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[
r].q=i[r].q||[]).push(arguments)},i[r].l=1*new
Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.
parentNode.insertBefore(a,m)})(window,document,'script','//www.google-
analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXX-Y', 'nicomiceli.com');
ga('send', 'pageview');
analytics.jsjavascript
New!
Thank You!
Any Questions?
Just Kidding!It’s more than just an upgrade.
“Google Analytics
is becoming user
or customer
centric rather
than visit centric.”
- Justin Curtoni
Analytics Advocate,
Google Inc.
Question 1
Are my users…
sharing pictures
watching videos
clicking links
having trouble with my forms
Event TrackingShows how people are engaging with your site
Event tracking is a GA method
that tracks engagement. It
consists of four values that
you can use to describe a
user's interaction
Value Type Required Description
Category String Yes Typically the object that was interacted with (e.g. button)
Action String Yes The type of interaction (e.g. click)
Label String No Useful for categorizing events (e.g. nav buttons)
Value Number No Values must be non-negative. Useful to pass counts (e.g. 4
times)
Example Button Click<button id="b1">Click Me</button>
<script>
$('#b1').click(function(){
ga('send', // send command - REQUIRED
'event', // type of thing to send - REQUIRED
'category', // category of event - REQUIRED
'action', // action of the event - REQUIRED
'label', // the element that was clicked - OPTIONAL
5 // the value of the event that was clicked - OPTIONAL
);
});
</script>
ga('send','event','category','action','opt_label',opt_value)
Don’t forget about
hidden content
Are people
viewing
your tabs?
$('#tabID').click(function(){
ga('send', // send command – REQUIRED
'event', // type of thing to send – REQUIRED
'tabs', // category of event – REQUIRED
'click', // action of the event – REQUIRED
$(this).id, // the element that was clicked - OPTIONAL
);
});
</script>
There is
so
much
data in
Forms!
Track interaction
with input boxes
with onblur
Post: bit.ly/1he1SRK by @iamchrisle
Help users through
your forms by tracking
they’re errors
Post: bit.ly/1he1SRK by @iamchrisle
The StatsShow stats from RCS infographic
Drill down to NYC
Track embeded
multimedia
They all have Player
API’s!
YouTube Event Tracking
Example//load youtube video with JavaScript API
function onYouTubePlayerAPIReady() {
player = new YT.Player('player', {
height: 390,
width: 640,
videoId: "videoidxyz",
events: {
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerStateChange(event) {
switch (event.data) {
case YT.PlayerState.PLAYING:
ga("send", "event", "video", "play", "video name")
break;
case YT.PlayerState.ENDED:
ga("send", "event", "video", "end", "video name")
break;
case YT.PlayerState.PAUSED:
ga("send", "event", "video", "pause", "video name")
break;
}
}
Wistia<div id="wistia_v059er99tw" class="wistia_embed" style="width:640px;height:426px;"> </div>
<script charset="ISO-8859-1" src="http://fast.wistia.com/assets/external/E-v1.js"> </script>
<script>
wistiaEmbed = Wistia.embed("video-id-here");
wistiaEmbed.bind('play',function() {
//console.log('play')
ga('send','event','video-wistia','play','wistia-video-1')
})
wistiaEmbed.bind('pause',function() {
//console.log('paused')
ga('send','event','video-wistia','pause','wistia-video-1')
})
wistiaEmbed.bind("end", function () {
//console.log('ended');
ga('send','event','video-wistia','ended','wistia-video-1')
});
</script>
Question 2
Are my users engaged users…
buying
performing the desired 2nd action
requesting more information
Custom DimensionsSend extra information to Google Analytics
Custom Dimensions
allow you to push
custom data to Google
Analytics and group
things togetherNote: You only get 20 but they 1 can have multiple labels
Set the Scope
The scope tells GA how
long the custom
dimensions should
follow the user
3 Types of Scope
Hit - value is
applied to the
single hit for which
it has been set.
Hit
What authors get viewed viewed the most?
Blog post 1 by Chris
Blog post 2 by Kevin
Blog post 3 by Nico
Blog post 4 by Kevin
Blog post 5 by Chris
Blog post 6 by Nico
Blog Post 7 by Kevin
Pageview=blog-1/ Pageview=/blog-5/ Pageview=/blog-4/ Pageview=/blog-2/
cd1_value=Author_Kevin cd1_value=Author_Nico cd1_value=Author_Kevin
cd1_value=Author_Kevincd1_value=Author_Nicocd1_value=Author_Chris
cd1_value=Author_Chris
Pageview=/blog-7/Pageview=/blog-2/Pageview=/blog-4/
Processing
Every hit gets processed with the Custom Dimension of the author’s name
ClientID = 232
Session 1H1: pageview=/blog-post-1/ cd1_value=Author_Chris
H2: pageview =/blog-post-5/ cd1_value=Author_Kevin
ClientID = 343
Session 1
H1: pageview =/blog-post-4/ cd1_value=Author_Nico
H2: pageview =/blog-post-2/ cd1_value=Author_Kevin
H3: pageview =/blog-post-7/ cd1_value=Author_Chris
H4: pageview =/blog-post-6/ cd1_value=Author_Nico
H5: pageview =/blog-post-9/ cd1_value=Author_Kevin
Reporting
Example Report
Author Blog posts Viewed
Author Nico 2
Author Kevin 3
Author Chris 2
3 Types of Scope
Session - value is
applied to all hits in a
single session where
idle time is < 30 mins.
Session
Do people who watch my videos end up converting?
Go product page
Watch video
Click on tabs
Read reviews
Sign up
Pageview=blog-1/ event= video, play, video1 event= tabs, click, info
Pageview=reviews/ event = forms, sign up, more info
Remember event tracking parameters = category, action, label
Cd2 = video watcher
Cd2 = video watcher
Video event triggers
custom dimension 2
3 Types of Scope
User - value is applied to all
hits in current and future
sessions, until value changes
or custom dimension is made
inactive.
UsersHow do the paid users differ from the free users
Go to site
Log inView blog
Listen to music
Go to siteView help
pageView blog
Listen to music
Pageview=/ Pageview = welcome Pageview= /blog/ event= music, play, song1
Pageview=/ Pageview=/help/ Pageview=/blog/ event= music, play, song2
Cd3 = video watcher
Cd3 = video watcher
Session 1
Session 2
But what if they switch to
another device
Woz’s
travel bag
we lost him… we can't find Stu the user
Question 3
Are my users…
using different devices
performing different actions on
different devices
Cross Device ManagementTrack users across different devices
Client ID
Normally GA stores an
anonymous Client ID for
the user
It starts with User-ID
feature - The user ID lets you create your own
persistent anonymous id and override GA’s
- You can tie hits & sessions to the same
users when they log in on different devices
It starts with User-ID feature
Make sure the User ID is:
- Non-personally identifiable
- Unique to a user of your service or
app
- Persistent for a
signed-in user across
all devices
Web:ga('create', 'UA-XXXX-Y', 'auto');
if (auth.userSignedInVlaue) { ga('set', '&uid', {{ USER_ID }});};
ga('send', 'pageview');
Android:
t.set("&uid", {{ USER_ID }});
iOS:
[tracker set:@"&uid" value:{{ USER_ID }}];
Setting it up in the App
- Enable
UserID
in Admin
- Make a new
View
Things to note:1- the profile will only show hits with the
UserID present
2- number of Users is calculated based on
the number of unique User-ID values.
3- date range max will only be 90 days
4- Once you enable the User ID feature for
a view (profile), you cannot disable it.
What can we learn from that?
Where your customers
research and where
they buy & how their
activity differs
What can we learn from
that?
We can
see
device
overlap
reports
& Device
paths!
Question 4
What if the users…
aren’t on tablets or computers
do other things offline
Measurement ProtocolMake HTTP requests to send raw user interaction data directly to Google Analytics servers.
The measurement protocol lets you
send data to Google Analytics via
HTTP Requests to this endpoint.
http://www.google-analytics.com/collecthttp://ssl.google-analytics.com/collect
With these values required for all hitsName Parameter Example Description
Protocol Version v v=1 The protocol version. The
value should be 1.
Tracking ID tid tid=UA-123456-1 The ID that distinguishes to
which Google Analytics
property to send data.
Client ID cid cid=xxxxx An ID unique to a particular
user.
Hit Type t t=pageview The type of interaction
collected for a particular
user.
How about physical data?
Lets test it
Offline ?
Ok, it wasn’t that complicated
Rasberry Pi + PIR Sensor +
lil’ Python = movement in GAimport time
import urllib2
import RPi.GPIO as io
io.setmode(io.BCM)
pir_pin = 18
io.setup(pir_pin, io.IN
def hitGA():
urllib2.urlopen("http://ww
w.google-
analytics.com/collect?v=1&
tid=UA-XXXXXX-
Y&cid=1111&t=event&ec=Move
ment&ea=livingRoom&el=desk
").close
while True:
if io.input(pir_pin):
hitGA()
Total cost $60
Sleep Tracker v1
At SEER we like to have events
What’s a good area to track
“We used a raspberry pi to track trips to the keg at #searchchurch in
Google analytics pic.twitter.com/tr9XLMSRRD by @NicoMiceli”
- @wilreynolds
That was fun!
Now for the serious
examples!
Client ID or User ID
Question Client ID User ID
What does the ID
Represent?
An anonymous device or browser instance. A single user, like a signed-in user account, that may interact with
content across one or more devices and / or browser instances.
How is the ID Set? Randomly generated and automatically sent
with all hits by Google Analytics libraries.
You must set and send your own userIds with your Google Analytics
hits.
How is ID Used to
Calculate Unique
Users?
In a non-User-ID-enabled view (profile), Client
ID is used to calculate unique users.
In a User-ID-enabled view (profile), User ID is used to calculate unique
users
There are two ways to associate a hit
to a user with the measurement
protocol
Examples: Lead gen vs eComm
Lets talk Lead Gen
The lead gen process
Go to siteBrowse around
Fill out form
Form goes to DB
BizDevfollows up with call
Lead turns to Qualified
BizDev sends proposal
Client signs agreement
New Lead
Nico
Miceli
CompanyX
.com
What GA sees
Go to siteBrowse around
Fill out form
Form goes to DB
BizDev follows up with call
Thumbs Up!
Lead turns to Qualified
BizDev sends proposal
Client signs agreement
New Lead
Nico
Miceli
CompanyX
Push the client ID with
your form
submissions… hindenly<form id="lead-form" method="POST" action="/lead">
<input id="name" type="text" /><BR>
<input id="phone" type="text" /><BR>
<!-- make a hidden input field and store the client ID in it -->
<input id="clientcookie" type="hidden" /><BR>
</form>
<script type="text/javascript">
$(document).ready(function(){
ga(function(tracker) {
clientID = tracker.get('clientId'); //grab the current users anonymous client ID
document.getElementById('clientcookie').value = clientID;
//set the value of client ID to the hidden input field
});
});
</script>
ga(function(tracker) {var clientId = tracker.get('clientId');
});
<form id="lead-form" method="POST" action="/lead">
<input id="name" type="text" /><BR>
<input id="phone" type="text" /><BR>
<!-- make a hidden input field and store the client ID in it -->
<input id="clientcookie" type="hidden" /><BR>
</form>
<script type="text/javascript">
$(document).ready(function(){
ga(function(tracker) {
clientID = tracker.get('clientId'); //grab the current users anonymous client ID
document.getElementById('clientcookie').value = clientID;
//set the value of client ID to the hidden input field
});
});
</script>
The lead gen process
Go to siteBrowse around
Fill out form
Form goes to DB
BizDevfollows up with call
Lead turns to Qualified
BizDev sends proposal
Client signs agreement
New Lead
Nico
Miceli
CompanyX
CID: 777
cid:777 cid:777
cid:777 cid:777
Send new data with the
Measurement protocol
Get EmailGo to
eComm.comLog in to get
coupon
Print Out Coupon
Go to the eCommStore
Spend coupon +
$100
eComm to comm…
Get EmailGo to
eComm.comLog in to get
coupon
Print Out Coupon
Go to the eCommStore
Spend coupon +
$100
eComm to comm
auth = true
Get EmailGo to
eComm.comLog in to get
coupon
Print Out Coupon
Go to the eCommStore
Spend coupon +
$100
eComm to comm
auth = true
UID=123
UID=123 UID=123
I can now see user pain
points in my app, learn
the impact of the bells &
whistle, I can understand
the users on across
devices, I can associate
them with real world
data.
TL;DR Events
Use Google Analytics to track engagement via JS events
ga('send','event','category','action','opt_label
',opt_value)
TL;DR Custom Dimensions
Allows you to group things and send more data to Google
Analytics
Step 1: Create a Name that you want to show up in reports
Step 2: Set the Scope
Step 3: Make it Active
TL;DR Cross Device Management
Allows you to track a user across different devices
Step 1: Enable it in the web app
Step 2: Connect a persistent anonymous ID to each user
Step 3: Add it to your code
TL;DR measurement Protocol
Allows you to send data to GA via HTTP Requests
Allows you to connect real world with internet world
The length of the entire encoded URL must be no longer than
2000 Bytes.
Resources
Google Analytics Debugger Chrome Extension
Google Analytics Developer Google+ Community
Stack Overflow Google Analytics Tag
All links will be on my G+ page
tomorrow
Google.com/+nicomiceli
@nicomiceli
We’re Hiring! seer.is/jobbies