Prerendering in Chrome
The impact of prerendering on desktop usage share
In order to improve performance and usability, browsers are increasingly preloading pages that are never seen by the user. However, this traffic varies significantly by browser and should not
be included in the usage share for the browsers. Starting in Chrome 13, Google implemented a feature called ‘prerendering’, which loads a hidden page or pages while the user is typing in
search queries in order to load that page faster when the user clicks on the associated search result link. Chrome prerenders pages based on either HTTP headers inserted by the site creator or
based on an algorithm that predicts the likelihood the user will click on the search result link.
Chrome has expanded the behavior in version 17 to include search queries typed into the omnibox.
Chrome is the only major desktop browser that currently has this feature, which creates unviewed visits that should not be counted in Chrome’s usage share. However, the pages that are
eventually viewed by the user should be treated normally.
Within the sites in our network, prerendering in February 2012 accounted for 4.3% of Chrome's daily unique visitors. These visits will now be excluded from Chrome's desktop browser share.
WebKit’s Page Visibility API
We used a new API in WebKit to detect the visibility state of each page. With this API, page states can be detected via a modified analytics tracking script. Pages can start in one of the following states:
||The page is visible to the user.
||The page has been loaded by the browser in an invisible tab and is not visible to the user.
||The page is not visible for a variety of reasons, including being on a tab that does not have focus.
Handling Prerendered Page Transitions
Pages can transition from prerender to visible. For a prerendered page to count in usage share it must be visible to the user at some point. The following table details when pages should be
counted in usage share:
|Prerender (with no transition to visible)
||Does not count
|Prerender to visible