Automatic Outbound Link Tracking

October 16, 2007 by Justin Cutroni

With the release of the new GA.JS tracking code Google Analytics now supports automatic outbound link tracking. No more adding urchinTracking() to links!

In order to get outbound link tracking to work you need to migrate to the new ga.js.

I don’t have any reports to show you, but hope to have some soon.

Subscribe:

Event Tracking Pt. 2: Implementations

October 16, 2007 by Justin Cutroni

In this post I’m going to discuss how to implement event tracking in Google Analytics. If you have not read part 1, I strongly recommend you do so because I reference Part one extensively. When we implement event tracking we add code that creates the data model we defined in Part 1. We’re going to continue our example of tracking an event in Google Maps. We want to find out how which map view people use most.

The Data Model

If you remember part 1, I created a data model for our event data. This will help us answer our business question and it will help use create the code.

Tag Your Pages

I know this seems simple, but the first step is to make sure your pages are tagged with the GA tracking code. Remember, this only works with the new ga.js tracking code.


<script type='text/javascript'>;
var pageTracker = _gat._getTracker("UA-XXXXX-X");
pageTracker._initData();
pageTracker._trackPageview();
</script>

Creating The Object

The first thing we need to do is create the object that we want to analyze. To create a new object we use a method name _createEventTracker(). We pass this method a value and that value is the name of the object we defined in the data model. Our object is called ‘Map’ so let’s use ‘Map’ in the name:

var mapEventTracker  = pageTracker._createEventTracker('Map');

When we look at the reporting interface we will see ‘Map’ in the Objects report. Pretty straight forward, huh?

This code must appear after your GA page tag. The reason is that the _createEvent Tracker() method is attached to the pageTracker object. In this example, I’m going to place it in the same block as the regular tracking code:


<script type='text/javascript'>
// Here’s the standard page tag stuff
var pageTracker = _gat._getTracker("UA-XXXXX-X");
pageTracker._initData();
pageTracker._trackPageview();

// Here is the new event object
var mapEventTracker  = pageTracker._createEventTracker('Map');
</script>

Tracking the Action

Now that we have an object, how do we track an action associated with that object? We add JavaScript to our page code when the action takes place. So, with our Maps example, we would add some code when the visitor clicks on the button to change the Map view type. Here’s how that code might look:

onClick="mapEventTracker._trackEvent('Change Map View', <label>, <value>);"

<label> and <value> should be replaced with one of the labels we identified in our data mode:

Map 5
Satellite 10
Hybrid 15
Street Level 20

What happens when a visitor clicks on a map button is that the code sends the action, label and value to GA and associates it with the map action we defined above. Now you can see how our data model really drives the implementation.

Tracking Multiple Objects

Ok, so here is something that’s pretty cool. Let’s say the map team wants to add two different maps to a single page. We can track both of them using the same map object. We would then differentiate what the visitor does using different labels. The actions would remain the same for both objects, but we’d have different labels.

A Final Note

I’d like to say that every implementation for event tracking can be different. It really depends on the business questions you need to answer and the structure of your pages. I think this post does a very good job of covering the basics, but your specific implementation will probably be a bit different… Unless you’re Google Maps. :)

As we’ll see in the next post, the new Event reports provide a logical structure for analyzing event data.

Subscribe:

GA On Site Search Pt. 1: Overview & Setup

October 16, 2007 by Justin Cutroni

Google Analytics Site Search MenuThis is part 1 in a two part series about tracking on site search with Google Analytics. In this post I outline the setup and configuration you need to perform to create accurate, usable data in the new reports. If you’d like to get a look at the reports, you can skip to part 2, where I talk about the reports and how to use them.

How to Set It Up

The new search reports are based on a query string parameter that contains the search term that the visitor entered. All you need to do is specify the name of the parameter in the profile settings. As GA processes the data it identifies the search term and builds the reports.

It is important to note that on site search processing happens BEFORE filters are applied. This means that we have no way to modify the way that search data appears in our reports. I personally believe that this is a mistake and it limits our ability as practitioners to generate the data that we need for analysis. I’m hoping that Google can somehow change this.

Basic Setup

The first thing you need to do is turn on site search reporting. This is easy, it’s an option in the profile settings (please see the image below).

Next, you need to tell Google Analytics which query string parameter contains your search term. The best way to identify the query string parameter is to do a search on your site. If I do a search on my site for ‘world series’, and the search results page URL looks like this:

http://www.website.com/search_results.php?q=world+series

then I would add ‘q’ to the search term field. Pretty simple, huh? The query string parameter goes in the ‘Query Parameter’ field (again, located in the profile settings).

Google Analytics Site Search Configuration

You’ll notice that I’ve added two query string parameters in my example. The epikone.com website has two different search engines. You can define up to 5 parameters. This gives you a lot of flexibility if you are using multiple on site search engines.

Category Setup

Many search engines allow users to refine their searches using categories. For example, if I search for ‘lavender’ the search engine might let me focus my search in the ‘soaps’ category or ‘tea’ category. This configuration drives a specific report that show the search terms for each category.

Setting up the categories is the same as setting up the search terms. All you need to do is identify the query string parameter that identifies the category. In the following example I would enter ‘cat’ in the Category Parameter field.

http://www.website.com/search_results.php?q=lavendar&cat=soap

Adding Categories to Google Analytics Site Search

Other Options

There is one final setting that is very important. You may have noticed the radio buttons for strip query parameters out of URL. This setting will remove the on site search query string parameter from the URL after on site search processing is complete. This means that the query string parameter, and the search term, will be removed from ALL other reports. It’s very much like the exclude query string parameters setting in the profile settings.

If you choose yes, GA will consolidate pageviews for the search results page. This can be good and bad.

Here’s an example. If you do a search on my blog the URL will look like this:

http://www.epikone.com/blog/?s=world+series

Now, if I choose to remove the query string parameters GA will process the site search and then merge the resulting URI with all other instances of

/blog/

As you can see this is going to INCREASE the pageviews for /blog/. Is that good or bad? In the case of my blog it’s a bad thing because /blog/ is also the homepage. Removing the query string parameter will artificially inflate pageviews for the homepage.

However, if your on site search engine has a specific results page, like:

http://www.site.com/seach-results.php?q=world+series

Then removing the query string parameters is a good idea. The reason is you’ll have a single line item for your search results page in your reports and you’ll still be able to analyze on site search data using the On Site Search reports.

Common Problems

What if your on site search results page does not contain the search term in the URL? This is usually the case if your search form is using the POST method.

The workaround is to alter the way the search results pageview is created. This means manually creating a pageview for the search results page, that contains the search term. This is done by passing the tracking code on the search results page a value. Make sure that value includes a query string parameter containing the search term. Then specify the query string parameter in the on site search setup.

Here’s how you can modify the tracking code on the search results page to resolve this issue:

Old urchin.js implementation:
urchinTracker('/blog/search?q=<term>');

New ga.js implementation:
pageTracker._trackPageview('/blog/search?q=<term>');

Where <term> is the search term.

NOTE: If you haven’t heard, there is a new GA tracking code. You can read more about it in this post.

Optimizing the Setup

One thing that I’ve noticed is that the reports do not massage the data in any way. They report the raw keywords that the visitor entered. It’s great that we can see raw data, but it’s very easy to have duplicate data based on capitalization or spelling. Here’s an example. The following terms would all appear as different line items in the search reports:

Red Sox
red sox
redsox
red socks

From an analysis standpoint, the above terms are all the same. Visitors are searching for information about ‘red sox’. A certain amount of normalization would help, but we don’t want to eliminate too much data. Unfortunately the site search processing happens BEFORE filters, which means that we can not use filters to modify the data. I had initially thought we could use filters, but that is not the case.

Any data normalization MUST be programatic, it can not be done with filters! So, if you want to force all of your search terms to lowercase you must modify the page tag on your search results page. Specifically, you need to change how the pageview is created in GA. Here’s a sample piece of code that will force the query string parameters to lower case. You’ll need to update the tracking code on your search results page.

New ga.js code:
pageTracker.trackPageview(document.location.pathname + document.location.search.toLowerCase());

Old urchin.js code:
urchinTracker(document.location.pathname + document.location.search.toLowerCase());

This code change will eliminate all duplicates caused by capitalization.

Unfortunately there is no easy way to remove duplicates caused by misspelling. If we could only use filters… :)

