Skip to content

Instantly share code, notes, and snippets.

@RitwikGA
Created January 31, 2018 13:37
Show Gist options
  • Save RitwikGA/393dd7417f7b035b00aa6980ad82215e to your computer and use it in GitHub Desktop.
Save RitwikGA/393dd7417f7b035b00aa6980ad82215e to your computer and use it in GitHub Desktop.
Facebook Custom Event - UTM Tracking - First Attribution
/* UTM Tracking - First Attribution - Facebook
* @Ritwikga
* Digishuffle
*/
var cookie_name = 'fb_utm' //Name of Cookie
var cookie_duration = 180 //days
if(/utm_source/g.exec(location.search) && /utm_medium/g.exec(location.search))
{
cookieModify(cookie_name, true)
} else {cookieModify(cookie_name, false)}
function cookieModify(cookie_name, utms)
{
if(readCookie(cookie_name) == null)
{
if(utms)
{
var source = /utm_source=([^&]+)/g.exec(location.search)[1]
var medium = /utm_medium=([^&]+)/g.exec(location.search)[1]
var campaign = /utm_campaign=([^&]+)/g.exec(location.search)?/utm_campaign=([^&]+)/g.exec(location.search)[1]:'undefined'
fbq('trackCustom','UTMs',{'Source': source ,'Medium': medium, 'Campaign': campaign })
var cookie_value = 'utm_source='+source+'&utm_medium='+medium+'&utm_campaign='+campaign;
createCookie(cookie_name, cookie_value ,cookie_duration)
} else
{
var source = (document.referrer =="")?"direct" : document.referrer
var medium = (source == "direct") ? "none" : "organic"
var campaign = 'none'
fbq('trackCustom','UTMs',{'Source': source ,'Medium': medium, 'Campaign': campaign })
var cookie_value = 'utm_source='+source+'&utm_medium='+medium+'&utm_campaign='+campaign;
createCookie(cookie_name, cookie_value ,cookie_duration)
}
}
else
{
var old_utms = readCookie(cookie_name)
var source = /utm_source=([^&]+)/g.exec(old_utms)[1]
var medium = /utm_medium=([^&]+)/g.exec(old_utms)[1]
var campaign = /utm_campaign=([^&]+)/g.exec(old_utms)?/utm_campaign=([^&]+)/g.exec(old_utms)[1]:'undefined'
fbq('trackCustom','UTMs',{'Source': source ,'Medium': medium, 'Campaign': campaign })
}
}
// Source : https://www.quirksmode.org/js/cookies.html ///
function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment