Author Archive

Strange Domain Stacking in Google SERPs? (UPDATED with Google announcement)

Wednesday, August 18th, 2010 by Adrian Vender
Google Buzz

One of our co-founders here at WebShare discovered something very strange last night, and we are still observing it today. Spurred by a random discussion about TV shows, he performed a google search for this old house and saw the following:

This Old House - Google search

The first 7 results are all from same domain??? Typically we see that a domain can have a maximum of 2 URLs appearing in a given query in the Google SERPs (not including the indented results).

We were able to replicate the scenario using another search for webshare conversion marketing:

WebShare conversion marketing - Google search

8 URLs from the same domain on page 1. Very strange.

We were able to replicate this from different locations in AZ and CA, so it doesn’t seem like geolocation is a factor.  Are you seeing the same results?  Do think this is just Google experimenting?  Or maybe just a glitch?

What do you all think?

********UPDATE***********

After confirming these results with a few other people at SES San Francisco, I did a little more research and found the following blog post by Malcolm Combs where he’s discovering the same results:

Google treating brand names in search terms as site: searches?

In the comment thread is an interesting point from Bill Slawski where he believes this activity may be associated with what is described in a Google patent:

This looks like the process described in Google’s patent “Query rewriting with entity detection” (US Patent 7,536,382). which was granted in May of last year.

For example, the process might identify Apple as a specific entity that is associated with a specific web site, and rewrite the original query to provide results from the Apple site. From the patent:

Some entity names are unambiguous and uniquely identify particular entities. A large number of names, however, are somewhat ambiguous or generic, making it more difficult to identify the entities to which they are intended to correspond when included in users’ search queries.

Systems and methods consistent with the principles of the invention provide mechanisms for determining the entities to which entity names correspond and selectively rewriting users’ search queries based on the entity names. Accordingly, a user’s search query may be restricted to a search of document(s) associated with the entity that the user intended in the search.

There doesn’t appear to be any official indication from Google whether they are just testing this algorithmic change or if it’s here for good.  This kind of change may benefit big-brand entities, but I don’t believe this is a benefit to the searcher since the search results may not be the most relevant.

********UPDATE #2***********

Official announcement from Google regarding the algorithm change:

http://googlewebmastercentral.blogspot.com/2010/08/showing-more-results-from-domain.html




Adrian Vender
Adrian is a technical lead and search engine optimization expert at WebShare. You can find out more about Adrian here.

See more posts by Adrian Vender

Enabling cross domain tracking with unsupported navigation – Part 3

Saturday, June 21st, 2008 by Adrian Vender
Google Buzz

This is a 3 part series on cross domain tracking with Google Analytics in non-standard situations:

  1. Part 1
  2. Part 2
  3. Part 3

In this final of our three part series, we’re going to look at adding the Google Analytics query string parameters used to accomplish cross domain tracking to other variables we may be passing.

If we want to append additional query string variables to the end of our destination URL string we might try something along the lines of the following:

