In this article I’ll use the SEO filter, made by Andé Scholten, to make some new interesting SEO reports in Google Analytics. I realized that the data, provided by the filter, had given me some new opportunities. It wasn’t possible in Google Analytics to get good SEO related reports. The reports I did get were these:
- An overview of keywords during a specific period and (after clicking) the landings page on which visitors landed after clicking on the Google result.
- An overview of the ‘Entrance Keywords’ of a specific page.
I wanted more and figured the SEO filter from André would give me the information I needed. The filter linked webpages to the Google result page (where 0 is the first page, 10 the second page, etc). A very nice filer, but I wanted more!
The reports I have made will give you the following information:
- An overview of all the keywords and the Google rank over a certain period.
- An overview of a given specific keyword and the page Google rank during a certain period.
- An overview of the pages, found by Google, for a specific keyword and the Google rank during a certain period.


Click on the images for a better view.
The screenshots in this article are taken from the Google Analytics account of Top Kinderboek, a Dutch e-commerce bookstore with books for children.
Now how did I get all these beautiful reports?
Follow these steps and you’ll get them! But be prepared: start by making a new profile.
Step 1: Make a new profile
Step 2: Make a filter that only includes organic traffic in the profile

Step 3: Make a filter that only includes Google traffic in the profile

Step 4: Make a filter that gives every Referrer a ‘start’ value (parameter)

The ‘start’ value tells us on which page in Google the link to your website was clicked by the person who searched. The first result page in Google doesn’t contain a ‘start’ value. So I use a filter to connect a ‘start’ value to each Referer. This way each Referer contains a ‘start’ value and some Referers contain several start values. For those Referers Google will grab the first start value in the next filter (see Step 5).
Step 5: Add Andre’s custom made SEO filter to your profile

Step 6: Wait for data…
Congratulations! You have now set up your profile. This profile contains only organic traffic from Google and fills the ‘User Defined’ value with the ‘start’ value.
Your profile is ready to go; time for segmentation!
One of the beautiful things about Google Analytics is the possibility to make segments. You can compare different segments over a specified time period. Unfortunately it’s only possible to compare a maximum of three segments at the same time and Analytics adds the ‘all visits’ segment to your report when you want to compare two or three segments. It is however possible to make some nice reports. Using the User Defined value (see Step 5) I made two segments:
Segment 1: The search result is on the first result page in Google
Segment 2: The search result is on the second page or further in Google
This is how I made those segments
Click on ‘Advanced Segments’ in ‘Settings’ and click on ‘+ create new custom segment’. Here you can make your own segments. In the following images you can see how you set up these two segments.
Segment 1: The search result is on the first result page in Google
Segment 2: The search result is on the second page or further in Google
Congratulations! You now have two segments. Now you can make a segment for each Google result page. This gives you more detailed information about the position of your keywords in Google.
See your segments in the Google Analytics reports
You now have the perfect profile with two segments. It’s time to make the segments visible in the reports. Click on ‘Advanced Segments’ as shown in the following image.

When you add the segments to the standard reports then you’ll get a good overview of the SEO performance of your site during a specific period. I’ve show some examples of these reports at the beginning of this article but there are far more to explore!
Using these segments will give you a better insight into the value of SEO for your website. For Zoek Kinderboek the link on the first result page in Google is far more valuable than all other result pages. The difference between the amount of traffic from page one (and the difference in bounce rate and time on site) compared to all the other result pages is enormous. These reports can have additional value when combined with the regular SEO reports that rank keywords. These new reports give a good overview of your presence in Google´s results, how much traffic (and sales) this presence generates and what the behavior is of the people who searches.
Good luck with making these segments and I´d be happy to hear about your experience and to receive your feedback.
Update 9 February 2009
In my reports the User Defined Value is often ‘(not set)’. The second segment will include this traffic. I don’t know why the User Defined Value can be ‘(not set)’. Does anyone know? Google refers to ‘anonymous users segment results’ (in the User Guide). But, for the time being, I’ll change the second segment, so the User Defined Value (not set), will not be a part of the second segment. But… how? The segmentation filter does not return any values:




