Prusak.com

Serving up my thoughts since 2004

Google Analytics Referrer Override

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:

a._setReferrerOverride=function(b){a.yb=b}

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):


On the test page, add this code before any GA or GWO calls:


Then change your GA code from this:


to this:


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/

Update #2 [Oct 2010]:
It's been over two years since my initial posting and this issue still exists. A few people have asked about an async version so here it is.

All of my custom JS stays the same.

Here is the change for the async code:

Before

_gaq.push(['_trackPageview']);

After

if (realreferrer.length > 0) {
    _gaq.push(['_setReferrerOverride',realreferrer]);
}
_gaq.push(['_trackPageview']);

Please note my blog messes up the single quotes for code snippets when copying / pasting.

- Ophir

9 Comments

  1. I don’t know, this solution seems safer than the second to me. And easier to fix if goog decides to mess with their API in the future.

  2. Ehi everybody, but this is the old code, but what are talking about new asynchronous code?
    It is the same thing? Or what??
    Thanks a lot.

  3. What are talking about new asynchronous code?
    iniData have been deprecated !

  4. Thx for the update !

  5. Hi,

    Great post.

    Do you know if this hack will also work for using Goals with funnels that span more than one sub domain ? (the problem is that once a certain page in the goal is in a different sub domain, Analytics loses the original traffic source)

    Thanks

  6. Hi…

    Is this trick still working with the latest changes in the GA? I’m asking as I’m a newbie when it comes to these things and might ask someone to do it for me. But, if this can be done or is still working to date, I might try it myself.

    Thanks

  7. One of those essential GWO posts, Ophir. I’m implementing this right now in fact.

    Anyway, just noticed the wrong types of quote marks are being used here:

    _gaq.push([‘_setReferrerOverride’,realreferrer]);

    WordPress auto formats them to look nice. Unfortunately nice quote marks don’t work in code.

  8. Will this solution work for Internet Explorer?

  9. Can somebody answer me one question on this issue?

    For

    _gaq.push([‘_setReferrerOverride’, retainedReferrer]);

    If retainedReferrer is blank, then

    will GA override the referrer to blank and display/count it as direct traffic

    OR

    ignore the _setReferrerOverride and set the document.referrer for the page as referrer?

    Regards,
    Orish

Leave a Reply to jena Cancel reply

Your email address will not be published.

*

© 2024 Prusak.com

Theme by Anders NorenUp ↑