Other Uses

What I find interesting is that this framework can be used to track other things. For example, let’s say you have an online ticketing service and the search feature passes certain search characteristics via the query string. I perform a search for tickets to see the Red Sox play at Jacob’s field. I specified the price range of the tickets and the date of the game. The URL might look like this:

http://www.tickets.com/search?price=100-200&date=20071014-20071016

What if I configure the new search reports to use price as the search field and data as a category? The reports should show me some really cool information. I haven’t tried this yet, but it could be very useful.

Subscribe:

Google Analytics Short Cut

September 13, 2007 by Justin Cutroni

As some of you may have noticed, my book PDF e-book has been published! Google Analytics Short Cut hit the web on August 31 and is now available for purchase at O’Reilly’s website.

In my opinion, and I’m a bit biased after writing for all those hours, it’s a pretty good deal for $10 US. Let me tell you why…

#1 Structured Information
There’s a lot of Google Analytics information out there. We have the GA group, blogs and some books. But, in my humble opinion, the one thing that is missing is a basic manual that provides a structured description of the system’s architecture and features. This was the real driving force behind the PDF. I wanted to explain how things work so users understand the results of certain configurations.

I didn’t want to create a web analytics book. Some pretty smart people have already written wonderful books that discuss web analytics. I wanted to create a work that can help people implement different web analytics strategies using Google Analytics and I think I did that.

#2 Free Updates
O’Reilly provides free downloads of updated PDF documents that you have purchased. How cool is that! We’ve seen Google make some pretty interesting changes to the product in the last 6 months. In fact, they just updates how time-on-site is calculated yesterday. I intend to update the PDF twice a year to cover any new features or major modifications. I might update it more if Google rolls out major changes.

But there’s a caveat… O’Reilly will only update the PDF if sales are good. You know where I’m going with this one. :)

If you’re interested in learning more about GA Short Cut please visit gashortcut.com and please make sure you read the acknowledgments. If you’d like to hear what others are saying you can read the reviews on O’Reilly’s site or check the reviews on gahortcut.com (If you’re interested in writing a review please let me know. I would be honored.)

Finally, I’d like to thank all of you. Thank you for sharing your thoughts, questions and ideas with me. Thanks for adding to the discussion and helping me grow and learn. I had no idea that blogging would lead to so many opportunities. But, more importantly, I had no idea it would lead to so many new friends.

Subscribe:

Segmenting Members from Non-Members

August 29, 2007 by Justin Cutroni

Do you run a subscription based website? You know the type of site: customers pay you a monthly fee and you give them access to valuable content. I’ve worked with a number of clients with this business model and have noticed that many make a consistent mistake when setting up their analytics package: they fail to segment people who subscribe to the website (i.e. members) from those who do not.

Why is this so important? Here’s an example. The following image shows some real data that is not segmented other than the removal of internal employees:

Non-Segmented data

Now, here are the same metrics with members removed:

Segmented Metrics

Big difference, huh? Just image how this changes all those metrics that are calculated using Visits, like conversion rate, abandonment rate, etc.!

It doesn’t matter what analytics tool you use. If your website has some type of member’s area you need to segment out members to get an accurate view of your website performance and online marketing activities.

The Google Analytics Way

If you’re using Google Analytics the implementation is simple. Use GA’s custom segmentation feature to identify and segment members. Remember, the custom segmentation features uses a JavaScript function, __utmSetVar(), to set a cookie, named __utmv, on the visitor’s machine. The cookie is a persistent cookie and lasts for 6 months. You need to call __utmSetVar() when a member identifies herself. You can put it on a ‘thanks for logging in’. Here’s a perfectly good implementation of the code:


<script type="text/javascript">
__utmSetVar('member');
</script>

Remember, the above code snippet should appear AFTER the standard Google Analytics tracking code. The reason is that the __utmSetVar() function is in the urchin.js file. So if you try to call __utmSetVar() before the urchin.js is loaded by the browser then the visitor will receive an error.

Once the cookie has been set on the visitor’s machine you can use the custom segment value to exclude them from a profile. The exclude filter would look something like this:

GA Filter to exclude members

Any profile that has this filter will only show data for those visitors that are not members thus providing a more accurate view of how effective the website is at converting visitors.

