September 8, 2009 by Justin Cutroni
I <3 Google Analytics Site Search reports. There’s amazingly actionable data in those reports. But they’re missing one vital piece of information: searches that don’t produce any results.
Why is this important? Don’t you want to know when visitors search and don’t get any results? Zero result searches can help your identify missing content on your site or a problem with your site search engine.
Many search solutions will provide this information for you. For example, I use Search Meter for WordPress and it shows me which search queries generate zero results. But I thought it would be interesting to add this data to Google Analytics. That way all my site search information would be in one place.
Unfortunately there is no easy way to add this data to GA. You need to do some programming to collect the data. So this post is really meant for those folks with programming resources AND for those developers that maintain GA plugins. Like my buddy Joost, who has a great GA plugin for WordPress.
If you’re interested in the data and analysis, skip to the bottom of this post.
Conceptual Overview
Our goal with this hack is to modify site search data in two ways. First, we’re going to put all search queries with zero results in a category. This will allow us to use the Search Categories report to easily find all the search terms that yielded zero results.
Second, we’ll modify the actual search terms to indicate that a term yielded zero results. This will make it easy to scan a list of all the search terms and identify which generated no results.
Before we get into the implementation, a big THANK YOU to Charles Miller, one of the lead consultants here. He wrote the JavaScript below. Thanks Charles.
Step 1: Identify No Result Search
The first step is to identify a zero results search page. Most websites have the same search results page regardless of the number of results. You need to identify some something that differentiates a zero results search page from a non-zero results search page.
This must be done programatically and is the hardest part of the implementation.
For example, a zero results search page on this blog has the text “No posts found. Try a different search?”
I can create code (or more specifically, Charles can create code) to look for the text “No posts found. Try a different search?” If the code finds this text in the page then I can identify that the visitor’s search yielded zero results and than I can send the data sent to GA. Here’s the code that I’m using on this blog:
var content = document.getElementById('content');
if (content.innerHTML.search('No posts found.')) {
The code looks for a section of the page called ‘content’ and then searches that section for the phrase ‘No posts found.’. If ‘no posts found.’ is found (oh, the irony!) then we will modify the data sent to GA.
Important! The way you detect a zero result search page may be different. It’s VERY difficult to create an example that will work for everyone. Take this as a conceptual overview.
Step 2: Tweak GA Tracking Code
Once we know what differentiates a zero results search page we can add some code that tweaks the data. Remember, we want to modify the data in two ways: 1. by placing it in a special search category and 2. by modifying the search term to indicate it did not yield any results.
To create the category all we need to do is add an extra query string parameter to the URL.
To manipulate the search term we need to split apart the page URL and then put it back together with the phrase no-results.
Here’s the complete code.
<script type='text/javascript'>
var pageTracker = _gat._getTracker("UA-XXXXXX-1");
var content = document.getElementById('content');
if (content.innerHTML.search('No posts found.')) {
// These lines get the search data from the URL and
// deconstruct the URL into parts
var sn = "s";
var sr = new RegExp(sn+"=[^\&]+"),
p = document.location.pathname,
s = document.location.search,
sm = s.match(sr).toString(),
srs = sm.split("="),
// The next line is where we add the category and add
// the phrase no-results to the search term.
sre = sm.replace(sr,srs[0]+"=no-results:
"+srs[1]+"&cat=no-results"),
sf = s.replace(sr,sre);
// Send the data to Google as a Pageview
pageTracker._trackPageview(p+sf);
} else {
// If this is a regular page on the site, use the standard GA code.
pageTracker._trackPageview();
}
</script>
The code starts with the section that identifies a zero result search page.
Then we deconstruct the URL to identify the search term. Finally we add the category named ‘no_results’ and the phrase ‘no-results’ to the search term.
If the code does NOT find the term ‘No posts found.’ then a pageview is created as normal.
That’s it for the coding part (thank goodness!)
Step 3: Configure Site Search Settings
The last step is to add the new category parameter to the Site Search settings so GA can identify the no-results search category. This is easy, it’s in the profile setting section of Google Analytics.
I also like to set the ‘Strip Query Parameter’ to YES. This removes the category parameter after site search is done processing and normalizes your pageview data.
That’s it for the configuration! We’re cleared for insight-hunting!
Analyzing The Data
When a visitor performs a search that yields zero results the search term will be placed in a category named ‘no_results’. To find this data navigate to the Content>Site Search>Categories Report:
Immediately you’ll be able to see what percentage of your searches yield zero results. Hopefully it’s very low! Want to see if this impacts conversions or revenue? Click the Goals or Ecommerce tab to check the conversion rate:
This is a bad picture, but you get the point.
Next you can click on the no-results line in the data and see exactly which search terms yielded zero results.
This is super-actionable data. Now you know where you may be missing content or if your site search engine might be broken. You should be asking yourself, “Why are there no results for these terms? Is there missing content or is there a problem with my site search engine?”
You’ll also notice that the search terms now have ‘no-results’ in them. This provides a lot of flexibility for view the search data other ways. Example, let’s use the Search Terms report:
Here we can see the search terms ranked by searches. What percent of your top 10, 20 or 50 are no-result searches? How is that impacting your bottom line?
This is just the start. You can use other metrics, like %Search Exists to understand if visitors who receive zero results refine their search or exit.
While this is not the easiest thing to configure, I hope you see the value of the data. More so, I hope that all those folks that maintain plugins add this type of feature to their GA plugins. Joost, you listening!?
Resource from: http://www.epikone.com/blog/2009/09/08/tracking-ero-result-searches-in-google-analytics/