<code>
function redirectFunction()
{
window.location.replace(GoogleAnalyticsCookieAppend('http://www.xxx.yyy/
RedirectTarget.html?mookie=pookie'));
}
</code>

If we do this, it’s possible that we might also notice that our cookie passing solution no longer works.

Uh-oh.

If you find yourself in this situation, it might be because of this:

<code>
http://www.xxx.yyy/RedirectTarget.html?mookie=pookie#__utma=
1.283748562613819500.1212185562.1212185562.1212189988.2&__utmb=
-&__utmc=1&__utmx=-&__utmz=1.1212185562.1.1.utmcsr=
(direct)|utmccn=(direct)|utmcmd=(none)&__utmv=-&__utmk=100666753
</code>

The Google query string parameters were appended at the end of our query string, but with a “#” separator. Not exactly what we were expecting.

A cheap, quick and dirty fix is obvious: replace the “#” with a “&” and be on our way. But keep in mind that a simple replacement may create a problem with existing query string variables if being built dynamically, since we must have a “?” to start the query string parameters and must separate them with a “&” in a URL.

One solution is to extract the existing query string variables first, then call the GA function, then deal with the #/?/& issue,  and then append the old variables at the end.  We update our function to take care of this below:

<code>
function GoogleAnalyticsCookieAppend(uri)
{
//grab existing query string variables
var queryStringIndex = uri.indexOf('?');
var queryString =(queryStringIndex == -1) ? "" : uri.slice(queryStringIndex+1);
var myURI = (queryStringIndex == -1) ? uri : uri.slice(0, queryStringIndex-1);
//Use the Google Analytics function to get GA variables
var c = pageTracker._getLinkerUrl(myURI, window);
//Explicitly check in case GA is using #
c = c.replace("#", "?");
alert(c);
//reappend querystring variables
c += "&"+ queryString;
return c;
}
</code>

And that’s it for this mini-series on exploring the ins and outs of Google Analytics with non-standard tracking across top level domains.  Happy Google Analytics-ing!

Go to Part 1 or Part 2




    Adrian Vender
    Adrian is a technical lead and search engine optimization expert at WebShare. You can find out more about Adrian here.

    See more posts by Adrian Vender

    Enabling cross domain tracking with unsupported navigation – Part 2

    Thursday, June 19th, 2008 by Adrian Vender
    Google Buzz

    This is a 3 part series on cross domain tracking with Google Analytics in non-standard situations:

    1. Part 1
    2. Part 2
    3. Part 3

    When faced with a non-hyperlink and non-form submission crossing of domains, our first thought might be to write a method that simply takes the GA query string variables (generated by our standard solutions) and appends them to the end of our destination URL.

    But, Google Analytics is doing a bit more than this in its dedicated functions.  Specifically, it uses a hash function as a checksum in order to make sure that the cookies being passed are from the desired source (this ensures that you cannot maliciously affect someone else’s data using GA cookies). This checksum is calculated on the server side and stored in the _utmk variable.  Having to write your own server side hashing by reverse engineering the algorithm GA uses to do this checksum isn’t our ideal situation.

    So what to do?

    The first thing we have to do is undersant how the _link() and _linkByPost() functions are working. Looking specifically at some of the ga.js codebase, we see:

    <code>
    a._link=function(b,e)
    {
    if(i.I&&b){
    a._initData();
    a.a[p].href=a._getLinkerUrl(b,e)}
    };
    a._linkByPost=function(b,e){
    if(i.I&&b&&b.action){
    a._initData();
    b.action=a._getLinkerUrl(b.action,e)
    }
    };
    </code>

    One thing we immediately notice is that both functions require a URI to be passed in, and yet take two parameters, the second being “e”…and both then take this and pass it and the target (b for hyperlinks and b.action for forms) along to a _getLinkerUrl() function. Let’s take a closer look:

    <code>
    a._getLinkerUrl=function(b,e)
    {
    var j=f(b,"#"),t=b,v=a.qc();
    if(v)if(e&&1>=j[w])t+="#"+v;
    else if(!e||1>=j[w])if(1>=j[w])t+=(r(b,"?")?"&":"?")+v;
    else t=j[0]+(r(b,"?")?"&":"?")+v+"#"+j[1];
    return t
    }
    </code>

    Again, we see the “e”, and in order to figure out what’s happening, it’s important to understand some of the features and quirks of Javascript, like:

    • Constructors can return values
    • No block scope
    • Reserved words can be overriden
    • Every function returns a value

    As objects are essentially associative arrays, they are dynamically capable of adding properties and methods. The key to understanding “e” is found in the following declaration:

    <code>
    var _gat=new Object(
    {
    c:"length",
    lb:"4.2",
    m:"cookie",
    b:undefined,
    cb:function(d,a){this.zb=d;this.Nb=a},
    r:"__utma=",
    W:"__utmb=",
    ma:"__utmc=",
    Ta:"__utmk=",
    na:"__utmv=",
    oa:"__utmx=",
    Sa:"GASO=",
    X:"__utmz=",
    lc:"http://www.google-analytics.com/__utm.gif",
    mc:"https://ssl.google-analytics.com/__utm.gif",
    Wa:"utmcid=",
    Ya:"utmcsr=",
    $a:"utmgclid=",
    Ua:"utmccn=",
    Xa:"utmcmd=",
    Za:"utmctr=",
    Va:"utmcct=",
    Hb:false,
    _gasoDomain:undefined,
    _gasoCPath:undefined,
    e:window,
    a:document,
    k:navigator,
    t:function(d){
    var a=1,c=0,g,o;
    if(!_gat.q(d))
    {
    a=0;
    for(g=d[_gat.c]-1;g>=0;g--)
    {
    o=d.charCodeAt(g);
    a=(a<<6&268435455)+o+(o<<14);
    c=a&266338304;
    a=c!=0?a^c>>21:a
    }
    }
    return a},
    </code>

    So “e” is actually just the window itself.  Now that we know that by passing in the url and the window object to _getLinkerUrl(), we are able to handle both hyperlinks and forms, we can see if it will work for our DIV container example. Let’s give it a try…

    <code>
    function GoogleAnalyticsCookieAppend(uri)
    {
    var c = pageTracker._getLinkerUrl(uri, window);
    return c;
    }
    </code>

    We can test this and see that our cookies are indeed being passed.  Now, what if we want to pass info with other query string variables?

    Continue to Part 3




    Adrian Vender
    Adrian is a technical lead and search engine optimization expert at WebShare. You can find out more about Adrian here.

    See more posts by Adrian Vender

    Enabling cross domain tracking with unsupported navigation – Part 1

    Wednesday, June 18th, 2008 by Adrian Vender
    Google Buzz

    This is a 3 part series on cross domain tracking with Google Analytics in non-standard situations:

    1. Part 1
    2. Part 2
    3. Part 3

    In figuring out how to use Google Analytics on a site that spans multiple top level domains, (i.e. transfer cookies across multiple domains) there are many good resources out there (books, blogs, helpfiles and more). Given the amount of work done on this topic and the frequency with which it occurs on websites, you might not think this would be a difficult problem, and in most common cases, it isn’t.

    But while there are well documented and standard methods that specifically deal with hyperlinks and HTML forms, you may find yourself in some unfamiliar territory if your site uses other types of navigation methods (scripted redirects, server side, etc…).

    Take, for example, the simple snippet below:

    <code>
    <a href="" onclick="redirectFunction()">Link across top level domains</a>
    function redirectFunction()
    {
    window.location.replace('http://www.xxx.yyy/RedirectTarget.html');
    }
    </code>

    To address this one, you might write a wrapper function that encapsulates the redirect and inserts a call to the pageTracker._link(<urlToRedirectTo>) function, so we’d do something like the following:

    <code>
    function redirectFunction()
    {
    window.location.replace(GoogleAnalyticsCookieAppend('http://www.xxx.yyy/
    RedirectTarget.html'));
    }
    function GoogleAnalyticsCookieAppend(uri)
    {
    pageTracker._link(uri);
    return uri;
    }
    </code>

    Note: You’ll want to make sure to include the “return false” at the end of your call here.

    This will work for cases where we have a hyperlink (anchor tag) doing this direct javascript call, as follows:

    <code>
    <a href="" onclick="GoogleAnalyticsCookieAppend('http://www.xxx.yyy/
    RedirectTarget.html');return false;"> This one tries indirectly  </a>
    </code>

    But what about something that’s not a hyperlink, like a div container?

    <code>
    <div id="mydiv" onclick="redirectFunction();return false;">
    Content for this container
    </div>
    </code>

    This is neither a hyperlink nor a form, and our attempts at solving this problem with pageTracker._link() and pageTracker._linkByPost() just don’t seem to work…

    Continue to Part 2




    Adrian Vender
    Adrian is a technical lead and search engine optimization expert at WebShare. You can find out more about Adrian here.

    See more posts by Adrian Vender

    WebShare Video Series – How to set up goals in Google Analytics

    Tuesday, March 18th, 2008 by Adrian Vender
    Google Buzz

    Ready to set up goals on your website? This 7 minute video walks through the steps required to create conversion goals in Google Analytics. You’ll learn about different types of goals, how to calculate goal values, when and where to use different match types and more. With goals configured in your Analytics profiles you’ll be on your way to understanding how your visitors interact with your site from the perspective of conversions:

     




    Adrian Vender
    Adrian is a technical lead and search engine optimization expert at WebShare. You can find out more about Adrian here.

    See more posts by Adrian Vender

    WebShare Video Series – Google Analytics Setup with new GA.js Code

    Thursday, January 24th, 2008 by Adrian Vender
    Google Buzz

    Are you ready to set up Google Analytics on your website? If so, then you’ve found the right place. In this 7 minute video, you’ll learn how to create a Google Analytics account, install the new GA.js tracking code, and be on your way to a wealth of information about how people find and use your website:

     

     

    Google Analytics help Webshare is a Google Analytics Authorized consultancy and can help you set up, configure, and analyze this invaluable data. We offer customized analytics training as well as Google Analytics consulting for any project.



    Adrian Vender
    Adrian is a technical lead and search engine optimization expert at WebShare. You can find out more about Adrian here.

    See more posts by Adrian Vender