And let’s not forget about the members. You can create a profile that only includes members (the filter settings are almost identical to the filter above, just change the filter type from ‘exclude’ to ‘include’). By creating a profile specifically for members you can focus on their usage of the member’s area. For example, the Top Content report will identify the content that they find most engaging. You could also use some of the loyalty reports to see how often they use the website.

Tip: Tracking Different Subscription Levels

If your membership model has various level, like Gold, Silver and Bronze, you can include this information in the custom segment value. This allows for a more detailed analysis of each membership level. Just modify the value you pass to the __utmSetVar() function. For example:


<script type="text/javascript">
__utmSetVar('member-gold');
</script>

or


<script type="text/javascript">
__utmSetVar('member-silver');
</script>

or


<script type="text/javascript">
__utmSetVar('member-bronze');
</script>

After the custom segment cookie has been set you can create different profiles for each subscription level. Use the filter shown above, just change the value for Filter Field to match one of the values in the code above. Then you can use the profiles to analyze the member data and observe their habits.

Subscribe:

Segmenting Visitor Loyalty Reports in GA

July 17, 2007 by Justin Cutroni

[ UPDATED: I’ve added some more information re: filtering direct and referral traffic. ]

This is a quick post. The goal is to help all you GA users that read Avinash’s most recent post about measuring success for non-e-commerce sites. Avinash lays out three recommendations including:

3. Segment the data! For Visitor Loyalty or Length of Visit what are the most important acquisition sources? What are the keywords that drive valuable segments of traffic to the website? As you look at longer time periods what pieces of content do people with longer visits consume? And so on and so forth. Segmentation is key to insights that will drive action.

Specifically, Avinash recommends that you segment the following reports in GA (or whatever tool you use):

  • Visitor Loyalty
  • Visitor Recency
  • Length of Visit
  • Depth of Visit

However, if you’re a GA user you can NOT segment these reports from the reporting interface. The only way to segment the Visitor Loyalty reports is via filters and profiles.

When you apply a filter to a profile it segments the data during processing. Here’s an example. Let’s say you add an include filter to a profile. Here’s the filter:

Include filter for segmentation

This filter only includes data that comes from the cpc or ppc medium (paid search). So all of the reports in the profile only contain data from paid search campaigns. By using the filter you’ve segmented the data.

Let’s take this one step further. We’ve just filtered the data by the paid search medium. Now we want to further segment by each search engine (i.e. Yahoo!, MSN, Google). We could create a second filter based on the campaign source:

Campaign Source Filter

Now the data in this profile, and the Visitor Loyalty reports, is specific to paid search activities from Google. We’ve successfully implemented Avinash’s recommendation.

You can adjust these filters (and thus the segmentation) based on the values of Campaign Medium and Campaign Source. To create a profile with only email traffic change the medium filter above so the filter pattern is ‘email’.

Remember, the values of Campaign Medium and Campaign Source can have a default value (like organic, referral or direct) or a set value that comes from the utm_medium and utm_source parameters used in link tagging. You can read more about link tagging in a previous post I wrote.

You can always find the values for Campaign Medium and Campaign Source in the Traffic Sources > All Traffic Sources report, just segment the report using the Medium or the Source.

20070717_all_sources.png

Here are the top 10 traffic sources for Analytics Talk:

20070717_sources.png

If I want to create a profile for traffic from the Official GA blog I would use an include filter, based on Campaign Source, with ‘analytics\.blogspot\.com’ as the filter pattern. Remember, the filter pattern is a regular expression!

To filter direct traffic you should set the Filter Field to Campaign Source and the pattern to ‘\(direct\)’. For referral traffic, set the Campaign Medium to ‘^referral$’.

Is this an intuitive approach to segmentation? Not really. But it works perfectly. When you set up accounts create profiles for major acquisition mediums and sources to gain the insight you need to judge success.

Subscribe:

Breaking Up Is Hard To Do: GA Account Setup Tip

July 14, 2007 by Justin Cutroni

The BreakupThis post is for all you contractors and agencies out there that are setting up Google Analytics for your clients. I want to help your relationship. No, not the relationship between you and your significant other. The relationship between you and your client.

One of the biggest problems I see when working with companies is contractors that set up Google Analytics incorrectly. I’m not talking about poor configuration settings, I’m talking about Google Account issues.

Here’s the situation. You, as the contractor, decide to create a profile for each of your clients in a master Google Analytics account. This seems like a good idea because you can log in and have all your client metrics accessible in one location. Plus you can grant user access to each client so they can access their metrics. However, you can’t grant them admin access because each client would have access to ALL profiles (i.e. clients) in your account.

Here’s the problem. If you ever decide to part ways with your client there is no way to transfer ownership of their profile(s). They will have user access to their profile(s), that you created, FOREVER.

Why? When you create a profile it’s tied to a specific account. That means that the data physically flows into a specific bucket. Look at the tracking code for a profile


<script type="text/javascript">
_uacct = "UA-22222222-1";
urchinTracker();
</script>

The account number is right there for you to see. During data collection, the data goes into the bucket for the account number in the tracking code. If you change the account number in the tracking code the data goes into a new bucket but the historical data stays in the old bucket. See, there is no way to move the data.

Account Setup Tip

To avoid this situation, do not add client websites as profiles to a single Google Analytics account. Instead, create a new Google Analytics account for each client. Then, have the client grant you, the contractor, access.

This also pertains to those of you setting up GA for your companies. Do NOT create a profile for your employer in your personal GA account.

At EpikOne we have two primary GA accounts: an admin account and a reporting account. We ask clients to add these accounts to their GA account when a project begins. The admin account is only used by a few of us. We use it to make changes to a client’s GA settings. The second account is used for day to day access to the client data. We give analysts and other internal data consumers access to this profile so they can play with the data and we don’t have to worry about them breaking any settings.

If You’re Guilty

If you’re setting up client profiles in the above manner, I suggest you tell them immediately and start a migration process. Will it be painful? Potentially. But it’s in the best interest of the client.

See the Problem for Yourself

There are some folks that are probably thinking, “Just make the client an administrator, and then delete the contractor’s admin account.” That will work, but the client will then have access to all of the profiles that are in the contractor’s account. Furthermore, if the client deletes the other client profiles, they will be deleted from the contractor’s account as well.

I think it’s difficult to visualize this problem so you can test it out for yourself. I’ve create two GA accounts that you guys can play with. I’m not sure how well it will work, but I thought I would give this a try.

Account #1
username: ga-acct-contractor@cutroni.com
password: contractor

Account #2
username: ga-acct-client@cutroni.com
password: client

If you do add/delete profiles, please re-create them for the next user. Try to leave both accounts the same way that you found them.

Subscribe:

All About Google Analytics Goals

July 7, 2007 by Justin Cutroni

Goal!Google Analytics Goals are a way to measure conversions on your website. A conversion occurs when a visitor does something you want them to do. This could be completing some type of high value process or viewing a specific page on your website.

Setting up goals is one of the most important steps when configuring Google Analytics. Without goals, there is no easy way to measure conversions. If you’re unfamiliar with conversion, or the related metric conversion rate, please take a moment to read about why both of these metrics matter. In general, counting the number of conversions and tracking the conversions rate is a good way to measure the success of your website.

During this post I’m only going to cover how goals work and how to set them up. I’ll discuss how to use goals in my next post.

What’s A Goal (Technical)?

At its core, a goal is just a pageview. It’s could be a specific page on your website that you want the visitor to see or the page that is displayed when a visitor has completed a process. A goal is literally defined by the URL of said page. As GA processes site data, it increments the goal counter each time a pageview for the ‘goal’ page is found. It should be noted that if the goal page is found multiple times in a single visit then goal counter is only incremented once.

I’ll explain a little bit more about how goals work, at a technical level, at the end of this post. There’s a few things I need to cover before we get into the nitty-gritty tech stuff.

Creating A Goal

There are multiple ways to define a goal. The method you choose depends on the complexity of your website. The easiest way to create a goal is to copy the URL of your goal page from a browser into the Goal URL text field. So, if the process ends with http://www.epikone.com/thankyou.php, enter http://www.epikone.com/thankyou.php in the Goal URL field. Here’s another example. If the URL of the goal page is http://www.epikone.com/thankyou.php?submit=true then enter http://www.epikone.com/thankyou.php?submit=true into the Goal UL field.

Goal Settings

