Skip to content

Instantly share code, notes, and snippets.

@jeremypage
Last active October 8, 2018 16:50
Show Gist options
  • Save jeremypage/7a8d82d1e383f9637bb1 to your computer and use it in GitHub Desktop.
Save jeremypage/7a8d82d1e383f9637bb1 to your computer and use it in GitHub Desktop.
Enable tracking of many links and downloads that cannot normally be tracked in Google Analytics (from http://www.blastam.com/blog/index.php/2013/03/how-to-track-downloads-in-google-analytics-v2)
// Enables us to track many links and downloads that cannot normally be tracked in Google Analytics
jQuery(document).ready(function($) {
var filetypes =
/\.(zip|exe|dmg|pdf|doc.*|xls.*|ppt.*|mp3|txt|rar|wma|mov|avi|wmv|flv|wav)$/i;
var baseHref = '';
if (jQuery('base').attr('href') != undefined) baseHref = jQuery(
'base').attr('href');
jQuery('a').on('click', function(event) {
var el = jQuery(this);
var track = true;
var href = (typeof(el.attr('href')) != 'undefined') ?
el.attr('href') : "";
var isThisDomain = href.match(document.domain.split('.')
.reverse()[1] + '.' + document.domain.split('.')
.reverse()[0]);
if (!href.match(/^javascript:/i)) {
var elEv = [];
elEv.value = 0, elEv.non_i = false;
if (href.match(/^mailto\:/i)) {
elEv.category = "email";
elEv.action = "click";
elEv.label = href.replace(/^mailto\:/i, '');
elEv.loc = href;
} else if (href.match(filetypes)) {
var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(
href) : undefined;
elEv.category = "download";
elEv.action = "click-" + extension[0];
elEv.label = href.replace(/ /g, "-");
elEv.loc = baseHref + href;
} else if (href.match(/^https?\:/i) && !
isThisDomain) {
elEv.category = "external";
elEv.action = "click";
elEv.label = href.replace(/^https?\:\/\//i, '');
elEv.non_i = true;
elEv.loc = href;
} else if (href.match(/^tel\:/i)) {
elEv.category = "telephone";
elEv.action = "click";
elEv.label = href.replace(/^tel\:/i, '');
elEv.loc = href;
} else track = false;
if (track) {
ga('set', 'nonInteraction', true);
ga('send', 'event', {
eventCategory: elEv.category.toLowerCase(),
eventAction: elEv.action.toLowerCase(),
eventLabel: elEv.label.toLowerCase(),
eventValue: elEv.value
});
if (el.attr('target') == undefined || el.attr(
'target').toLowerCase() != '_blank') {
setTimeout(function() {
location.href = elEv.loc;
}, 400);
return false;
}
}
}
});
});
@jeremypage
Copy link
Author

Code updated to use newer analytics.js API

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment