Seeing High Bounce Rates From Safari?

You’re probably scratching your head wondering why bounce rates in Safari are extremely higher than IE, Firefox or even Chrome. Upon further investigation you notice page views per visit and time on site for Safari users are a lot lower than the other browsers as well. Here is what’s happening:

The problem has to do with Safari’s “Top Sites” feature, which shows you a pretty grid of thumbnails for the sites you visit most regularly (or that you have pinned in place). The interesting thing is that these thumbnails are live (ish) previews of what those pages currently look like. If you don’t happen to have a Top Sites page open in a tab, and if Safari considers that the current thumbnail is sufficiently out of date, it will automatically go and retrieve the latest version.

This can cause headaches for site owners, because in order to show the actual state of the page, Safari relies on full page requests: it downloads all the HTML, CSS, images, and JavaScript for the page, and then displays everything exactly as if the user were viewing the page in a standard tab. Adverts are rendered, page tracking scripts are executed, and to the server it looks just like a regular page hit.

Even though the user agent that Safari reports for a Top Sites request is exactly the same as for a normal page request, there is a way to distinguish the two types of request: in the current version of Safari the Top Sites request for the base page (but not its JS/CSS/image resources) carries an additional HTTP header, namely “X-Purpose: preview“. – More Info

If you are ever so lucky to be using Google Analytics, one of our top developers at Wet Seal, Jeremy Lucas, came up with this script to stop GA tracking from firing whenever a Top Sites request is made. Amazingly, for Safari, we saw a 30% reduction in visits and 50% reduction in bounce rate immediately after the code went live.

<% if (request.getHeader(“X-Purpose”) == null) { %>
<!– Google Analytics 2011.07.25 –>
<script type=”text/javascript”>
var _gaq = _gaq || [];
_gaq.push([‘_setAccount’, ‘UA-xxxxxxxx-1‘]);
var ga = document.createElement(‘script’);
ga.type = ‘text/javascript’;
ga.async = true;
ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘’;
var s = document.getElementsByTagName(‘script’)[0];
s.parentNode.insertBefore(ga, s);
<!– Google Analytics 2011.07.25  –>
<% } %>


Leave a Reply

Your email address will not be published. Required fields are marked *