A goal can also be defined using a regular expression. Rather than enter an exact URL in the Goal URL field you can enter a regular expression. This is particularly helpful if the website is dynamic. If the goal page contains a unique identifier then you can’t copy and paste a URL into the Goal URL field. Every goal URL will be different. You need to use a regular expression for the Goal URL. I’ll discuss this below in the Additional Settings section.

Goal Name
When defining a goal you also need to give the goal a name. There’s nothing special here. The Goal name will be used to identify the goal in the Google Analytics reports. Don’t use anything too long, it can make the reports difficult to read.

Activate Goal
The Activate Goal setting is an on-off switch. Switching the setting to ‘Off’ will stop tracking for the goal. Why would you want to turn a goal off? Google Analytics will calculate an overall website conversion rate using all of the goals you define for the site. If you create a goal that is temporary, say for a specific campaign, then it could artificially skew the overall site conversion rate if you leave the goal on after the campaign, ends.

Additional Settings

Each goal has an Additional Settings section that can help configuration in unique situations. It’s located at the bottom of the page under the Funnel settings. By the way, you do not need to create a funnel when you create a goal. Defining a funnel is optional.

Additional Settings

Case Sensitive
The Case sensitive setting can be used with websites that have mixed-case URLs. So, if your Goal URL value is case sensitive then click the Yes radio button. However, profile filters can affect this setting. I’ll explain more at the end of this post.

Match Type
Match!
The Match Type setting is a powerful setting that can aid in goal tracking. For example, if each goal page contains a unique customer identifier then it will be impossible to paste a single URL into the Goal URL field without the use of the more sophisticated match types. Google Analytics has three different match types that can be used for Goals and Funnels.

Exact Match
When you choose Exact Match the value in the Goal URL field must exactly match the URL of the goal page displayed in the location bar of the visitor’s browser. This is the setting you want to choose if you copy the URL from the browser and paste it into the Goal URL field. If your website uses a unique identifier in the goal URL (like a visitor ID number or an order ID number) do NOT use an Exact Match. Use a Head Match or a Regular Expression.

Head Match
The Head Match is like a light-weight regular expression. You should use a head match when a small part of the goal URL differs from one visitor to another. With a head match, if the value entered into the Goal URL matches any part of the URL in the visitor’s browser then the goal will be counted. The Head Match will match both path data and query string variables.

For example, if there is a unique identifier in the goal URL then you can use the head match to define the goal. Let’s say the Goal URL for a visitor is http://www.epikone.com/thanks.html?submit=true&id=12345. The id query string parameter is a unique identifier that will change from one visitor to the next. So, I could use a HEad Match and enter the following into the Goal URL: http://www.epikone.com/thanks.html?submit=true. Because the Goal URL matches PART of the actual URL for the goal page, GA will count this goal.

Regular Expression
This setting defines a goal using a regular expression. If the regular expression entered into the Goal URL matches any part of the goal URL then the goal counter is incremented. Using a regular expression is particularly useful because it let’s ‘wrap up’ goal tracking so you track multiple goals in a single goal. You can track multiple goals using a single goal because a regular expression can match multiple URLs. For example, let’s say you want to create a goal that tracks and PDF file download. You could enter \.pdf into the Goal URL field. I actually wrote about using regular expressions to get more out of goals last year.

Goal Value
Money

The final option in the Additional Settings section is Goal Value. Use this field to monetize non-e-commerce goals. For example, if each Contact Form submitted by a user is worth $100, enter 100 in the Goal Value field. Google Analytics will use 100 to calculate return on investment (ROI) and other revenue based calculations. If e-commerce tracking is active for a profile, and you would like to use e-commerce data for your goals, simply leave the goal value field blank. Google Analytics will pull in the e-commerce data.

One thing to note is that the Additional Settings are applied to both the values in the Goal URL and Funnel steps. I know I’m not covering funnels in this post, but this is a common mistake. It is not possible to use an Exact Match for your funnel steps and a Regular Expression for the Goal URL.

Tips, Gotchas & More

Let’s dig a bit deeper and learn how GA actually counts goals. During data processing the value you use to define a goal is compared to the Request URI value. You remember the Request URI, right? It’s part of the URL (everything after the .com, .net or .org). I know this seems strange especially because a goal can be defined by a complete URL, but this is how the data processing works.