Whoa I just set these filters up I can’t wait for the data.
WOW! Really extensive article. Thanks for the write up. Will definitely set this up tonight!
Thanks for the write up Joost, I just set one site up for this, and can’t wait for traffic to generate some data!
It’s actually Reinout who wrote this, but very glad you like it!
Fantastic. I’ll be setting this up as well. Thank you, thank you!
You have done it once again Joost, you never seem to disappoint!
This time the credits are actually for Reinout, but it is great content, I agree :)
Should André’s and Reinout’s filters be used ‘simultaneously’, or will Reinout’s do what André’s does and more, i.e. can Reinout’s replace Andre’s version completely?
Both filters uses the ‘User Defined’ field, so that will be a problem. The filter I made fills this field only with the ‘start’ value and André’s filters fills this field with the keyword and the ‘start value’. So, the segments I made will not work with the output of André’s filter. André’s filter gives directly an overview of the pages and their position. The filter I made gives only the positions, so you are able to combine this information (make correlations) with all the other data in Google Analytics.
Little extra information on the part of “It’s time to make the segments visible in the reports. ”
First go to “Visitors” -> “User Defined” and on that page click on “All Visits”. There you can check both the checkboxes and give it a name.
Wow, very imporessed. I’m going to give it a try!
Until now, i’m still confuse to use google analitycs, i’m just use standar report, but thanks for this articles, next time i will try it
You did it again! man! Thank you so much for all you share bro, I mean this is just GREAT stuff.
What a wonderful piece of detailed manual. Google has lots of hidden gems, and surely unearthed one few of the most important ones.
I hope you keep doing the same on your other posts Joost.
Thank you for this great tutorial!
I’d already implemented it and I’m waiting for data. My question is: How to do an SEO reports for Google Analytics related to the RSS? Did already wrote an tutorial about that? I’d searched your blog but there is too many results.
Once more: thanks!
Thanks for the post; I can’t wait to see the results!
Many thanks! I set it up and am just awaiting data as everyone else. Good stuff here.
How will this work if a user clicks on a local 10 pack listing instead of a true organic result? What happens?
Thanks!
Mike
It will (mostly) work the same way.
But: There is a difference between Google (English) and Google (Dutch – the one I use). The fact is that all the URL’s in Google (English) uses ’302 Found’ redirects to link from the result page (organic as local 10) to the web page: http://tinyurl.com/d746nv
Google (Dutch) uses direct URL’s (no redirect) for the organic results and for the local 10 pack Google links to Google Maps: http://tinyurl.com/bhn36o
So there’s also a difference by measuring the traffic.
At the moment I’m doing a research at all the different ways of redirecting and linking. I’ll keep you posted at yoast.com :)
This will help me see how my SEO campaign is progressing. This is great
Thanks, thats a fantastic analytics tip. Going to try it out now!
Dang, great article Reinout.
I had a little trouble setting up the segments and was wondering if you had any thoughts. I received this message when doing it:
Missing expression for comparison.
Thanks again for the awesome stuff… I’ll be spreading the word.
Reinout,
Regarding the “not set” value, I don’t have an answer for why the rank/position isn’t recorded, but I have a hypothesis about why your “(not set)” segmentation filter returns zero visits…
If the rank/position is not recorded, the underlying data field remains NULL, and what we see as (not set) is only how the user interface renders a NULL value. For the filter to work it would need the ability to search for records where the value IS NULL.
This theory is supported by related weirdness I’ve seen from Andre’s original setup (the one that returns keyword + rank/position in the user defined value).
Example:
1) Show Traffic Sources >> Keyword report
2) Refine by some keyword that appears in the list (meaning it’s definitely recorded in the normal keyword field)
3) Switch to User Defined Value dimension. Instead of user defined value showing keyword and rank/position, it’s “not set”.
In cases where keyword *is* defined and rank/position *is not* defined, the user defined value returns “not set” rather than “keyword + (not set)” because in SQL an operation involving a NULL field will generally produce a NULL result.
My guess is a bug or inherent limitation in Google’s system prevents the rank/position from being passed in some cases. Maybe this has something to do with SearchWiki / personalized search results?
Update:
It appears my theory about NULL fields was correct. You can isolate the NULL rank/position values using regex “^.” (without quotes)
Example, on the SERP p2+ advanced segment, in addition to the User Defined Value greater than or equal to 10 statement, add an AND statement where UDV matches regex “^.” In effect this is “UDV >=10 AND UDV IS NOT NULL.” Apparently without the second statement the NULLs are included by default when using greater than / less than.
As far as *why* the rank/position values are missing, I now suspect it’s related to return visits vs. new visits, but need more data to confirm.
Hi Bryan,
Thanx for all the information. I’ve tested it, and my outcomes are not completely correct.
I added the AND statement (UDV does not match reg exp ^.).
I made a segment with only the NULL data (UDV does not match reg exp ^.).
I use the segment in the reports (report: Visitors – UDV).
There the amount of visits of (not set) must be equal to the segment UDV (not set) – (does not match reg exp ^.)
But they aren’t eqaul…
As shown in this image: http://skitch.com/reinoutw/br3n7/user-defined-google-analytics
The difference is, in my profile, only for the positions 0, 10, 20 and (not set)
I think you’re close to the solution of the ‘problem’, but there must be more! :D
Kind regards and thanks for your help!
Some initial thoughts on what could cause the disparity…
I’ve seen a few cases where the referral data contains “(page: 0)” rather than “(page: )”, “(page: 10)”, etc. Maybe this is affecting your custom filter outputs? Any idea what “(page: 0)” means? I assume it’s SERP p1, but haven’t tried to confirm. There are only a handful of them.
Also, if you have any pages that use the _setVar function (such as to exclude internal traffic), it assigns a value to the UDV field. See http://www.google.com/support/googleanalytics/bin/answer.py?answer=55481&topic=11093.
You should also know we’re sort of comparing apples to oranges. I did create your setup a couple of days ago, but don’t have enough traffic to get much data quickly.
I also took your advanced segment idea and applied it to an existing profile that used Andre’s original setup, but using regex to create the advanced segments. You could try the same thing, and it would allow you to retain more of the source data in the UDV field, and maybe get a better idea of what’s causing the issues.
My advanced segments:
SERP p1
UDV matches regex \(page: 0?\)
Again, this assumes that “(page: 0)” = “(page: )”, but I could be wrong.
SERP p2+
UDV matches regex \(page: (..|…)\)
AND
UDV matches regex ^.
Oops, with this particular arrangement the final “UDV matches regex ^.” shouldn’t be required.
It’s a holdover from the >=10 segment we already discussed.
nice article, thanks
Wondering how this might work if I’m in N. America but monitoring UK stats…
Is there a way to make a filter that does second page poaching ?
Hi,
The reports can definitely be used to get ‘second page poaching’ insights. You can connect the search term, the Google SE Result Page (Google SERP) to the landingpage and see how much traffic (and sales) this combination makes.
When a search term rises from page 2 to page 1, you’ll see the effect in your Google Analytics reports. Based on this results you can ‘predict’ the outcomes of other rising (from page 2 to 1) search terms. So you can make (business) cases for your SEO optimization work. It’s worth it!
The only thing you can’t see are the real rankings (the real positions as 11 or 12). This information can be provided by tools as Advanced Web Ranking.
The link to Advanced Web Ranking does not work.
It’s working again. Thanks for your reaction!: Advanced Web Ranking
And the tip of the day (if you’re working on a mac): download the free trial, never shut your mac down, and you can use it forever!
I like it this is a nice article.I am new visitor,I think it provide us a lot of information.
Great writeup! It is in depth and amazingly effective to see these segments.
I have had these set up for 2 weeks now, but all my user values are coming in (not set). I see you made an update on your post about this being a problem. Have you managed to workk out why this is happening?
Hi
I’ve just been shown this on an account. Well done! I am very impressed and will use it for definite.
Nikki Rae
Great post, i had just implemented this on a new profile for my website…waiting for results now. I wonder…is it possible to set this for a specific language, to filter the results given by google.ro (as an example) as a referrer?
Thanks many many thanks I will try this in my site http://www.globalongoings.com
Hi there! I’ve been working in the SEO industry since 1999 and I’m always looking for good sources for SEO reporting. It would be very nice to follow you and your website in the future. You have been bookmarked :-)
Best Regards,
Trond v/ ExposeIT.no
Thanks a lot for the info. That’s really, really nice I did not know that before and it would be nice if there are more similar posts about using google analytics
Thanks
你好!这些文字对我有很大的启迪,希望你能得出更确切的分析
Thanks for the advice to set up a filter! However I too get the “Not Set” value all the time, especially when trying to view the top entrance keywords for the month. Still not sure what it could mean!