<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zebra Kick</title>
	<atom:link href="http://www.zebrakick.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zebrakick.com/blog</link>
	<description>Creative Awesome Web</description>
	<lastBuildDate>Sat, 30 Jan 2010 01:13:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zebra Kick gets a New Window Decal</title>
		<link>http://www.zebrakick.com/blog/zebra-kick-logo-decal/</link>
		<comments>http://www.zebrakick.com/blog/zebra-kick-logo-decal/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 01:10:18 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Logo]]></category>
		<category><![CDATA[Signage]]></category>
		<category><![CDATA[Vinyl]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=200</guid>
		<description><![CDATA[Our front office got some new artwork back in November. Alongside our sister company Monster Media, Inc., with whom we share the building, our company&#8217;s name and logo was added to the window.

In the spirit of having some fun, we created a little video for the event.  Hope you like Benny Hill!




All of the [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/zebra-kick-logo-decal/">Zebra Kick gets a New Window Decal</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">Our front office got some new artwork back in November. Alongside our sister company Monster Media, Inc., with whom we share the building, our company&#8217;s name and logo was added to the window.</p>
<div id="attachment_199" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-199" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/11/frontwindow_0031.jpg" alt="Our logo being added to the front window" width="600" height="400" /><p class="wp-caption-text">Our logo being added to the front window</p></div>
<p><span id="more-200"></span><br />
In the spirit of having some fun, we created a little video for the event.  Hope you like Benny Hill!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7902541&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ff9933&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=7902541&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ff9933&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div id="attachment_201" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-201" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/11/frontwindow_0051.jpg" alt="Zebra Kick Logo" width="600" height="400" /><p class="wp-caption-text">Robbie and Eddie, Monster Media Inc. installers, hard at work.</p></div>
<div id="attachment_202" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-202" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/11/frontwindow_0061.jpg" alt="Zebra Kick Logo" width="600" height="400" /><p class="wp-caption-text">Applying the zebra decal.</p></div>
<dl>
<dt><img class="size-full wp-image-203" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/11/frontwindow_0071.jpg" alt="Zebra Kick Logo" width="600" height="420" /></dt>
</dl>
<p>All of the artwork was printed by Monster Media, Inc., a <a title="Large Format Printing" href="http://www.monstermediainc.com/">large format printing company</a>, and cutout with their vinyl router.</p>
<p>Zebra Kick would like to thank Robbie and Eddie, for doing such a great job. You can see their concentration and their steady hands at work in the pictures above. An additional thank you goes out to Monster Media&#8217;s graphic designer, Jon, for capturing it all on camera.</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/zebra-kick-logo-decal/">Zebra Kick gets a New Window Decal</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/zebra-kick-logo-decal/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Object Literals vs. Constructed Objects in JavaScript</title>
		<link>http://www.zebrakick.com/blog/object-literals-vs-constructed-objects-in-javascript/</link>
		<comments>http://www.zebrakick.com/blog/object-literals-vs-constructed-objects-in-javascript/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 05:36:47 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[constructed object]]></category>
		<category><![CDATA[context locking]]></category>
		<category><![CDATA[dojo.clone]]></category>
		<category><![CDATA[dojo.hitch]]></category>
		<category><![CDATA[instantiated object]]></category>
		<category><![CDATA[object literal]]></category>
		<category><![CDATA[Prototype bind]]></category>
		<category><![CDATA[protypal inheritance]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[static object]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=171</guid>
		<description><![CDATA[Another discussion born from a question at stackoverflow.  Today I&#8217;m laying out the differences between object literals and constructed objects, when to use which, how to get the most out of them, and a few other tricks along the way.  Let&#8217;s get started.
Object Literals / Static Objects
Object literals, or static objects, don&#8217;t require instantiation with [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/object-literals-vs-constructed-objects-in-javascript/">Object Literals vs. Constructed Objects in JavaScript</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">Another discussion born from a question at <a href="http://stackoverflow.com/questions/1704618/">stackoverflow</a>.  Today I&#8217;m laying out the differences between object literals and constructed objects, when to use which, how to get the most out of them, and a few other tricks along the way.  Let&#8217;s get started.<span id="more-171"></span></p>
<h2>Object Literals / Static Objects</h2>
<p>Object literals, or static objects, don&#8217;t require instantiation with the <tt>new</tt> operator and also behave like singletons.  They are often used for providing utility classes since methods can be called statically, or as parameter packages to provide named arguments or lists to other functions.  Consider the following example that illustrates this singleton property of object literals:</p>
<p><strong>Example 1: Static object singleton behavior</strong></p>
<pre>var staticObject1 = {
    a: 123,
    b: 456
};

var staticObject2 = staticObject1;
staticObject2.b = "hats";
console.log(staticObject1, staticObject2);</pre>
<p><strong>Output:</strong></p>
<pre>Object a=123 b=456  Object a=123 b=456
Object a=123 b=hats Object a=123 b=hats</pre>
<p>Notice that changing <tt>staticObject1.b</tt> also affected <tt>staticObject2.b</tt>.  This happens because in JavaScript, when you assign an object to another variable, it simply creates a reference.</p>
<p>The singleton behavior may not always be the desired effect.  Many libraries, such as Dojo, offer an <a href="http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.clone">object cloning</a> method that can avoid this behavior if just you want to make a copy of a static object.  Continuing the previous example, consider the following:</p>
<p><strong>Example 2: Circumventing the singleton behavior</strong></p>
<pre>var staticObject3 = dojo.clone(staticObject1); // See the documentation in the link above
staticObject1.a = "pants";
console.log(staticObject1, staticObject2, staticObject3);</pre>
<p><strong>Output:</strong></p>
<pre>Object a=pants b=hats Object a=pants b=hats Object a=123 b=hats</pre>
<p>Notice that the values of the members of <tt>staticObject1</tt> and <tt>staticObject2</tt> are the same, whereas <tt>staticObject3</tt> is not affected by changes to these other objects.</p>
<p>Static objects are also useful for creating project or library namespaces, rather than filling up the global scope, and promote compatibility like no one&#8217;s business. This is useful when creating libraries that require portability or interoperability.  This can be seen in popular libraries such as Dojo, YUI, ExtJs, and others where all or most methods are called within that library&#8217;s specific context (e.g.: <tt>dojo.examplMethod()</tt>, <tt>YUI().exampleMethod()</tt>, and <tt>Ext.exampleMethod()</tt> respectively).</p>
<p>One thing to remember is that in object literals, all members and methods are  necessarily public. Forever and always, so help me Douglas Crockford.  However, this is not the case for constructed objects, as you&#8217;ll see shortly.  Access restrictions notwithstanding, static objects can also be considered loosely analogous in purpose and use to <tt>C/C++'s struct</tt> type.</p>
<h2>Constructed Objects / Instantiated Objects</h2>
<p>Classes in JavaScript are based on prototypal inheritance, which can be a lengthy subject in itself and can be read about <a href="http://javascript.crockford.com/prototypal.html">here</a>, <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance">here</a>, and <a href="http://www.webreference.com/programming/javascript/prototypal_inheritance/">here</a>.  For now, we will just compare the differences between instantiated and static objects and leave inheritance for another day.</p>
<p>As opposed to static objects, this method of object creation gives the unique opportunity for private scope object members and methods thanks to JavaScript&#8217;s closure property.  Consider the following example of private class members:</p>
<p><strong>Example 3: Private class members</strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    this.publicMember = "I am a public member";

    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
};</pre>
<p>var o = new SomeObject();<br />
console.log(typeof o.privateMember, typeof o.publicMember);<br />
o.publicMethod();</p>
<p><strong>Output:</strong></p>
<pre>undefined string
I am a private member I am a public member</pre>
<p>Notice that <tt>typeof o.privateMember</tt> is &#8220;undefined&#8221; and not accessible outside of the object, but is from within.</p>
<p>Private methods can also be defined.  They are not as straight forward but are still simple to implement.  The issue lies in that the value of <tt>this</tt> within a private method will refer to <tt>window</tt> if you try to execute it as if it were just any method.  There are at least three techniques that can be applied to ensure that <tt>this</tt> refers to the object that we are working within, in this case, the instance of <tt>SomeObject</tt>.  Consider the following example:</p>
<p><strong>Example 4: Private class methods with <tt>call</tt></strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(privateMember, this.publicMember);
    };

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod.call(this);
    }
};

var o = new SomeObject();
console.log(typeof o.privateMethod, typeof o.publicMethod, typeof o.privateMethodWrapper);
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>undefined function function
I am a private member I am a public member</pre>
<p>Notice that within <tt>privateMethodWrapper()</tt>, <tt>privatemethod</tt> was executed using <tt>call</tt> and passing in <tt>this</tt> for the function&#8217;s context.  This is all fine and allows us to use <tt>this</tt> within the private method as we normally would; however, the following technique is slightly more preferable as it simplifies the calling context.  The previous example can be rearranged to the following:</p>
<p><strong>Example 5: Private class methods with closure reference to <tt>this</tt></strong></p>
<pre>var SomeObject = function() {
    var self          = this;
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(self.publicMember);
    };

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
console.log(typeof o.privateMethod, typeof o.publicMethod, typeof o.privateMethodWrapper);
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>undefined function function
I am a private member I am a public member</pre>
<p>Notice that a new private member, <tt>self</tt>, was introduced and provides a reference to <tt>this</tt> within <tt>privateMethod</tt> via the closure property.  This method is agreeable for most situations; however, my syntax highlighter doesn&#8217;t highlight <tt>self</tt> the same as it does <tt>this</tt>, so I prefer the following method.</p>
<p>The third method effectively &#8220;locks in&#8221; the value of <tt>this</tt> within the private method.  It is the most preferable in that it allows you to have a normal definition using <tt>this</tt> with the private method as in example #4, and a clean calling context as in example #5.  Both the Dojo and Prototype libraries offer utility methods to do this for us: <a href="http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.hitch">dojo.hitch</a> and <a href="http://api.prototypejs.org/language/function.html#bind-instance_method">function.prototype.bind</a> respectively.  I will show how to use these methods, as well as how write your own utility method for achieving the same results for those of you not using those libraries.</p>
<p><strong>Example 6: Private class methods with context locking using <tt>dojo.hitch</tt></strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = dojo.hitch(this, function() {
        console.log(privateMember, this.publicMember);
    });

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p><strong>Example 7: Private class methods with context locking using Prototype&#8217;s <tt>bind</tt></strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(privateMember, this.publicMember);
    }.bind(this);

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p><strong>Example 8: Private class methods with context locking using custom utility method</strong></p>
<pre>var lockContext = function(context, callback) {
    return function() {
        callback.apply(context, arguments);
    }
};

var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = lockContext(this, function() {
        console.log(privateMember, this.publicMember);
    });

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p><strong>Example 9: Private class methods with context locking using custom utility method (prototypal variation)</strong></p>
<pre>Function.prototype.lockContext = function(context) {
    var self = this;
    return function() {
        self.apply(context, arguments);
    }
};

var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(privateMember, this.publicMember);
    }.lockContext(this);

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p>As you can see, all four of these context locking methods (examples #6 &#8211; #9) allow you to keep the executing scope of your private method clean,  freeing you to write the body of your private method as you would any other, and removes the superfluous &lt;tt&gt;self&lt;/tt&gt; reference.  I&#8217;ll let you decide which method works best for you, but I think the prototypal approach is the cleanest.  For more information on how context locking works, see the MDC references for <tt><a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function/apply">apply</a></tt> and <tt><a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function/call">call</a></tt>.</p>
<h2>Wrapping it Up</h2>
<p>There are definite roles that static and instantiated objects fill.  For me, part of the joy of writing in JavaScript is knowing when to use which, and how to get the most milage out of their differences.  What about you?  Let me know if you have any preferences or guidelines when it comes to creating and using objects in JavaScript.</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/object-literals-vs-constructed-objects-in-javascript/">Object Literals vs. Constructed Objects in JavaScript</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/object-literals-vs-constructed-objects-in-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Hash Link SEO &#8211; Google Jump To Results with Internal Links</title>
		<link>http://www.zebrakick.com/blog/hash-link-seo-google-jump-to/</link>
		<comments>http://www.zebrakick.com/blog/hash-link-seo-google-jump-to/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 20:31:41 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Onsite SEO]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google jump to]]></category>
		<category><![CDATA[hash links]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=138</guid>
		<description><![CDATA[Last week while searching for &#8220;Fallout 3 multiplayer&#8221; I noticed some really cool results in Google.  In the image below you can see that the Wikipedia result has in-site links to subsections of the page.  As if this was not impressive enough to see, the following result included a &#8220;Jump to Is there a multiplayer [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/hash-link-seo-google-jump-to/">Hash Link SEO &#8211; Google Jump To Results with Internal Links</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">Last week while searching for &#8220;Fallout 3 multiplayer&#8221; I noticed some really cool results in Google.  In the image below you can see that the Wikipedia result has in-site links to subsections of the page.  As if this was not impressive enough to see, the following result included a &#8220;Jump to Is there a multiplayer mode?&#8221;  Why is this so awesome?  This is another step toward Google supporting onsite semantic markup.  What microformat support could be next?</p>
<p style="text-align: center;"><a href="http://www.zebrakick.com/blog/wp-content/uploads/2009/10/google-jump-to-link.jpg"><img class="aligncenter size-full wp-image-135" style="border: 0pt none;" title="google-jump-to-link" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/10/google-jump-to-link.jpg" alt="google-jump-to-link" width="579" height="203" /></a></p>
<p><span id="more-138"></span>Any good SEO knows the number one rule of research, &#8220;don&#8217;t tip your hand.&#8221;  I feel this news is less of a secret method or technique, and more of a verification that Google is headed in a specific direction with search.  Plus, we have been using this method for a while now, and I would hope that every website applies this method where it makes sense.</p>
<h3>How to Get a Jump-To Link in Google Results</h3>
<p style="text-align: center;"><a href="http://www.zebrakick.com/blog/wp-content/uploads/2009/10/hash-link-rank.jpg"><img class="aligncenter size-full wp-image-137" style="border: 0pt none;" title="hash-link-example" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/10/hash-link-example.jpg" alt="hash-link-example" width="554" height="84" /></a></p>
<p>If you visit the page directly you will find a table of contents, which links to anchor tags farther down on the page.  Notice the use of keywords in question format for the hash link.</p>
<p style="text-align: center;"><a href="http://www.zebrakick.com/blog/wp-content/uploads/2009/10/hash-link-rank.jpg"><img class="aligncenter size-full wp-image-136" style="border: 0pt none;" title="hash-link-rank" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/10/hash-link-rank.jpg" alt="hash-link-rank" width="600" height="307" /></a></p>
<p>Farther down the page, <tt>name="Is_there_a_multiplayer_mode.3f"</tt> shows up in an anchor tag.  This is where the page will load when linked to directly.  By using keywords in the anchor name, and having a link at the top of the page for engines and people to follow, the site is clearly showing that various parts of the page have various question answer combos, or more generally a table of contents.</p>
<h3>Tips for Ranking Hash Links in Google</h3>
<p>First, I would recommend checking out <a href="http://googlewebmastercentral.blogspot.com/2009/09/using-named-anchors-to-identify.html" target="_blank">Googles advice on hash linking</a>.</p>
<p>Second, make sure your pages are semantic.  Properly use your H-n level tags to create good page structure.</p>
<p>Don&#8217;t keyword stuff the content.  It is easy to be overzealous when creating titles and subtitles.  Stay away from keyword stuffing!</p>
<p>Create a table of contents at the top of the page and also at the bottom (if its a long page).   I have seen some people make the table of contents slide with the scrolling of the page.  If done right, it can be pretty nice.</p>
<p>Link to the page with hashmarks when it makes sense.  If you are referring to a specific section of the page, use hashmarks to direct the browser directly to that section.  I wouldn&#8217;t recommend doing this with aggressive link building, as it may trip a filter, but I do recommend hash linking when it makes sense.</p>
<h3>FAQ SEO &#8211; One Page per Question or One Page per Topic</h3>
<p>A few years ago, I was tasked with creating the SEO plan for a regional clinic.  One of the goals of the site was to rank on some long tail FAQ questions about various procedures.  At the time, long tail wordpress posts seemed to be the key to ranking for specific key phrases.  As a result, one topic with 20 questions would have required 20 individule pages.  The benefit of which is that you can really focus on the keywords in the URL and titles of each post for each question.  This allowed smaller, beginning websites to rank for specific long tail terms with very little page authority or link building.</p>
<p>The downside to building multiple pages is that your pages can become a bear to manage, and category pages were then linking to 20 pagers per topic (think watered down link authority).</p>
<p>As a result, I decided to create a single FAQ page for each topic and use hash anchors and hash links for navigation of the long pages.  The pages preformed fairly well, although we had no control to compare to ranking speed.  This method did require some creative link building to rank for competative terms; however, it is much easier to build the authority of a single page than of twenty.</p>
<h3>Semantic Microformat Markup and SEO &#8211; hCards and vCards</h3>
<p>Use semantic markup, even if it doesn&#8217;t have any proven direct ranking value right now.   For instance, to date, Google is not using hCard information in its search results, but I still recommend using hCard in SEO campaigns. It doens&#8217;t hurt, and nothing feels better than informing your client that the latest Google change puts their website ahead automatically and with no extra work.  Check out this site on <a href="http://microformats.org/" target="_blank">microformat markup</a> if you want to dive deeper into microformats.</p>
<p>Also, I would like to thank <a href="http://www.linkedin.com/pub/andrew-murphy/12/9a2/6a8" target="_blank">Andrew Murphy</a> and <a href="http://www.zebrakick.com/about/#justin-johnson" target="_blank">Juston Johnson</a> (Justin is also a Principal here at Zebra Kick).  Justin and Andrew taught me the importance of semantic markup a few years ago, and were deadset on making pages as semantic as possible.  Thanks guys!</p>
<p>Finally, what semantic tricks do you use on your pages that you don&#8217;t see often elsewhere?  Do you have pages that outpreform competition based partially on better markup?  I&#8217;d love to know.</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/hash-link-seo-google-jump-to/">Hash Link SEO &#8211; Google Jump To Results with Internal Links</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/hash-link-seo-google-jump-to/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google Maps Street View Tricycle Video</title>
		<link>http://www.zebrakick.com/blog/google-maps-street-view-tricycle-video/</link>
		<comments>http://www.zebrakick.com/blog/google-maps-street-view-tricycle-video/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 19:48:03 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[street view]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=129</guid>
		<description><![CDATA[I was logging into my YouTube to upload some videos and stumbled upon this in my feed from Google.  Still only has 1k views at the time of this posting, but it&#8217;s sure to get picked up soon.

Basically this is how Google records street views for Google Maps on streets that can&#8217;t be driven on.  [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/google-maps-street-view-tricycle-video/">Google Maps Street View Tricycle Video</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">I was logging into my YouTube to upload some videos and stumbled upon this in my feed from Google.  Still only has 1k views at the time of this posting, but it&#8217;s sure to get picked up soon.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Hr-4Aln1Il8&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/Hr-4Aln1Il8&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Basically this is how Google records street views for Google Maps on streets that can&#8217;t be driven on.  Pretty cool huh?</p>
<p>Here are a few links if you found this tricycle interesting.</p>
<p><a href="http://maps.google.com/help/maps/streetview/">Google Street View</a></p>
<p><a href="http://www.youtube.com/watch?v=f0y-q-pI2pQ">Video explaining Street View</a> (also embedded in link above).</p>
<p><a href="http://www.streetviewfun.com/">Site were people post interesting street view images. </a></p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/google-maps-street-view-tricycle-video/">Google Maps Street View Tricycle Video</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/google-maps-street-view-tricycle-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick Tip &#8211; Make Your Brand Look Popular, Even if its Not (Yet).</title>
		<link>http://www.zebrakick.com/blog/create-brand-popularity/</link>
		<comments>http://www.zebrakick.com/blog/create-brand-popularity/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 23:59:10 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Branding]]></category>
		<category><![CDATA[brand popularity]]></category>
		<category><![CDATA[quick tip]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=123</guid>
		<description><![CDATA[I was reminded of this age old marketing strategy when I stepped into Bamee Thai Noddle Shop in Chicago&#8217;s Lakeview district for a quick bowl of Tom Yum soup.  The place was empty at 1:30pm, but looked good.  I was immediately seated at the most visible table from the street.  Whether or not he realized [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/create-brand-popularity/">Quick Tip &#8211; Make Your Brand Look Popular, Even if its Not (Yet).</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">I was reminded of this age old marketing strategy when I stepped into <a href="http://www.yelp.com/biz/bamee-noodle-shop-chicago" target="_blank">Bamee Thai Noddle Shop in Chicago&#8217;s Lakeview district</a> for a quick bowl of Tom Yum soup.  The place was empty at 1:30pm, but looked good.  I was immediately seated at the most visible table from the street.  Whether or not he realized it, this restaurant owner was using me as a marketing piece, showing passersby that the shop was doing business.<span id="more-123"></span></p>
<p>This strategy is often used in all forms of persuasion.  Think about the tip jar at your local coffee shop.  When it has a few dollars in it, you are more compelled to drop in a buck.  If a blog post has three comments, you are more inclined to read it and even comment yourself, then if it had no comments.</p>
<p>So how do we apply this strategy to online marketing?</p>
<h2>Get creative</h2>
<p>Create vanity badges for your website.  <a href="http://www.seomoz.org"><img src="http://www.seomoz.org/img/iheartseomoz1.png" alt="I &lt;3 SEO moz" /></a> why would a company create something if no one was going to use it, therefore they must be popular.  (SEOmoz is a great source for SEO news, and a great example of positive brand popularity building.</p>
<p>For blogs, if you have no comments, then hide the counter.  Don&#8217;t bring attention to a lack of community involvement.</p>
<p>If you are trying to recruit Twitter followers, create a button that links to your Twitter and below that display the last three Twitter users that followed you.</p>
<p>Work on your SEO strategy to return your site first for your brand name followed by 9 “discussion&#8221; type listings in the results.  Better yet, get Google to auto complete your brand name after the first word or term.</p>
<p>How have you taken measures to increase your brand&#8217;s perceived popularity?  Have you ever been &#8220;tricked&#8221; and realized it after?</p>
<p>The possibilities are endless. The trick is to get creative, be subtle (don&#8217;t post fake blog comments), and focus on building brand value in the long term rather than short term.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 15px; width: 1px; height: 1px;">The possibilities are endless. The trick is to get creative, be subtle (don&#8217;t post fake blog comments), and focus on building brand value in the long term rather than short term.</div>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/create-brand-popularity/">Quick Tip &#8211; Make Your Brand Look Popular, Even if its Not (Yet).</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/create-brand-popularity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Redbox Email Campaign Needs Focus</title>
		<link>http://www.zebrakick.com/blog/red-box-email-campaign/</link>
		<comments>http://www.zebrakick.com/blog/red-box-email-campaign/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 07:23:48 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[E-mail Marketing]]></category>
		<category><![CDATA[Local Southern California]]></category>
		<category><![CDATA[eblast]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[redbox]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=110</guid>
		<description><![CDATA[
Somehow, when I opened up my email and saw Hannah Montana in the latest eblast from Redbox, I just knew I had to take a screen shot. Here are a few observations about Redbox and their email campaign that bother me a bit.
Redbox&#8217;s DVD Vending Machines are Slick
For those of you who are not familiar [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/red-box-email-campaign/">Redbox Email Campaign Needs Focus</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first"><img class="aligncenter size-full wp-image-111" title="Red Box" src="http://www.zebrakick.com/blog/wp-content/uploads/2009/09/redtube.jpg" alt="Red Box" width="600" height="364" /></p>
<p>Somehow, when I opened up my email and saw Hannah Montana in the latest eblast from Redbox, I just knew I had to take a screen shot. Here are a few observations about Redbox and their email campaign that bother me a bit.<span id="more-110"></span></p>
<h3>Redbox&#8217;s DVD Vending Machines are Slick</h3>
<p>For those of you who are not familiar with Redbox, it is a <a href="http://www.redbox.com/" target="_blank">DVD rental vending machine</a> that is popular many of the  <a href="http://www.staterbros.com" target="_blank">best grocery stores in Southern California</a>.  The system is fairly impressive.  You browse the selection via a touch screen, swipe your debit card and out pops your DVD.  The movie is yours for a dollar a day.</p>
<h3>Redbox Uses E-mail for Communication</h3>
<p>Seemingly as impressive as the physical units is the email receipt system.  Within 2-3 min. of renting or returning a DVD you are sent an email for your records.  Fairly slick if you ask me.</p>
<p>Part of being a Redbox user, of course, is being on there email list.  They have done a pretty good job of keeping there email blasts subtle enough that you won&#8217;t remove yourself from the list, but once a week you are &#8220;informed&#8221; of the newest movies in the box.</p>
<p>Redbox, however, has missed a huge opportunity with their direct marketing campaign.  The same weekly email is sent out to every person on the email list.  This means they choose one movie to push hard in the main slot and send it to all the people on the list.</p>
<h3>Focus Your Target Demographic</h3>
<p>Since Redbox knows every movie that you rent from them, it would be a fairly simple task to assign a &#8220;most common genre&#8221; tag for each customer.  By doing this, they can send an eblast focusing on action and comedies to the action and comedy fans, while sending The Land Before Time XVI promos to people who tend to rent a lot of Disney films.</p>
<p>Although this does create the need for multiple email promos each week, it is all but guaranteed that the conversions would increase dramatically.  One alternative, however, is to reduce the email list into two groups.  Those who like movie genre A and those who <em>hate</em> movie genre A.  The only thing worse than sending a bland or boring e-blast out is sending an eblast that alienates your customers from your product.</p>
<p>Another reason for Redbox to focus their email marketing campaign is that they are limited to how many rentals of each movie they can have in stock.  This is why promoting 15 movies a week will have a better turn out that promoting their three biggest.</p>
<h3>Try Redbox</h3>
<p>Lastly, if you haven&#8217;t tried this movie vending machine, <a href="http://www.redbox.com/Locations/KioskSearch.aspx" target="_blank">find a Redbox</a> and try it out.</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/red-box-email-campaign/">Redbox Email Campaign Needs Focus</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/red-box-email-campaign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento Onepage Checkout Template Bug</title>
		<link>http://www.zebrakick.com/blog/magento-onepage-checkout-template-bug/</link>
		<comments>http://www.zebrakick.com/blog/magento-onepage-checkout-template-bug/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 08:51:49 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=96</guid>
		<description><![CDATA[Changing from the default template in Magento breaks the onepage checkout page.  Here's how to fix it.<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/magento-onepage-checkout-template-bug/">Magento Onepage Checkout Template Bug</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">Recently, we rolled out an installation of <a title="Magento Commerce" href="http://www.magentocommerce.com/" target="_blank">Magento 1.3.2.3</a> for one of our clients but ran into small a problem along the way. Being an established open source project, I initially assumed that the error was my own when I found that the onepage checkout process would stop working half way through (step 3 to be exact).  However, after digging around, I found that the problem was actually a bug in Magento&#8217;s JavaScript.  The bug has been reported and will hopefully be fixed soon, but in the meantime, here&#8217;s the fix and how I found it.<span id="more-96"></span></p>
<p>I uncovered this bug after I had changed the template in <tt>app/design/frontend/default/default/layout/checkout.xml</tt> in the following block:</p>
<pre>&lt;checkout_onepage_index&gt;
    &lt;!-- Mage_Checkout --&gt;
    ...
    &lt;reference name="root"&gt;
        &lt;action method="setTemplate"&gt;
            &lt;template&gt;page/2columns-right.phtml&lt;/template&gt;
        &lt;/action&gt;
    &lt;/reference&gt;
    ....
&lt;checkout_onepage_index&gt;</pre>
<p>The default template specifies <tt>2columns-right.phtml</tt>. When I switched to a different template (<tt>2columns-left.phtml</tt> in my case), onepage checkout broke.</p>
<p>Line 49 of <tt>opcheckout.js</tt> requires that the progress blocks (that summarize the user&#8217;s checkout information on the side) be within an element with the class <tt>col-right</tt>, which is how it references those blocks to update them when the user progresses to the next checkout step.  <tt>col-right</tt> is part of the template <tt>2columns-right.phtml</tt>, which as we saw is what the checkout process uses by default.  This works out of the box, but unfortunately makes the onepage checkout process dependent on the <tt>2columns-right.phtml</tt> template.</p>
<p>As you may have seen, if the template is changed, the onepage checkout accordion does not automatically expand to show step 2 after the user presses &#8220;continue&#8221; from step 1.  More importantly, the user is not able to proceed past step 3 of the checkout process because of a silent JavaScript error(s).</p>
<p>The bug stems from a poor design choice in basing this sidebar&#8217;s functionality on a specific CSS class selector that is part of the global <tt>2columns-right.phtml</tt> template rather than on a selector that is directly related to the progress blocks (one which is already being created by that module).</p>
<p>The fix is to replace <tt>.col-right</tt> on line 49 with <tt>.one-page-checkout-progress</tt>, a class that is specifically used for the progress block content.   This makes updating of the progress blocks independent of the template, and designers can change the template without having to change the JavaScript or having the checkout process break.</p>
<p>A simple fix for a simple bug, but I have the feeling designers without knowledge of JavaScript would have had a hard time cracking it.  Hope that helps.</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/magento-onepage-checkout-template-bug/">Magento Onepage Checkout Template Bug</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/magento-onepage-checkout-template-bug/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Generic Singleton Factory in JavaScript</title>
		<link>http://www.zebrakick.com/blog/javascript-generic-singleton-factory/</link>
		<comments>http://www.zebrakick.com/blog/javascript-generic-singleton-factory/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 07:25:21 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[chaining]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[factory]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[static variable]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=38</guid>
		<description><![CDATA[I recently contributed this little tidbit to stackoverflow&#8217;s Hidden Features of JavaScript and thought it would be best to elaborate it on it fully. In a recent client project, I needed a generic method to produce singleton instances of interface widgets.  This is the method that I came up with and it works pretty well. [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/javascript-generic-singleton-factory/">Generic Singleton Factory in JavaScript</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first">I recently contributed this little tidbit to stackoverflow&#8217;s <a title="Hidden Features of JavaScript" href="http://stackoverflow.com/questions/61088/hidden-features-of-javascript/" target="_blank">Hidden Features of JavaScript</a> and thought it would be best to elaborate it on it fully. In a recent client project, I needed a generic method to produce singleton instances of interface widgets.  This is the method that I came up with and it works pretty well.  Before we begin, these are not singleton classes in the normal sense, but a generic singleton factory.<span id="more-38"></span></p>
<p>Lets get started, piece by piece.   First off, we need a means of storing instances internally.  To do that, we need a static variable within our function.</p>
<pre>var getInstance = function(objectName) {
  if ( !getInstance.instances ) {
    getInstance.instances = {};
  }
}</pre>
<p>It doesn&#8217;t do much, but there you have it.  Now that we have somewhere to store our instances, lets finish out the function by instantiating new objects (only once of course) and returning those singleton instances.</p>
<pre>var getInstance = function(objectName) {
  if ( !getInstance.instances ) {
    getInstance.instances = {};
  }

  if ( !getInstance.instances[objectName] ) {
    getInstance.instances[objectName] = new window[objectName]();
  }

  return getInstance.instances[objectName];
}</pre>
<p>And that&#8217;s it.  Notice the <tt>new window[objectName]();</tt>.  In JavaScript, all objects are contained within/are relative to the <tt>window</tt> object.</p>
<p>Consider the following two example classes:</p>
<pre>// Normal, globally accessible object
var object = function() {
 this.property = "zebras!"
};

// Static object acting as a namespace
var com = {
  project: {
    widgetAbc: function() {
      this.xyz = 1010101;
    }
  }
};</pre>
<p>Basic usage of our new generic singleton factory is as follows:</p>
<pre>var instance = getInstance("object");</pre>
<p>So far, <tt>getInstance</tt> works in most instances, but if you&#8217;re in an environment where you&#8217;re using static, nested objects to create your own brand of namespacing (as in <tt>getInstance("com.project.widgetAbc")</tt>), then this method falls a little short as is; however, there is solution.</p>
<pre>var getInstance = function(objectName) {
  // Static instances container
  if ( !getInstance.instances ) {
    getInstance.instances = {};
  }

  // If an instance hasn't been created yet...
  if ( !getInstance.instances[objectName] ) {
    // All instances are relative to the window object
    var object = window;
    // Handle static object nesting/chaining by splitting on the
    // object separator "."
    var parts  = objectName.split(".");

    // Traverse through the nested static objects until we reach
    // the last one in the chain.
    for ( var i in parts ) {
      object = object[ parts[i] ];
    }

    // Create and store the object's instance
    getInstance.instances[objectName] = new object;
  }

  // Return the stored object's instance
  return getInstance.instances[objectName];
}</pre>
<p>I think the comments spell out the changes fairly well, but lets give it a once-over just to be sure.  The major change is that <tt>objectName</tt> is split on the member operator (<tt>.</tt>), yielding any array like <tt>["com", "project", "widgetAbc"]</tt>.  We then iterate through that array, nesting each member within itself starting from the <tt>window</tt> object until we reach the end of the chain.  This gives us an instantiable reference to the requested class.</p>
<p>Lastly, you&#8217;ll notice that on the line, <tt>getInstance.instances[objectName] = new object;</tt>, I omitted the <tt>()</tt>.  It works with or without the parenthesis, but I prefer to omit them to distinguish the fact that we are not instantiating an object called &#8220;object&#8221;, but instead, are instantiating the object referenced by the variable &#8220;object.&#8221;</p>
<p>Now that we have all that settled, we can use our factory as follows:</p>
<pre>var someObject = getInstance("object");
var someWidget = getInstance("com.project.widgetAbc");</pre>
<p>I hope that shed some light on the subject.  Feel free to ask a question or two, and don&#8217;t hesitate to tell me if I made any mistakes that need correcting.</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/javascript-generic-singleton-factory/">Generic Singleton Factory in JavaScript</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/javascript-generic-singleton-factory/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Google Analytics to Find Browser Bugs</title>
		<link>http://www.zebrakick.com/blog/using-google-analytics-to-find-browser-bugs/</link>
		<comments>http://www.zebrakick.com/blog/using-google-analytics-to-find-browser-bugs/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 22:26:31 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Site Analysis]]></category>
		<category><![CDATA[browser bugs]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[IE6]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=40</guid>
		<description><![CDATA[
In June, one of our SEO clients had some development work done by a third party vendor. Once the site update was launched, it was our job to monitor the changes in indexing and make sure that everything was running smooth in the engines.  The work that had been done was on an e-commerce site, [...]<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/using-google-analytics-to-find-browser-bugs/">Using Google Analytics to Find Browser Bugs</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></description>
			<content:encoded><![CDATA[<p class="dropcap-first"><img class="alignnone" title="Google Analytics Graph" src="http://www.zebrakick.com/blog/wp-content/uploads/analytics-graph.jpg" alt="" width="600" height="128" /></p>
<p>In June, one of our SEO clients had some development work done by a third party vendor. Once the site update was launched, it was our job to monitor the changes in indexing and make sure that everything was running smooth in the engines.  The work that had been done was on an e-commerce site, so you can imagine how important it is that things go smoothly.</p>
<p>After a couple weeks of collecting data we realized that our sales numbers were low. Given our recent increase in traffic we knew something was wrong. So, time to dig into Google Analytics.  <span id="more-40"></span></p>
<h2>Diving into Google Analytics</h2>
<p>First we ran down all of the steps in our conversion funnel to try and identify were the hitch was.  Our bounce rate was fine, in fact it had improved over the past weeks.  It turned out that we had no major drop in page to page conversion when looking at our whole userbase.</p>
<p>Since we were not able to identify any major problems in our gross user base, the next step was to break down the users into groups that would have specific bugs. We decided to split groups into browsers because that would address any CSS or Javascript errors.</p>
<p>At first glance all browsers appeared to be fine at the top of the funnel, however on closer inspection it turned out that IE6 was not converting compared to pre-launch.  Upon closer inspection it turned out IE6 was having issues during the checkout phase.</p>
<p>Needless to say, once the problem was pointed out to the vender, it was fixed right away.</p>
<h2>Lessons Learned</h2>
<h3>When working with a third party, always do independent testing.</h3>
<p>It is important that when you work with a third party vendor that you make sure there testing methods live up to your standards.  It is natural to assume that a company will catch there own bugs; however, the truth is that bugs can pop out of nowhere, which is why it is important to constantly test for them.</p>
<h3>Continually test and retest</h3>
<p>Just because something is live and has passed internal testing doesn&#8217;t mean that it is foolproof.  Make it a habit to constantly check your sites in all browser, as sometimes a bug can slip through.</p>
<h3>Always browser test, even small changes.</h3>
<p>Just because the layout looks okay on IE6 doesn&#8217;t mean that all functions work right.  Justin can attest to the fact that browsers can be just as much trouble for JavaScript as CSS.  Even if you only are changing HTML, adding new content, etc  check the page in various browser.  It is better to spend extra before the bug happens than after it goes live.</p>
<h3>Dig DEEP into Analytics at least once a month.</h3>
<p>Many SEO&#8217;s get stuck in the habit of checking Analytics at <em>least</em> daily. This is a good practice for catching major changes when they first show up.  However, if all you do is check bounce, traffic and referrals, then you can miss out on some major chances to increase conversion. Narrow down your user sets starting with large groups and continue trimming until you are as specific as possible.  It is important, however, that your user groups are large enough to account for margin of error and randomness.</p>
<h2>A quick comment on bugs and testing</h2>
<p>It is important to remember that bugs do happen.  Yes, as developers, it is our job to polish a product as much as possible before it goes live.  But it is equally as important to keep tabs on a project post-launch so that any minor bugs can be fixed the moment they pop up.  One of the things about designing a website, as compared to print media, is that we create in a world with changing context and parameters.  It is important as designers and developers that we accept this and learn to roll with the punches instead of getting frustrated with old browsers.  That said, if you are still using Internet Explorer 6 or 7, <a href="http://www.getfirefox.com" target="_blank">please upgrade</a>.</p>
<p>In what ways has deep site analysis helped you improve your site?</p>
<p><div class="aggregator-exclude"><a href="http://www.zebrakick.com/blog/using-google-analytics-to-find-browser-bugs/">Using Google Analytics to Find Browser Bugs</a> posted on the <a href="http://www.zebrakick.com/blog">Zebra Kick Blog</a> a <a href="http://www.zebrakick.com">Riverside Web Design Company</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/blog/using-google-analytics-to-find-browser-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
