Google Analytics Referrer Override
Posted by ophir on November 4th, 2008
A couple of weeks ago I posted about a known issue using A/B experiments in Google Website Optimizer.
http://www.prusak.com/google-website-optimizer-and-referer-data/
Basically, when conducting an A/B experiment in Website Optimizer, the original referrer data is lost because of the JavaScript redirect to the test versions. This means that the traffic source will be wrong (it will say direct instead of the true traffic source).
This issue isn’t just a problem with website optimizer. Any landing page that uses JavaScript to redirect will loose the original referrer data. For example if your site provides easy to remember URLs like www.mysite.com/freeshipping and then uses JavaScript to redirect users to a different URL.
I wrote in my previous blog post that I wished Google Analytics provided an easy way to over ride the referrer value (and not use the document.referrer value).
It seems I spoke to soon.
Google Analytics DOES have a way to overwrite the referrer data.
It just doesn’t seem to be documented anywhere
I planned on writing my own hack to override the referrer value in Google Analytics. I was doing some reverse engineering of the ga.js code and found this interesting tidbit:
I’m still running some tests, but based on my initial results, the _setReferrerOverride function provides a simple way to manually set the referrer value.
So now, we can actually capture the original referrer even when the visitor is redirected. Here’s how:
1 - Store the original referrer data in a cookie named realreferrer right before we redirect
2 - On the test pages, look for the realreferrer cookie. If it exists use it to over ride the referrer value in Google Analytics and then delete the cookie (so it won’t mess up page views that weren’t a result of a redirect from the original version).
Here’s the code I’m currently using in my tests.
Add this on the original page before the redirect (the GWO control script):
document.cookie = "realreferrer="+encodeURIComponent(document.referrer)+"; path=/";
</script>
On the test page, add this code before any GA or GWO calls:
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 "";
}
var realreferrer = decodeURIComponent(readCookie("realreferrer"));
document.cookie = "realreferrer=; path=/";
</script>
Then change your GA code from this:
var pageTracker = _gat._getTracker("UA-XXXXXX-Y");
pageTracker._trackPageview();
</script>
to this:
var pageTracker = _gat._getTracker("UA-XXXXXX-Y");
if (realreferrer.length > 0) {
pageTracker._setReferrerOverride(realreferrer);
}
pageTracker._trackPageview();
</script>
Please let me know if this works for you !
Update:
I just found another (and possibly better) solution. See:
http://www.prusak.com/google-ananlytics-initial-referrer-update/
November 4th, 2008 at 12:27 pm
[...] Google Analytics Referrer Override [...]