shuki mann - lixfix (all things data 2015)
Post on 12-Aug-2015
109 Views
Preview:
TRANSCRIPT
#ATDconf
Google Tag Manager Awesomeness
Shuki Mann!!
@ShukiMann!shuki@allthingsdata.co.il
#ATDconf#ATDconf shuki@allthingsdata.co.il
What is Google Tag Manager?
#ATDconf#ATDconf shuki@allthingsdata.co.il
source: builtwith.com
GTM market share VS. other vendors
#ATDconf#ATDconf shuki@allthingsdata.co.il
GTM Corner Stones:
what to do
when to do
#ATDconf#ATDconf shuki@allthingsdata.co.il
Business Question
First of All - Implementation Process
Defining KPIs
Requirements
Implementation-
QA
Implementation-
#ATDconf
#ATDconf shuki@allthingsdata.co.il
!The First Magic: Cohort Analysis by The Last Seen Post!
(in other words: how the last seen post affects the FTD!amount)
! Difficulty: 2
#ATDconf#ATDconf shuki@allthingsdata.co.il
What is “Cohort”Cohort analysis divides website users into groups (=cohorts) based on a common characteristic, and compares behaviour over time across those groups. !Cohort Types: • Date of first visit (retention by…) - default • Date of registration (churn rate by…) • Acquisition Campaign (sign ups by…) • App download date (in-app purchases by…) !and… • Last blog post they read (Avg. FTD amount by…)
#ATDconf#ATDconf shuki@allthingsdata.co.il
conversion rate by acquisition week
Problem: GA presents only “acquisition date” as the common characteristic.
#ATDconf#ATDconf shuki@allthingsdata.co.il
Our Business Question:!!
Whats the effect of the last post the user has read on the FTD amount by the number of days
passed since reading that post
#ATDconf#ATDconf shuki@allthingsdata.co.il
FTD
!Implementation Plan!
1. While the user reads a post - save this post name to a cookie 2. …and also save the current date. 3. When the user is performing his FTD - take the date that was
stored to the cookie, calculate the days/weeks/months passed since that date and send that with GA transaction tag.
!4. What would happen if the user reads another post? It will overwrite
the stored information in the cookie, aka last click attribution. (It can easily be adjusted to first-click-attribution)
PostA PostB
#ATDconf#ATDconf shuki@allthingsdata.co.il
1. Create cookies with the post’s URL and its reading time
#ATDconf#ATDconf shuki@allthingsdata.co.il
2. Create variables to get these values from the cookies when the FTD occurs
#ATDconf#ATDconf shuki@allthingsdata.co.il
3. Create Custom JS Variable that calculates the days passed since the date stored in the cookie
#ATDconf#ATDconf shuki@allthingsdata.co.il
3. Create Custom JS Variable that calculates the weeks passed since the date stored in the
cookie
#ATDconf#ATDconf shuki@allthingsdata.co.il
3. Create Custom JS Variable that calculates the months passed since the date stored in the
cookie
#ATDconf#ATDconf shuki@allthingsdata.co.il
4. Create session-scoped custom dimensions in GA
#ATDconf#ATDconf shuki@allthingsdata.co.il
4. Write down their index numbers…
#ATDconf#ATDconf shuki@allthingsdata.co.il
5. Send transaction with the calculated
CDs values
#ATDconf#ATDconf shuki@allthingsdata.co.il
Debugging with WASP inspector - all CDs are sent!
download chrome ext. from: bit.ly/wasp-inspector
#ATDconf#ATDconf shuki@allthingsdata.co.il
Create Custom Report in GA! (in our case use only Average Order Value)
#ATDconf#ATDconf shuki@allthingsdata.co.il
A little bit of Tableau work and…
Business insights (here comes the money): !1. After reading post3 you have an
opportunity window of 3 days to bring high valued FTDs
!2. Something interesting happens in the
second week after reading post1… We should investigate it further
#ATDconf#ATDconf shuki@allthingsdata.co.il
Another example: save the affiliate name (instead of post name) and monitor his traffic deposits across the
following weeks
FTDAff 1 Aff 2
#ATDconf#ATDconf shuki@allthingsdata.co.il
So what did we have?!1. We wanted to see how different groups of the same users
behave across the timeline. !2. What defines “the same user”? In our case we are referring to
users that originated from a specific affiliate or read post X before their FTD.
3. When a user reads a post, we store the post name and reading date to a cookie.
4. When the user performs an FTD we retrieve the days+weeks+months since the last post reading date, and send it through custom dimension to GA (plus the post name of course).
5. We create a custom report in GA, export the data and visualise it in Tableau (or any other software).
#ATDconf#ATDconf shuki@allthingsdata.co.il
More examples !!
1. e-Commerce - Store the registration date and see how these users convert through time. Maybe you will find that users that registered because of X converted less than users that registered because of Y.
!2. Apps - in-app purchases by installation date.
#ATDconf
#ATDconf shuki@allthingsdata.co.il
! The Second Magic: Optimizing Internal Site
!Search
Difficulty: 3
#ATDconf#ATDconf shuki@allthingsdata.co.il
Search Terms report in GA - we have lots of usersthat didn’t find what they’ve searched for
#FAIL
#ATDconf#ATDconf shuki@allthingsdata.co.il
Action Plan!!1. Grabbing the search term query from the URL !2. Return an HTML and inject it to the post’s feed code
for each search query
Business Goal!!
We want to provide more relevant search results or promote certain items that would of not been showed organically.
#ATDconf#ATDconf shuki@allthingsdata.co.il
When searching for “adwords” youwould see a boring post:
#ATDconf#ATDconf shuki@allthingsdata.co.il
…but after the injection, you can see a promoted post for my
AdWords Workshop
#ATDconf#ATDconf shuki@allthingsdata.co.il
Step 1: grab the search query from the URL
#ATDconf#ATDconf shuki@allthingsdata.co.il
Step 2: return a specific HTML code to inject for each search query:
#ATDconf#ATDconf shuki@allthingsdata.co.il
Step 3: When the user is in the search results page - inject the returned
HTML to the main post feed (div withclass “columns” in our case)
#ATDconf#ATDconf shuki@allthingsdata.co.il
Try it yourself: search for “adwords”
#ATDconf#ATDconf shuki@allthingsdata.co.il
Try it yourself: search for “google analytics”
#ATDconf#ATDconf shuki@allthingsdata.co.il
But…!Lookup Table works only with “equals” operator. If someone is searching for “google adwords” and
not “adwords” it won’t work :-/
#ATDconf#ATDconf shuki@allthingsdata.co.il
RegEx Lookup Table
take the search look if the phrase in return the right cell
#ATDconf#ATDconf shuki@allthingsdata.co.il
Take the returned value from our RegEx lookup table, and return the promoted
post HTML we want to inject
#ATDconf#ATDconf shuki@allthingsdata.co.il
What did we have so far?
#ATDconf#ATDconf shuki@allthingsdata.co.il
Try it yourself: search for “adwords”
#ATDconf#ATDconf shuki@allthingsdata.co.il
Try it yourself: search for “google analytics”
#ATDconf
#ATDconf shuki@allthingsdata.co.il
Thank You :) !
All Things Data Rocks! !
shuki@allthingsdata.co.il
#ATDconf
#ATDconf shuki@allthingsdata.co.il
The Third Magic:!Fight with Gibberish URLs!
!
Difficulty: 3
#ATDconf
#ATDconf shuki@allthingsdata.co.il
How will these URLs look in the GA reports?!
#ATDconf#ATDconf shuki@allthingsdata.co.il
The problem:!Ecommerce shop with gibberish URLs - no way to analyse
with GA
alternatives before GTM:!!
1. 301 redirects (very risky) 2. Search & replace filters in GA (no way. thousands of products)
#ATDconf#ATDconf shuki@allthingsdata.co.il
What are we going to do? - Solution #1
We want to be able to see more meaningful URLs in GA reports !1. Grabbing the “ugly” parameter from the original URL with a
GTM variable (macro) !2. Replace this old parameter with a new and more
meaningful one !3. Send virtual pageview to GA with the new parameter
#ATDconf#ATDconf shuki@allthingsdata.co.il
Grab the itemId parameter with URL-Query variable
#ATDconf#ATDconf shuki@allthingsdata.co.il
Return a new itemId for each ugly itemId!for example: “{8317F274-701D-46A3-A8D1}” >>> “Blue T-shirt -
Men”
#ATDconf#ATDconf shuki@allthingsdata.co.il
Solution #1: Lookup Tables
The lookup table takes the value from the {{Old Item Id}} variable, and returns a new value to the {{New Item Id}} variable. !“if {{Old Item Id}} value is “ItemA” return “NewItemIdA” to the New Item Id”
#ATDconf#ATDconf shuki@allthingsdata.co.il
Create Custom JS Variable that returns the {{New Item Id}} !only if the ItemId is in the URL
#ATDconf#ATDconf shuki@allthingsdata.co.il
Send the New Item Id with virtual PV within the GA tag
#ATDconf#ATDconf shuki@allthingsdata.co.il
But wait, we have 10,000+ products!!!
How can we create 10,000 rows more easily?
bit.ly/lookup-table-builder
#ATDconf#ATDconf shuki@allthingsdata.co.il
Paste the code in the console and… hopa!
bit.ly/lookup-table-builder
#ATDconf#ATDconf shuki@allthingsdata.co.il
Still - it takes a lot of time to create the lookup table, so I’ve looked for
an easier way
#ATDconf#ATDconf shuki@allthingsdata.co.il
Solution #2: DOM scrapping
I need this part
#ATDconf#ATDconf shuki@allthingsdata.co.il
(Houston, you have duplicate GA tag)
#ATDconf#ATDconf shuki@allthingsdata.co.il
Step 1: Custom JS variable to get the last element on the breadcrumbs
#ATDconf#ATDconf shuki@allthingsdata.co.il
Step 2: Fire GA tag with virtual PV
#ATDconf
#ATDconf shuki@allthingsdata.co.il
Thank You :) !
All Things Data Rocks! !
shuki@allthingsdata.co.il
top related