It is important to understand that the Request URI is used during goal processing because if you create a filter that modifies the Request URI then it might break your goals.

Here’s an example. Let’s say the Request URI, in its original form, is /pages/html/index.html. You decide to modify this value using an advanced filter and it becomes /pages/index.html. If you define a goal using /pages/html/index.html then the goal will not work. The reason is that the Request URI (/pages/index.html), which was changed by the advanced filter, no longer matches the value entered as a goal (/pages/html/index.html).

How about another example? If you force the case of the Request URI to lowercase, and then define a filter using all uppercase characters AND specify that the goal is case sensitive, then the goal will not work. Get it?

I know this seems strange, especially when most people use an exact match to define their goals. But that’s the way goals work, honest! Don’t be alarmed by this. Using an Exact Match is a perfectly fine way to define a goal.

Here’s a tip. You can also define goals based on data created by urchinTracker(). Remember, if you pass a value to urchinTracker() then that data becomes a pageview in Google Analytics. These pageviews can then be defined as goals. You can read more about urchinTracker() in this series of posts. I’m using this technique to track RSS subscriptions on my blog.

And finally… A great way to debug goals is to use the Top Content report. Remember, a goal is just a pageview. If GA is reporting 0 goals, then check the top content report. Does the goal page appear in the Top Content report? If it’s missing, then there is probably an issue with your page tags. But, if the goal page is present in the Top Content report then there is probably an issue with your goal setup.

Wow… that’s a long post. Does it all make sense? Leave a comment and let me know!

Subscribe:

Writing More than Blog Posts

June 8, 2007 by Justin Cutroni

My book cover.

Over the past few years I’ve learned quite a bit about Google Analytics in my day to day job as a web analyst. I’ve tried to pass along much of what I know using this blog. Now I have a new way to share my knowledge.

The good people at O’Reilly Media have given me the chance to write a book. I can’t tell you how excited I am about this opportunity!!! I truly enjoying helping other people and this book provides another way for me to do that.

I’m not sure when it will be published, but it should be in the next month or so. The first draft is done and I’m waiting for the editor to rip it apart return her edits.

The book is part of O’Reilly’s Short Cuts series and is titled Google Analytics Short Cuts (how’s that for original?).

Short Cuts are PDF documents that spotlight one specific topic, usually in fewer than 100 pages. Whether it’s a first look at a brand new technology, a quick reference, or a thorough explanation of a narrow but crucial subject, Short Cuts bring you focused information in an easy-to-use, portable package.

I want to stress that this is not a ‘how to’ web analytics book. It’s a book about Google Analytics and is focused solely on the product. Sure, I take time to discuss how certain GA configurations can affect your data, but I don’t dive into topics like the long tail of search or the nuances of multivariate testing. I talk about things like cookie formats, getting third party shopping carts configured correctly and link tagging (among other things).

If you’re looking for great web analytics books I suggest the following (listed in no particular order):

Web Analytics: An Hour a Day by Avinash Kaushik

Actionable Web Analytics by Jason Burby and Shane Atchison

Web Analytics Demystified & The Big Book of Key Performance Indicators by Eric Peterson

Once I know the exact publication date I’ll post more information about the contents and a long list of thank-yous to those who are helping me through the process. In the meantime, check out the above books!

Subscribe:

Introducing SiteScan

May 25, 2007 by Justin Cutroni

SiteScan!We all know that getting Google Analytics configured correctly is the key to getting good data for analysis. To help facilitate that process EpikOne has created a new tool called SiteScan. Originally we wanted a tool that would scan all pages and check for the tracking code. Believe it or not, missing tracking code is an issue. Even for enterprise clients. But I digress…

SiteScan is a GA diagnostic tool that scans your website for installation issues. Not only will it identify pages that are not tagged, it will also look for other configuration pitfalls. All you need to do is enter a website URL and SiteScan will crawl the site. When it’s done you’ll get a nifty report with the results.

SiteScan report

When you sign up for SiteScan you can re-scan your site 5 times. So, if SiteScan finds any issues you can fix them and then re-scan the site to make sure all the issues are resolved.

A big congratulations to Alex and Casey who worked very hard on this. Great job guys.

Subscribe: