<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2none.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/noitems.css"?><rss 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/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Brian Cray's Blog</title>
	
	<link>http://briancray.com</link>
	<description>You’ve subscribed because you’re ready to take your website to the next level with user experience design, web development, and internet marketing.</description>
	<lastBuildDate>Wed, 10 Mar 2010 21:28:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/briancray/blog" /><feedburner:info uri="briancray/blog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>briancray/blog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fbriancray%2Fblog" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><item>
		<title>Design better websites by thinking about your kitchen cabinets</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/0uC1LPyrsg4/</link>
		<comments>http://briancray.com/2010/03/10/design-better-websites-with-iterative-design/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 18:11:50 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[User experience]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1757</guid>
		<description><![CDATA[For years I&#8217;ve been trying to fix a critical home design problem: How to organize the dishes in my cabinets. While fitting dishes into cabinet space seems like a simple design problem, it actually has many parallels with website design.
Design constraints
How does fitting dishes into cabinet space have parallels to web design? For starters it [...]]]></description>
			<content:encoded><![CDATA[<p>For years I&#8217;ve been trying to fix a critical home design problem: How to organize the dishes in my cabinets. While fitting dishes into cabinet space seems like a simple design problem, it actually has many parallels with website design.</p>
<h3>Design constraints</h3>
<p>How does fitting dishes into cabinet space have parallels to web design? For starters it has the same design constraints: space and content. Somehow the dishes need to fit into limited cabinet space.</p>
<p>My cabinet organization design has users, too, and if my design isn&#8217;t working my kids put dishes on the wrong shelf. After a time the shelves turn into a chaotic mess filling what seems like a shrinking space.</p>
<p>Website designs are subject to the same problems. Somehow you have to fill website space with content in such a way that it <em>&#8220;just works&#8221;</em> for users. If your design isn&#8217;t a natural fit for its users, they won&#8217;t do what you want them to. </p>
<h3>Iterative design</h3>
<p>Because the design constraints of kitchen cabinet organization are more limiting than website design, I am forced to go through small iterative designs. I can&#8217;t make big design changes because I&#8217;m working with the same dishes in the same cabinet space. Should the beer mugs go with the tall glasses (both used to drink cold drinks) or should they go with the coffee mugs (both have handles)?</p>
<p>As I said earlier, website design is not much different. With each redesign we&#8217;re usually working with the same content in the same screen real estate. Unfortunately &amp; fortunately, there&#8217;s a lot more design freedom with website design than there is with fitting dishes and cabinet space. <em>Fortunately</em> because using websites can be more engaging than grabbing dishes from a cabinet. <em>Unfortunately</em> because web designers tend to ignore the concept of <a href="http://en.wikipedia.org/wiki/Iterative_design">iterative design</a>.</p>
<h3>Getting to the best website design for your users</h3>
<p>About a month ago I finally found a cabinet organization that works. How do I know? Because my kids put away the dishes in the right place without my guidance. How&#8217;d I get there? Because of my design constraints I was forced to make <strong>small design changes over time</strong> with <strong>sufficient testing time</strong>. If I just randomly moved around dishes&mdash;the equivalent of a full website redesign&mdash;my kids would probably throw dishes at me when I entered the room.</p>
<p>To end at the most fitting website design <strong>you have to follow the same iterative process</strong>. Small design changes that are tested and measured. Don&#8217;t piss your users off by changing everything around. <strong>Improve</strong>.</p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/04/28/10-signs-professional-web-design/' rel='bookmark' title='Permanent Link: 10 signs of professional web design (Or why you should drop your amateur web designer)'>10 signs of professional web design (Or why you should drop your amateur web designer)</a></li>
<li><a href='http://briancray.com/2009/09/22/needs-assessment-web-design/' rel='bookmark' title='Permanent Link: Needs assessment: the most important process in web design'>Needs assessment: the most important process in web design</a></li>
<li><a href='http://briancray.com/2010/02/03/measuring-simplicity-in-web-design/' rel='bookmark' title='Permanent Link: The more I know, the less I need: Thoughts on web design'>The more I know, the less I need: Thoughts on web design</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=0uC1LPyrsg4:lcCZuhMD2C4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=0uC1LPyrsg4:lcCZuhMD2C4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=0uC1LPyrsg4:lcCZuhMD2C4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=0uC1LPyrsg4:lcCZuhMD2C4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=0uC1LPyrsg4:lcCZuhMD2C4:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=0uC1LPyrsg4:lcCZuhMD2C4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=0uC1LPyrsg4:lcCZuhMD2C4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=0uC1LPyrsg4:lcCZuhMD2C4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=0uC1LPyrsg4:lcCZuhMD2C4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=0uC1LPyrsg4:lcCZuhMD2C4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/0uC1LPyrsg4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/03/10/design-better-websites-with-iterative-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/03/10/design-better-websites-with-iterative-design/</feedburner:origLink></item>
		<item>
		<title>Measure what is relevant: A critical look at bounce rates</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/Mz_Tqboq_DE/</link>
		<comments>http://briancray.com/2010/03/03/bounce-rate-measurement-relevance/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 14:25:19 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Internet marketing]]></category>
		<category><![CDATA[conversion optimization]]></category>
		<category><![CDATA[web analytics]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1748</guid>
		<description><![CDATA[Every time I see &#8220;web analytics&#8221; I inevitably find &#8220;bounce rate&#8221; trailing close behind, being thrown around as if it&#8217;s some kind of silver bullet for measuring user engagement. &#8220;Get your bounce rate low, and life is good.&#8221; Wrong.
Bounce rate&#8217;s simplicity is both its greatest strength and its greatest weakness. Simplicity gives it the strength [...]]]></description>
			<content:encoded><![CDATA[<p>Every time I see &#8220;web analytics&#8221; I inevitably find &#8220;bounce rate&#8221; trailing close behind, being thrown around as if it&#8217;s some kind of silver bullet for measuring user engagement. &#8220;Get your bounce rate low, and life is good.&#8221; <strong>Wrong.</strong></p>
<p>Bounce rate&#8217;s simplicity is both its greatest strength and its greatest weakness. Simplicity gives it the strength to be easy to read and measure over time. Its weakness is that <strong>it makes people lazy</strong>.</p>
<p>So lazy in fact that people are failing to ask <strong>the most important strategic question about measurement</strong>: Are my methods of measurement relevant?</p>
<h3>Is bounce rate relevant?</h3>
<p>In order to &#8220;knock bounce rate down a peg or two&#8221; we need to first clearly define it: Bounce rate is the percentage of users that leave on the first page they visit.</p>
<p>&#8220;The first page they visit.&#8221; <strong>Therein lies the problem</strong>.</p>
<p>Consider these 3 questions in which the bounce rate is actually counter-productive:</p>
<h4>1. What if user engagement has nothing to do with multiple page views?</h4>
<p>Lets use a blog as a case in point. About a month ago I used <a href="http://www.surveymonkey.com/">Survey Monkey</a> to survey my readers. The survey revealed that approximately 90% of my visitors came for one thing: to read an article. While this may not be the same in every case, I don&#8217;t think I&#8217;m somewhere towards the center of the proverbial <a href="http://images.google.com/images?client=safari&#038;rls=en&#038;q=bell+curve&#038;oe=UTF-8&#038;um=1&#038;ie=UTF-8&#038;ei=fGyOS-_9GsHYlAep-PSpDQ&#038;sa=X&#038;oi=image_result_group&#038;ct=title&#038;resnum=4&#038;ved=0CCYQsAQwAw">bell curve</a>.</p>
<p>If users come to read an article, doesn&#8217;t it make sense that the time they spend reading the article is the correct form of measuring engagement? How many times do you read more than one article?</p>
<p>Sure, ideally content pulls visitors further into your site, but pull them in by <strong>understanding and designing to their intentions first</strong>. Otherwise you&#8217;re firing at the wrong target.</p>
<h4>2. What if your conversion leads them to another site?</h4>
<p>Many small to midsize ecommerce and micropayment sites use <a href="https://www.paypal.com/">PayPal</a> or <a href="http://checkout.google.com/">Google Checkout</a> to handle payments. Most web analytics software&mdash;including <a href="http://www.google.com/analytics/">Google Analytics</a>&mdash;only measure additional page views on your site, but <strong>isn&#8217;t checking out with PayPal a conversion</strong>?</p>
<p>Or what if you have a microsite designed for a specific campaign and you want visitors to jump to your brand&#8217;s main website. That jump, while a desirable effect on the surface, is reporting as a bounce! Oh no! You&#8217;ve been fooled!</p>
<h4>3. What if you&#8217;re successfully converting users on the first page they visit?</h4>
<p>Online support systems still rely on phones at the least as a last resort support function. Would you rather pay the support cost to take a phone call or lose a customer? Hopefully you&#8217;re in the latter group and make it easy for people to call you for support. And if your support is good, you&#8217;ve just built brand loyalty. But your bounce rate will tell you you&#8217;ve just lost a user. Oh no! Fooled again!</p>
<p>There are more examples of online calls to offline actions. What if you want your users to print out a coupon and/or visit your brick and mortar?</p>
<h3>How to prevent being mislead by the bounce rate</h3>
<p>Don&#8217;t let the bounce rate tell the story for you.</p>
<p>First, consider your website objectives and what your users intend to do. Hopefully those two compliment each other. Second, ask yourself how users will actually fulfill your objectives through a website. Finally, find metrics that measure user behavior that is relevant.</p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/07/09/best-long-tail-seo-keywords-web-analytics/' rel='bookmark' title='Permanent Link: My secret to finding the best long-tail SEO keywords with web analytics'>My secret to finding the best long-tail SEO keywords with web analytics</a></li>
<li><a href='http://briancray.com/2010/02/03/measuring-simplicity-in-web-design/' rel='bookmark' title='Permanent Link: The more I know, the less I need: Thoughts on web design'>The more I know, the less I need: Thoughts on web design</a></li>
<li><a href='http://briancray.com/2009/03/05/guidelines-for-highly-effective-websites/' rel='bookmark' title='Permanent Link: Guidelines for highly effective Websites'>Guidelines for highly effective Websites</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=Mz_Tqboq_DE:1G0Y4ag0638:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=Mz_Tqboq_DE:1G0Y4ag0638:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=Mz_Tqboq_DE:1G0Y4ag0638:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=Mz_Tqboq_DE:1G0Y4ag0638:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=Mz_Tqboq_DE:1G0Y4ag0638:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=Mz_Tqboq_DE:1G0Y4ag0638:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=Mz_Tqboq_DE:1G0Y4ag0638:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=Mz_Tqboq_DE:1G0Y4ag0638:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=Mz_Tqboq_DE:1G0Y4ag0638:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=Mz_Tqboq_DE:1G0Y4ag0638:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/Mz_Tqboq_DE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/03/03/bounce-rate-measurement-relevance/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/03/03/bounce-rate-measurement-relevance/</feedburner:origLink></item>
		<item>
		<title>SEO for bloggers: Crafting high-ranking post titles</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/1Hh3D0OPJUA/</link>
		<comments>http://briancray.com/2010/02/25/seo-ranking-blog-post-titles/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 22:13:54 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Internet marketing]]></category>
		<category><![CDATA[inbound marketing]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1721</guid>
		<description><![CDATA[Some SEO folks may scoff at the following statement. If you&#8217;re one of them, just read the whole article.
The most important SEO factor in blogging is the title of your posts.
There, I said it.
Is it true? Yes. A post&#8217;s title is where everything good in this world starts&#8212;awareness, then popularity, then the mother load: keyword-rich [...]]]></description>
			<content:encoded><![CDATA[<p>Some <abbr>SEO</abbr> folks may scoff at the following statement. If you&#8217;re one of them, just read the whole article.</p>
<p><strong>The most important <abbr>SEO</abbr> factor in blogging is the title of your posts.</strong></p>
<p>There, I said it.</p>
<p>Is it true? Yes. A post&#8217;s title is where everything good in this world starts&mdash;awareness, then popularity, then the mother load: <strong>keyword-rich inbound links</strong>. Yummy.</p>
<h3>How to choose a good post title for <abbr>SEO</abbr></h3>
<h4>Start with the right <abbr>SEO</abbr> keywords</h4>
<p>What you think are the best <abbr>SEO</abbr> keywords for your blog post <em>may not</em> reflect what people are <em>actually</em> searching. Luckily, Google offers a tool called <a href="http://www.google.com/insights/search/" title="SEO tools: Find the best SEO keywords">Google Insights for Search</a>, in which you search for a keyword&mdash;like &#8220;<abbr>SEO</abbr>&#8220;&mdash;and it returns common &amp; popular searches based on that keyword.</p>
<p>Here&#8217;s how to use Google Insights for Search to find the right <abbr>SEO</abbr> keywords:</p>
<ol>
<li>Choose a topic for your post (if you usually miss this step for your own blog, just stop blogging).</li>
<li>Search the topic on <a href="http://www.google.com/insights/search/" title="SEO tools: Find the best SEO keywords">Google Insights for Search</a> to see popular keywords &amp; searches related to that topic. For example, are people searching &#8220;blog <abbr>SEO</abbr>&#8220;? <em>No</em>. They&#8217;re actually searching &#8220;Wordpress <abbr>SEO</abbr>.&#8221;</li>
<li>Write down all of the popular searches for that topic, filtering by geographic region if it&#8217;s relevant.</li>
<li>Google those keywords. Narrow down searches from the list created in step 3 that are a) relevant, b) popular, and c) the least competitive (don&#8217;t try to compete against the big boys if you can avoid it).</li>
</ol>
<h4>Front-load <abbr>SEO</abbr> keywords</h4>
<p>Having the right keywords in your post titles is <em>very</em> important. Furthermore, you will increase your search engine ranking if you can front-load those keywords, which is a fancy way of saying, &#8220;<strong>put those keywords as the first words in your post title</strong>.&#8221;</p>
<p>Because web users <a href="http://www.useit.com/alertbox/reading_pattern.html">usually scan the first few words of headlines</a>, front-loaded keywords also gain the attention of qualified traffic that are scanning for keywords. Pre-qualified traffic  <a href="http://searchenginewatch.com/3624668">usually provides a higher ROI</a>.</p>
<h4>Keep your post title under 65 characters</h4>
<p>Over 65 characters and Google may cut off your post title with a masterful ellipsis (&hellip;), which makes you look bad in the search engine results pages (<abbr>SERP</abbr>s). Keeping your post title under 65 characters ensures people can see your full post title when they&#8217;re Googling.</p>
<p><strong>Bad (full title cut off):</strong></p>
<p><img src="http://briancray.com/wp-content/uploads/2010/02/Screen-shot-2010-02-25-at-4.53.39-PM.png"></p>
<p><strong>Good (full title displayed):</strong></p>
<p><img src="http://briancray.com/wp-content/uploads/2010/02/Screen-shot-2010-02-25-at-4.53.48-PM.png"></p>
<p>If you need a quick tool for testing your post title lengths, paste your draft title into Twitter&#8217;s tweet box and see if you have at least 75 characters still available in your tweet.</p>
<h4>Set beginning of your &lt;title&gt; to the post title</h4>
<p>While this is slightly off track from <em>choosing</em> the right post title, this plays a <em>significant</em> role in qualifying search engine traffic and increasing your search engine ranking.</p>
<p><strong>Bad:</strong> &lt;title&gt;Brian&#8217;s blog | My good blog title&lt;/title&gt;</p>
<p><strong>Good:</strong> &lt;title&gt;My good blog title | Brian&#8217;s blog&lt;/title&gt;</p>
<p><strong>Best:</strong> &lt;title&gt;My good blog title&lt;/title&gt;</p>
<h3>SEO benefits of a good blog title</h3>
<h4>Good blog titles attract people</h4>
<p>The more people that come to your blog, the increased opportunity that others will link to you. Plain &amp; simple.</p>
<h4>Good blog titles increase external link keyword density</h4>
<p>Many external links to your blog posts will contain your post title, and <a href="http://www.seomoz.org/article/search-ranking-factors">keyword-focused anchor text from external links</a> is the <em>most important</em> ranking factor.</p>
<h4>Good blog titles increase search engine visibility</h4>
<p>Using <a href="http://www.google.com/insights/search/">keywords based on actual searches</a> increases your search engine visibility in natural long-tail searches, which comprises probably around 80% of your inbound search engine traffic.</p>
<h3>Conclusion</h3>
<p>In the past year I&#8217;ve gone from 100 monthly search engine visits to about 10,000 monthly search engine visits on this blog. How I&#8217;ve written my blog titles have played a significant role in that leap.</p>
<p>This post will be part of a new series on my blog, <abbr>SEO</abbr> for bloggers. Stay tuned if you like what you see. =)</p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/07/09/best-long-tail-seo-keywords-web-analytics/' rel='bookmark' title='Permanent Link: My secret to finding the best long-tail SEO keywords with web analytics'>My secret to finding the best long-tail SEO keywords with web analytics</a></li>
<li><a href='http://briancray.com/2009/08/17/delicious-front-page-fails/' rel='bookmark' title='Permanent Link: Delicious.com loses its holy grail'>Delicious.com loses its holy grail</a></li>
<li><a href='http://briancray.com/2009/02/09/3-detrimental-assumptions-about-your-blog-readers-that-you-probably-make/' rel='bookmark' title='Permanent Link: 3 Detrimental Assumptions About Your Blog Readers That You Probably Make'>3 Detrimental Assumptions About Your Blog Readers That You Probably Make</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=1Hh3D0OPJUA:VXmi4cmNdrk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=1Hh3D0OPJUA:VXmi4cmNdrk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=1Hh3D0OPJUA:VXmi4cmNdrk:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=1Hh3D0OPJUA:VXmi4cmNdrk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=1Hh3D0OPJUA:VXmi4cmNdrk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=1Hh3D0OPJUA:VXmi4cmNdrk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=1Hh3D0OPJUA:VXmi4cmNdrk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=1Hh3D0OPJUA:VXmi4cmNdrk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=1Hh3D0OPJUA:VXmi4cmNdrk:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=1Hh3D0OPJUA:VXmi4cmNdrk:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/1Hh3D0OPJUA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/02/25/seo-ranking-blog-post-titles/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/02/25/seo-ranking-blog-post-titles/</feedburner:origLink></item>
		<item>
		<title>The more I know, the less I need: Thoughts on web design</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/IY1WveU3h4M/</link>
		<comments>http://briancray.com/2010/02/03/measuring-simplicity-in-web-design/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 16:36:59 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[User experience]]></category>
		<category><![CDATA[conversion optimization]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1679</guid>
		<description><![CDATA[You may have noticed that I&#8217;ve been going through design changes like crazy over the past month or so. That&#8217;s because I&#8217;m tracking almost everything my readers do into web analytics. With the right web analytics tools, you can gain real-time empirical data on your website visitors&#8217; habits in massive quantities.
What I&#8217;m learning may shock [...]]]></description>
			<content:encoded><![CDATA[<p>You may have noticed that I&#8217;ve been going through design changes like crazy over the past month or so. That&#8217;s because I&#8217;m tracking almost everything my readers do into web analytics. With <a href="http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/">the right web analytics tools</a>, you can gain <strong>real-time empirical data on your website visitors&#8217; habits</strong> in massive quantities.</p>
<p>What I&#8217;m learning may shock some of you, and it may confirm ideas for others. It&#8217;s not far from <a href="http://briancray.com/2009/08/26/blog-design-information-overload-progressive-disclosure/">what I&#8217;ve blogged about in the past</a>: Supplemental navigation is, in most cases, visual junk.</p>
<h3>Breakdown of link clicks by area</h3>
<p><img src="http://chart.apis.google.com/chart?chs=440x150&#038;chd=t:70,21,10&#038;cht=p3&#038;chl=Content|Header|Supplemental"></p>
<h3>Interpreting the chart data</h3>
<p>As you can see, supplemental navigation&mdash;including related posts, historical post navigation, popular posts, most commented posts, sidebars, etc&mdash;has accounted for about <em>only 10%</em> of the navigation on my site during several design variations. Of that 10%, historical navigation and related posts <em>alone</em> accounted for about 99%. The rest? Fluff. Garbage.</p>
<p>On the other hand, navigation <em>inside the content area</em> accounted for approximately 70% of clicked links on my site. Header navigation, including menu, logo, search, accounted for 30%.</p>
<h3>Design implications of data</h3>
<p>In short: less is more.</p>
<p>If you visit almost any blog today, you&#8217;ll be bombarded with 5,000 sidebar widgets, gadgets, and gizmos that are there to do what? Lower the bounce rate by increasing page views? Is that an actionable metric? <a href="http://briancray.com/2010/03/03/bounce-rate-measurement-relevance/">No</a>.</p>
<p>Blogs should be especially ashamed of these design practices, because the user&#8217;s goal is clear in 99% of the time: Read an article.</p>
<p>And the conversions are clear: subscribe, comment, share.</p>
<p>Those conversions are getting lost in too much choice and information overload. Do you want your users to subscribe, or do you want them to get lost in a sea of sidebar gadgets?</p>
<p>If the <a href="http://en.wikipedia.org/wiki/The_Paradox_of_Choice">Paradox of Choice</a> has taught us anything, it&#8217;s that how many choices you provide to users is a serious issue you should confront with every design decision.</p>
<h3>Actionable design recommendations</h3>
<ol>
<li>Start tracking exactly how your users are navigating your site. If you don&#8217;t know how, <a href="http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/">here&#8217;s a good place to start</a>.</li>
<li>Apps like <a href="http://lab.arc90.com/experiments/readability/">Readability</a> and <a href="http://www.hogbaysoftware.com/products/writeroom">WriteRoom</a> exist for a reason: Distractions suck. Eliminate low performing navigation options to increase the performance of effective navigation and user goal completion rates.</li>
<li>Integrate important navigation into your content. Don&#8217;t leave it off to the side where it&#8217;s <a href="http://briancray.com/2009/07/27/eye-tracking-studies-influence-redesign/">unnatural for people to look</a>.</li>
<li>Focus on what you want your design to achieve. Don&#8217;t focus on inflating your stats and ego with page views or lower bounce rates.</li>
</ol>
<h3>Conclusion</h3>
<p>Using information to make design decisions is something that should be practiced more in the web design community. In this case, a little data has provided a significant argument against a common blog design practice. What else could we be doing wrong or could we improve?</p>
<p>I think we&#8217;ll also find what works better for our users, also works better for our conversion rates. Please share your thoughts or data on the subject.</p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/06/07/rethinking-website-navigation-design/' rel='bookmark' title='Permanent Link: Rethinking website navigation design'>Rethinking website navigation design</a></li>
<li><a href='http://briancray.com/2009/08/26/blog-design-information-overload-progressive-disclosure/' rel='bookmark' title='Permanent Link: Blog design best practice: Scrollbars not sidebars'>Blog design best practice: Scrollbars not sidebars</a></li>
<li><a href='http://briancray.com/2009/04/28/10-signs-professional-web-design/' rel='bookmark' title='Permanent Link: 10 signs of professional web design (Or why you should drop your amateur web designer)'>10 signs of professional web design (Or why you should drop your amateur web designer)</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=IY1WveU3h4M:FUJHiSemkps:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=IY1WveU3h4M:FUJHiSemkps:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=IY1WveU3h4M:FUJHiSemkps:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=IY1WveU3h4M:FUJHiSemkps:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=IY1WveU3h4M:FUJHiSemkps:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=IY1WveU3h4M:FUJHiSemkps:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=IY1WveU3h4M:FUJHiSemkps:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=IY1WveU3h4M:FUJHiSemkps:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=IY1WveU3h4M:FUJHiSemkps:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=IY1WveU3h4M:FUJHiSemkps:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/IY1WveU3h4M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/02/03/measuring-simplicity-in-web-design/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/02/03/measuring-simplicity-in-web-design/</feedburner:origLink></item>
		<item>
		<title>How to promote innovation from your web team</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/iI0TtapWNsg/</link>
		<comments>http://briancray.com/2010/01/28/innovative-web-team/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 17:27:26 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Internet marketing]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1674</guid>
		<description><![CDATA[&#8220;Analytics, analytics, analytics, blah, blah, blah.&#8221;
&#8220;Code, code, code, blah, blah, blah.&#8221;
Two people, one a web analytics professional, the other a web developer, awkwardly sip coffee across from each other at a small cafe table that feels like a vast expanse. Their professional focuses seem not to hit any harmonious tones.
Then it happens. The internet marketer [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Analytics, analytics, analytics, blah, blah, blah.&#8221;</p>
<p>&#8220;Code, code, code, blah, blah, blah.&#8221;</p>
<p>Two people, one a web analytics professional, the other a web developer, awkwardly sip coffee across from each other at a small cafe table that feels like a vast expanse. Their professional focuses seem not to hit any harmonious tones.</p>
<p>Then it happens. The internet marketer asks <em>the</em> question: &#8220;Do you know what an <abbr>API</abbr> is by any chance?&#8221;</p>
<p>&#8220;Yea, sure. Why?&#8221;</p>
<p>&#8220;I was reading about new stuff in Google Analytics, things like being able to track things other than page views, like when a user plays a video. Apparently you can also build user segments in real-time. But it said something about an <abbr>API</abbr>, and I gave up. Maybe I&#8217;ll look at it later when I have the time.&#8221;</p>
<p>&#8220;Well, I know how to use <abbr>API</abbr>s, maybe I could help!&#8221; Relieved, the web developer realizes they <em>do</em> have something in common.</p>
<p>Over the next few hours they pour over the <a href="http://code.google.com/intl/en/apis/analytics/docs/gaJS/gaJSApi.html">tracking <abbr>API</abbr> documentation</a> together and realize the potential of their combined skill sets as they discuss <a href="http://code.google.com/intl/en/apis/analytics/docs/gaJS/gaJSApiCampaignTracking.html">advanced campaign tracking</a>, <a href="http://code.google.com/intl/en/apis/analytics/docs/gaJS/gaJSApiEventTracking.html">event tracking</a>, and <a href="http://code.google.com/intl/en/apis/analytics/docs/tracking/gaTrackingCustomVariables.html">real-time visitor segmenting</a>.</p>
<p>A month later the company knows more about its online customers and their behaviors/preferences than they could have imagined. A year later they are numero uno in their industry.</p>
<p>This is a classic problem between engineering and marketing. They can do so much together if they could just focus on outcomes instead of differences.</p>
<p>Promote interdisciplinary dialogue in your company. Get people to open up and share what they know across disciplinary lines.</p>
<p>Get your customer service reps talking to your copywriters. Get your social media marketers talking to your web analytics folks. Hell, get your direct mail marketers talking to your web developers. <strong>Truly innovate</strong>.</p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/' rel='bookmark' title='Permanent Link: Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery'>Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery</a></li>
<li><a href='http://briancray.com/2009/12/20/asynchronous-tracking-google-analytics/' rel='bookmark' title='Permanent Link: Is your Google Analytics missing page views? Introducing Asynchronous Tracking'>Is your Google Analytics missing page views? Introducing Asynchronous Tracking</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=iI0TtapWNsg:QbPKu8Gsd8A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=iI0TtapWNsg:QbPKu8Gsd8A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=iI0TtapWNsg:QbPKu8Gsd8A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=iI0TtapWNsg:QbPKu8Gsd8A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=iI0TtapWNsg:QbPKu8Gsd8A:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=iI0TtapWNsg:QbPKu8Gsd8A:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=iI0TtapWNsg:QbPKu8Gsd8A:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=iI0TtapWNsg:QbPKu8Gsd8A:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=iI0TtapWNsg:QbPKu8Gsd8A:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=iI0TtapWNsg:QbPKu8Gsd8A:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/iI0TtapWNsg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/01/28/innovative-web-team/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/01/28/innovative-web-team/</feedburner:origLink></item>
		<item>
		<title>UX Case Study: Designing a user-focused web app</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/lyrJqXhiRUc/</link>
		<comments>http://briancray.com/2010/01/26/ux-case-study-designing-user-focused-web-app/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 19:48:36 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[User experience]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web analytics]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1647</guid>
		<description><![CDATA[I wrote this article to give you insight into the complete design process for the redesign of Nearby Tweets. Web app developers and entrepreneurs will hopefully gain some ideas or reinforce their own processes. Users may find it interesting to see what goes into the design of a complex UI. I&#8217;d love your ideas, feedback, [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote this article to give you insight into the complete design process for the redesign of Nearby Tweets. Web app developers and entrepreneurs will hopefully gain some ideas or reinforce their own processes. Users may find it interesting to see what goes into the design of a complex <abbr>UI</abbr>. I&#8217;d love your ideas, feedback, and thoughts at the end of this article! Enjoy.</p>
<h3>Start at the beginning</h3>
<p>In the beginning there was the first iteration of Nearby Tweets, a simple way to connect with local people and businesses on Twitter.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/nbt_old.jpg" alt="Old Nearby Tweets screenshot"></p>
<p>But in product development there is no such thing as perfection, only <a href="http://en.wikipedia.org/wiki/Iterative_design">iterative design</a>&mdash;and customers hold all the answers to a better product. So I reached out to my users as soon as I had a chance with <a href="http://nearbytweets.uservoice.com/">Uservoice</a>. Through Uservoice, my users could vote on features they wanted see in the Nearby Tweets redesign, and vote they did.</p>
<h3>Top user requested changes to Nearby Tweets</h3>
<ol>
<li>Default location</li>
<li>Saved keywords and locations</li>
<li>Pullout drawer was annoying</li>
<li>Manual directory</li>
<li>Mobile version</li>
<li>Auto-refresh tweets</li>
<li>Block users</li>
<li>Block locations</li>
<li>Follow feature</li>
</ol>
<h3>Choosing which features to implement</h3>
<p>While all user requests are valid opportunities, I had to give some thought to my own resources and agenda before to make the right decisions about which requests to accept.</p>
<h4>Sorry mobile version, but you&#8217;ll have to wait</h4>
<p>Since I already had a web presence and I have not completely aligned Nearby Tweets&#8217; web presence with my goals, I am holding off on the mobile version, because that requires many resources and a new round of considerations, which would set me back and throw me off.</p>
<h4>Sorry manual directory, but you&#8217;re for someone else</h4>
<p>There are plenty of apps out there doing manual Twitter directories. I don&#8217;t have the reputation to compete them in that space, but the auto geolocation space is still mine, and that&#8217;s where I&#8217;ll stay for now. (See <a href="http://twellow.com/">Twellow</a>, <a href="http://wefollow.com/">WeFollow</a>, and <a href="http://justtweetit.com/">just tweet it</a>)</p>
<h4>The rest of you, come with me</h4>
<p>The rest of the user-requested features fit within my current agenda for the web platform, which I&#8217;d have to also define more clearly before I started in on the <abbr>UI</abbr> design.</p>
<h3>Narrowing my design scope</h3>
<p>In order to keep myself on track, I laid out three design scope requirements for the Nearby Tweets redesign:</p>
<ol>
<li><strong>Address user concerns.</strong> I released the first version of Nearby Tweets quickly with little user feedback, just to quietly hit the market with a fun, useful project. With this redesign I wanted to garner as much user feedback during the design process as possible. I did so through Twitter, Uservoice, as well as a private and public beta.</li>
<li><strong>Make Nearby Tweets more powerful.</strong> Although the focus of the first version was an advantage, it was very basic with no extended functionality. This time Nearby Tweets would supplement its core functionality with user preferences, and advanced search features.</li>
<li><strong>Maintain Nearby Tweets&#8217; simplicity and focus.</strong> All the while I would retain the simplicity of Nearby Tweets and make any effort to further simplify the Nearby Tweets experience.</li>
</ol>
<h4>Then I came up with my design goal</h4>
<p>Allow users to watch nearby tweets without any work, but allow users to tweak Nearby Tweets when ready.</p>
<h3>Turning concepts into UI design</h3>
<p>To keep Nearby Tweets simple while adding advanced functionality I decided to utilize two UI design concepts: Progressive disclosure and lazy registration.</p>
<h4>Implementing progressive disclosure in the UI</h4>
<blockquote><p>Progressive disclosure defers advanced or rarely used features to a secondary screen, making applications easier to learn and less error-prone. &#8211; <a href="http://www.useit.com/alertbox/progressive-disclosure.html" title="Read the article">Jakob Nielsen</a></p>
</blockquote>
<p>It should be noted that a second screen could be interpreted as hidden functionality that displays on the same screen on demand. That&#8217;s one of the ways I interpreted it anyway, as you&#8217;ll see.</p>
<h5>Tweet options</h5>
<p>The primary focus of each tweet is what&#8217;s said and who said it, so I kept each tweet to just that.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/plaintweet.jpg"></p>
<p>However, users have specifically requested the option to follow people, block people, and block locations. This advanced functionality needs to be available without cluttering each tweet with options used by a minority of the users. In comes progressive disclosure. As a user moves their mouse over each tweet, options to follow people, block people, and block locations becomes available.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/hovertweet.jpg"></p>
<h5>Location and keyword change popups</h5>
<p>The primary focus of an initial visit to Nearby Tweets was to simply watch the Nearby Tweets stream. So the only heading on the home page reads: &#8220;Tweets nearby xxxxx about yyyyy.&#8221; Simple enough.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/nbtheading.png"></p>
<p>But what about when people decide to search a new location or keyword? You&#8217;ll notice that the location and keyword look like links. When the user moves to click the location or keyword to change it, an in-place popup reveals the potential for more functionality.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/nbtheadinghober.png"></p>
<p>To present the user with a search box and everything else for searching would be too much for people just casually moving their mouse across the screen, so without clicking the user simply sees a button to &#8220;Change.&#8221; Clicking on that button further reveals full search capability. The whole box is actually clickable to increase the user&#8217;s click area.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/nbtheadingclick.png"></p>
<p>One thing you&#8217;ll notice on the location popup is a &#8220;use the map&#8221; button. The map is another area of the UI that has two purposes: Give the user a sense of location and provide advanced search functionality through progressive disclosure.</p>
<h5>Location searches using an interactive map</h5>
<p>At first glance the map just sits behind the Nearby Tweets stream and provides the user a visual context for their location, with a translucent white circle indicating the search radius.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/mapbg.jpg"></p>
<p>When users search locations, the Nearby Tweets stream slides away and reveals the map as search controls fade in.</p>
<p>This UI allows the map to take the backseat as a simple, relevant visual background to the Nearby Tweets steam while it&#8217;s not in use, but provide a very powerful search interface on demand.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/mapbgfull.jpg"></p>
<h5>User preferences</h5>
<p>As a classic example of progressive disclosure, users can add saved locations, keywords, and more in the user preferences, which provides the user with the power to make Nearby Tweets work better for them.</p>
<p>Speaking of user preferences, let&#8217;s talk about how it works.</p>
<h4>Implementing lazy registration in the UI</h4>
<p>A user could never touch the user preferences screen, but still get nearly all of its advantages. How? Lazy registration is a <a href="http://konigi.com/notebook/12-excellent-examples-“lazy-registration">growing <abbr>UI</abbr> trend</a> wherein information about the user is stored to make a later registration simpler to complete by auto-completing known information.</p>
<h5>Passive preferences</h5>
<p>Although Nearby Tweets has no registration per say, it does have a preferences page that allows a user registration-like advantages. The &#8220;lazy&#8221; part includes all the preferences the user sets without explicitly setting preferences there.</p>
<ul>
<li>Locations are automatically saved each time the user switches locations</li>
<li>Keywords are automatically saved each time the user searches a location</li>
<li>The main UI allows users to block people and locations</li>
</ul>
<h5>Default location</h5>
<p>Although the user can manually set a default location for Nearby Tweets in user preferences, this isn&#8217;t always necessary. Nearby Tweets attempts to find the user&#8217;s location automatically, making the UI completely passive unless the user chooses to further customize Nearby Tweets.</p>
<h3>Addressing user requests</h3>
<h4>Default location</h4>
<p>Nearby Tweets doesn&#8217;t always find the user&#8217;s location, so users wanted to manually override the <abbr>UI</abbr> with whatever default location they chose. I thought about several ways to achieve this, such as adding a &#8220;set to default&#8221; checkmark beside each saved location, but I thought this would add a lot of links for a misunderstood function without being too verbose.</p>
<p>I settled on keeping the option to set a default in the user preferences. There I would have the space to make it clear how to set a default location. Each saved location can be set as the default location simply by checking the column marked &#8220;default.&#8221;</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/default_location.png"></p>
<h4>Saved keywords and locations</h4>
<p>I chose to use &#8220;recent&#8221; instead of &#8220;saved&#8221; because it more closely reflects the storing behavior of the &#8220;saved&#8221; locations and keywords. Keywords and locations are permanently saved like bookmarks, but rather they work like a browser&#8217;s history.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/savedkeywords.png"></p>
<h4>Auto-refreshing tweets</h4>
<p>The refresh rate of new tweets was something I had a difficult time with. I had to fight between several competing factors: If I make it too slow people will think that Nearby Tweets isn&#8217;t working; If I make it too fast people won&#8217;t be able to read the tweets, thus eliminating usefulness. After tweaking the auto-refresh rate and testing it with a few users, I found the balance to be 3 seconds, which is now the default.</p>
<p>Since not everybody reads at the same rate or thoroughness, the auto-refresh rate can be set in user preferences. Based on analytics the most common times after 3 seconds include 30 seconds, 10 seconds, 5 seconds, and 1 second.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/defaulttimer.png"></p>
<h4>Block users</h4>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/nbtblock.png"></p>
<h4>Block locations</h4>
<p>I also had a difficult time deciding how to implement blocked locations, which works by comparing the tweeter&#8217;s location against the blocked location. The problem arises when a user blocks the location &#8220;Columbus, Ohio&#8221; and the tweeter&#8217;s location is &#8220;Columbus.&#8221; Although a person can clearly see the two locations are the same, &#8220;Columbus, Ohio&#8221; is not equal to &#8220;Columbus&#8221; to a computer.</p>
<p>The question then is do I assume that the user intends to only block exact matches for &#8220;Columbus, Ohio&#8221; or all tweets in &#8220;Columbus&#8221;? To make the software intelligent, I developed it to extract the city name automatically. However, this is an issue when you have the same city name in two locations, such as Columbus, Ohio and Columbus, Georgia. Anyone in Columbus, Georgia who wants to blocks tweets only from Columbus, Ohio will block tweets from any city named incidentally named Columbus. I guess I&#8217;ll have to keep my ears open to user complaints on this issue if it really becomes an issue at all.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/blocklocations.png"></p>
<h4>Follow feature</h4>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/follow_people.png"></p>
<h3>Intended behaviors vs. Actual behaviors</h3>
<p>It&#8217;s one thing to influences behaviors through design, it&#8217;s another to see what really happens. In my redesign of Nearby Tweets I took some questionable, albeit well thought out, usability risks by not following standard <abbr>UI</abbr> patterns.</p>
<p>I&#8217;ve found that Google Analytics is actually the best way to track user behavior, if you know what to do. I&#8217;ve setup my Google Analytics to individually track almost every user interaction with the <abbr>UI</abbr>. For example, I can see whether people are using typed locations, saved locations, or mapped locations. I can tell how many people set default locations, or delete saved locations. I can see it all.</p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/event_cats.png"></p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/event_actions.png"></p>
<p><img src="http://briancray.com/wp-content/uploads/2010/01/event_lables.png"></p>
<p>As the above stats show, people are using the <abbr>UI</abbr> I built. 44% of the people that visit the site use some part of the <abbr>UI</abbr>, excluding visits to other pages. I&#8217;d like to increase that to at least half. Other people may be simply visiting the site and watching the Nearby Tweets stream, which is sufficient for me for now.</p>
<h3>That&#8217;s it!</h3>
<p>I hope you enjoyed this little run down of my redesign process of Nearby Tweets. Please share your ideas, thoughts, and feedback. How would you have done things differently? Has this helped you do anything different in the future?</p>
<p>And if you haven&#8217;t already, be sure to pay <a href="http://nearbytweets.com/">Nearby Tweets</a> a visit and share it with your Twitter network <img src='http://briancray.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/' rel='bookmark' title='Permanent Link: Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery'>Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery</a></li>
<li><a href='http://briancray.com/2009/02/23/nearby-tweets-officially-leaves-beta/' rel='bookmark' title='Permanent Link: Nearby Tweets Officially Leaves Beta!'>Nearby Tweets Officially Leaves Beta!</a></li>
<li><a href='http://briancray.com/2009/12/15/user-feedback-clicked-links-linknotify-2/' rel='bookmark' title='Permanent Link: Better user feedback on clicked links with linkNotify 2.0'>Better user feedback on clicked links with linkNotify 2.0</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=lyrJqXhiRUc:EY_bs_4vum8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=lyrJqXhiRUc:EY_bs_4vum8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=lyrJqXhiRUc:EY_bs_4vum8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=lyrJqXhiRUc:EY_bs_4vum8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=lyrJqXhiRUc:EY_bs_4vum8:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=lyrJqXhiRUc:EY_bs_4vum8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=lyrJqXhiRUc:EY_bs_4vum8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=lyrJqXhiRUc:EY_bs_4vum8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=lyrJqXhiRUc:EY_bs_4vum8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=lyrJqXhiRUc:EY_bs_4vum8:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/lyrJqXhiRUc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/01/26/ux-case-study-designing-user-focused-web-app/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/01/26/ux-case-study-designing-user-focused-web-app/</feedburner:origLink></item>
		<item>
		<title>Display popular posts based on social media engagement with PostRank Top Posts API</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/fIwe3I1PH0Q/</link>
		<comments>http://briancray.com/2010/01/04/popular-posts-social-media-engagement-postrank-top-posts-api/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 16:19:51 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Web development]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1616</guid>
		<description><![CDATA[According to PostRank, &#8220;Over 80% of the engagement with your content doesn&#8217;t happen on your blog.&#8221; That&#8217;s a big deal on many levels. In the context of this post, it confirms that number of comments alone doesn&#8217;t constitute the popularity of your blog posts.
Lucky for us though, PostRank&#8212;a company that monitors and collects social engagement [...]]]></description>
			<content:encoded><![CDATA[<p>According to <a href="https://analytics.postrank.com/">PostRank</a>, &#8220;Over 80% of the engagement with your content doesn&#8217;t happen on your blog.&#8221; That&#8217;s a big deal on many levels. In the context of this post, it confirms that <strong>number of comments alone doesn&#8217;t constitute the popularity of your blog posts</strong>.</p>
<p>Lucky for us though, <a href="http://www.postrank.com/">PostRank</a>&mdash;a company that monitors and collects social engagement data in real-time across the web&mdash;provides powerful <a href="http://data.postrank.com/">Data Services</a> that give developers <a href="http://data.postrank.com/api_mining.html"><abbr>API</abbr></a> access to that social engagement data.</p>
<p>Today I&#8217;ll show you how to use <abbr>PHP5</abbr> to fetch and display your blog&#8217;s most popular posts using <a href="http://apidocs.postrank.com/Top-Posts-API">PostRank&#8217;s Top Posts API</a>.</p>
<p><span id="more-1616"></span></p>
<h3>Requirements</h3>
<ol>
<li>Your blog must publish an <a href="http://www.whatisrss.com/"><abbr>RSS</abbr> feed</a></li>
<li>Grab your PostRank feed hash (<a href="http://blog.postrank.com/getting-started/postrank-top-posts-widget/">directions</a></li>
<li><abbr>PHP5</abbr> is required.</li>
</ol>
<h3 id="firstcode">Fetching the Top Posts API</h3>
<p>This code caches the latest Top Posts <abbr>API</abbr> feed for an hour to maintain your website&#8217;s performance.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> popular_postrank<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;">//BASIC REST API URL: http://api.postrank.com/v2/feed/{feed_hash}/topposts?appkey=postrank.com/example</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//replace this with YOUR feed hash as discussed in the requirements</span>
	<span style="color: #000088;">$postrank_feed_hash</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'3e7883668d6a7406078846eed577d4f8'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$numposts</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$apikey</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'HTTP_HOST'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://api.postrank.com/v2/feed/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$postrank_feed_hash</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/topposts?appkey='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$apikey</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&amp;format=json&amp;num='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$numposts</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$cache</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/caches/postrank'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">3600</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">__FILE__</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/caches'</span><span style="color: #339933;">,</span> <span style="color: #208080;">0777</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_REFERER<span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'REQUEST_URI'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$cachefile</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'wb'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">fwrite</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cachefile</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">fclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cachefile</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cache</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$json</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&lt;ul&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$json</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">items</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$html</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;li&gt;&lt;a href=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$item</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">original_link</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$item</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/a&gt;&lt;/li&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$html</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'&lt;/ul&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$html</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<h3 id="secondcode">Displaying the popular posts</h3>
<p>Put this anywhere you want to display your top posts.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> popular_postrank<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<h3>HTML output</h3>
<p>Calling the above function outputs a simple <abbr>HTML</abbr> unordered  list with the <abbr>CSS</abbr> class name &#8220;popular-posts&#8221;, like so:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;popular-posts&quot;</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/&quot;</span>&gt;</span>Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/08/26/free-php-url-shortener-script/&quot;</span>&gt;</span>Free PHP URL shortener script that kicks ass<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/12/02/value-of-wireframing-website-design/&quot;</span>&gt;</span>How wireframing makes your website designs better<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/11/13/signup-process-online-community-best-practices/&quot;</span>&gt;</span>Online community best practices: Effective signup process<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/09/09/fire-the-web-designer/&quot;</span>&gt;</span>Fire the “web designer”<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/09/08/track-inbound-link-referrals-social-media-profiles-twitter-facebook/&quot;</span>&gt;</span>How to track inbound links from your social media profiles (Twitter, Facebook, etc)<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/08/26/free-php-url-shortener-script/&quot;</span>&gt;</span>Free PHP URL shortener script that kicks ass<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/11/30/omnigraffle-wireframing-960-grid-template/&quot;</span>&gt;</span>Wireframing Freebie: 960 grid template for OmniGraffle<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/09/18/web-form-validation-php/&quot;</span>&gt;</span>Smart web form validation with PHP<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://briancray.com/2009/12/28/simple-image-randomizer-jquery/&quot;</span>&gt;</span>Impossibly simple image randomizer with jQuery<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></pre></td></tr></table></div>

<h3>Adding it to Wordpress</h3>
<ol>
<li>Add the <a href="#firstcode">popular_postrank() function</a> to /wp-content/themes/{current_theme}/functions.php</li>
<li>Add the <a href="#secondcode">call to the function</a> anywhere you want to display to top posts (likely index.php, archives.php, or single.php)</li>
</ol>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/08/24/delicious-bookmarks-api-php/' rel='bookmark' title='Permanent Link: Display your recent delicious bookmarks with PHP'>Display your recent delicious bookmarks with PHP</a></li>
<li><a href='http://briancray.com/2009/08/21/tweeted-links-twitter-api-php-cache/' rel='bookmark' title='Permanent Link: Use PHP to cache and display your tweeted links'>Use PHP to cache and display your tweeted links</a></li>
<li><a href='http://briancray.com/2009/03/09/interview-social-media-phd-scholar-vivek-kumar-shares-views-on-social-media/' rel='bookmark' title='Permanent Link: Interview: Social Media PhD Scholar Vivek Kumar Shares Views On Social Media'>Interview: Social Media PhD Scholar Vivek Kumar Shares Views On Social Media</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fIwe3I1PH0Q:pjq-nNSrDDc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fIwe3I1PH0Q:pjq-nNSrDDc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fIwe3I1PH0Q:pjq-nNSrDDc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fIwe3I1PH0Q:pjq-nNSrDDc:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fIwe3I1PH0Q:pjq-nNSrDDc:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fIwe3I1PH0Q:pjq-nNSrDDc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fIwe3I1PH0Q:pjq-nNSrDDc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fIwe3I1PH0Q:pjq-nNSrDDc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fIwe3I1PH0Q:pjq-nNSrDDc:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fIwe3I1PH0Q:pjq-nNSrDDc:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/fIwe3I1PH0Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2010/01/04/popular-posts-social-media-engagement-postrank-top-posts-api/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://briancray.com/2010/01/04/popular-posts-social-media-engagement-postrank-top-posts-api/</feedburner:origLink></item>
		<item>
		<title>Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/uDe8LqwkOug/</link>
		<comments>http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 20:20:56 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Internet marketing]]></category>
		<category><![CDATA[User experience]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[conversion optimization]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[web analytics]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1584</guid>
		<description><![CDATA[<p>In a default Google Analytics setup, the information you have about your users' navigation behaviors and preferences is limited to which pages they viewed and where they came from. But what does that <em>really</em> tell you about how your users behave <strong>inside</strong> your web pages? Not much, and that's where all the juicy behavioral insight comes from.</p>

<!--more-->

<ul>
<li>Are your users using the main menu to navigate or do they use different means to find content?</li>
<li>Do your users scroll through your content and click links in the footer?</li>
<li>Do your users click on an article title or the "continue reading..." link?</li>
<li>Do your users actually go through the items in my dropdown menu, or are they unaware of the dropdown menus?</li>
<li>Do your users follow your related blog entry suggestions?</li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>In a default Google Analytics setup, the information you have about your users&#8217; navigation behaviors and preferences is limited to which pages they viewed and where they came from. But what does that <em>really</em> tell you about how your users behave <strong>inside</strong> your web pages? Not much, and that&#8217;s where all the juicy behavioral insight comes from.</p>
<p><span id="more-1584"></span></p>
<h3>I dare you to answer the following questions with your current Google Analytics setup</h3>
<ul>
<li>Are your users using the main menu to navigate or do they use different means to find content?</li>
<li>Do your users scroll through your content and click links in the footer?</li>
<li>Do your users click on an article title or the &#8220;continue reading&#8230;&#8221; link?</li>
<li>Do your users actually go through the items in my dropdown menu, or are they unaware of the dropdown menus?</li>
<li>Do your users follow your related blog entry suggestions?</li>
</ul>
<p class="center"><img src="http://briancray.com/wp-content/uploads/2009/12/navigationoptions.png"></p>
<h3>I&#8217;ll help you answer some of these questions right now</h3>
<p>Using Google Analytics&#8217; <a href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html">Event Tracking</a>, you can begin tracking arbitrary events&mdash;including your users&#8217; behaviors&mdash;<em>inside</em> your web pages.</p>
<p>Before you get started follow these 2 <strong>important steps</strong>:</p>
<ol>
<li>Migrate your Google Analytics tracking code to <a href="http://briancray.com/2009/12/20/asynchronous-tracking-google-analytics/">Asynchronous Tracking</a></li>
<li>Move <a href="http://jquery.com/">jQuery</a> to your &lt;head&gt; element (I know, it&#8217;s against <a href="http://developer.yahoo.com/performance/rules.html">optimization standards</a>, but the data payoff is worth it if you use <a href="http://www.mnot.net/cache_docs/">good caching techniques</a>)</li>
</ol>
<h4>The code</h4>
<p>Add this to the &lt;head&gt; element or alongside your current jQuery code (as long as that code is in the &lt;head&gt;).

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	 $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// tell analytics to save event</span>
		<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			_gaq.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'_trackEvent'</span><span style="color: #339933;">,</span> thisel.<span style="color: #660066;">parents</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[id!=&quot;&quot;]:first'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">id</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'clicked'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>thisel.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> thisel.<span style="color: #660066;">children</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'img:first'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'alt'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #006600; font-style: italic;">// pause to allow google script to run</span>
		<span style="color: #003366; font-weight: bold;">var</span> date <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003366; font-weight: bold;">var</span> curDate <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
		<span style="color: #000066; font-weight: bold;">do</span> <span style="color: #009900;">&#123;</span>
			curDate <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>curDate<span style="color: #339933;">-</span>date <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">300</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h4>Screenshot of Event Categories after installation</h4>
<p>After installing the code above, I can see which sections on my website receive the most clicks (based on the <abbr>ID</abbr> attribute of the element or parent elements).</p>
<p><img src="http://briancray.com/wp-content/uploads/2009/12/eventcategories.png"></p>
<h4>Screenshot of Event Labels after installation</h4>
<p>After installing the code above and drilling down on an Event Category (left), I can see the captions of the links that were clicked, for example, the link text of menu items as seen below.</p>
<p><img src="http://briancray.com/wp-content/uploads/2009/12/eventvalues.png"></p>
<h3>Getting even more user insight with Event Tracking</h3>
<p>This is just the beginning of the rabbit hole, Alice. With proper jQuery knowledge and a thirst for user insight, you can take this technique way further.</p>
<ul>
<li>Track form behavior and mouse behavior.</li>
<li>Track time between user actions</li>
<li>Make design changes, then watch how those design changes affect <em>actual</em> user behavior (similar to asynchronous A/B testing).</li>
</ul>
<p><a href="http://www.fabianpimminger.com/">Fabian Pimminge</a> has ported this code to MooTools, if that&#8217;s your <abbr>JS</abbr> framework of choice: <a href="http://www.fabianpimminger.com/web-development/tracking-user-behaviour-with-google-analytics-event-tracking-and-mootools/">See this article</a></p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/12/20/asynchronous-tracking-google-analytics/' rel='bookmark' title='Permanent Link: Is your Google Analytics missing page views? Introducing Asynchronous Tracking'>Is your Google Analytics missing page views? Introducing Asynchronous Tracking</a></li>
<li><a href='http://briancray.com/2009/03/14/google-analytics-hack-track-outbound-links/' rel='bookmark' title='Permanent Link: Google Analytics Hack: Track Outbound Links In 2 Easy Steps'>Google Analytics Hack: Track Outbound Links In 2 Easy Steps</a></li>
<li><a href='http://briancray.com/2009/12/15/user-feedback-clicked-links-linknotify-2/' rel='bookmark' title='Permanent Link: Better user feedback on clicked links with linkNotify 2.0'>Better user feedback on clicked links with linkNotify 2.0</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=uDe8LqwkOug:4az2A_VelOw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=uDe8LqwkOug:4az2A_VelOw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=uDe8LqwkOug:4az2A_VelOw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=uDe8LqwkOug:4az2A_VelOw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=uDe8LqwkOug:4az2A_VelOw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=uDe8LqwkOug:4az2A_VelOw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=uDe8LqwkOug:4az2A_VelOw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=uDe8LqwkOug:4az2A_VelOw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=uDe8LqwkOug:4az2A_VelOw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=uDe8LqwkOug:4az2A_VelOw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/uDe8LqwkOug" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		<feedburner:origLink>http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/</feedburner:origLink></item>
		<item>
		<title>Impossibly simple image randomizer with jQuery</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/fh1DGw3z2-Y/</link>
		<comments>http://briancray.com/2009/12/28/simple-image-randomizer-jquery/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 17:39:47 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Web development]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1575</guid>
		<description><![CDATA[A common design pattern&#8212;if you want to call it that&#8212;is to display a random header image or advertisment on each new pageview. I&#8217;m always looking for ways to simplify code [see 1, 2, 3], and naturally, I tried to do it here.
Today&#8217;s impossibly simple code turns the task of image randomization into a 1-line jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>A common design pattern&mdash;if you want to call it that&mdash;is to display a random header image or advertisment on each new pageview. I&#8217;m always looking for ways to simplify code [see <a href="http://briancray.com/2009/02/10/generate-tinyurls-with-1-line-of-php/">1</a>, <a href="http://briancray.com/2009/08/06/check-all-jquery-javascript/">2</a>, <a href="http://briancray.com/2009/04/25/remove-null-values-php-arrays/">3</a>], and naturally, I tried to do it here.</p>
<p>Today&#8217;s impossibly simple code turns the task of image randomization into a 1-line jQuery code snippet. Awesome.</p>
<p><span id="more-1575"></span></p>
<h3>1. Start with an array of images</h3>
<p>Change the image filenames in the array to the <em>actual</em> filenames. Don&#8217;t include the directory&mdash;filenames only.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> images <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'image1.jpg'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'image2.jpg'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'image3.jpg'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'image4.jpg'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'image5.jpg'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>2a. Set a random header background with jQuery and CSS background-image</h3>
<p>The following code assumes your header has an <abbr>ID</abbr> of #header and your images directory is just &#8220;/images&#8221;. Change them if necessary.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#header'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #3366CC;">'background-image'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'url(images/'</span> <span style="color: #339933;">+</span> images<span style="color: #009900;">&#91;</span>Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> images.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">')'</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>2b. Insert a random advertisement with jQuery and DOM injection</h3>
<p>The following code assumes your ad container has an <abbr>ID</abbr> of #ad and your images directory is just &#8220;/images&#8221;. Change them if necessary.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;img src=&quot;images/'</span> <span style="color: #339933;">+</span> images<span style="color: #009900;">&#91;</span>Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span>Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> images.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">appendTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#ad'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>



<p>Related posts:<ol><li><a href='http://briancray.com/2009/09/30/remove-value-javascript-array/' rel='bookmark' title='Permanent Link: How to remove a specific value from a javascript array'>How to remove a specific value from a javascript array</a></li>
<li><a href='http://briancray.com/2009/05/06/twitter-style-alert-jquery-cs-php/' rel='bookmark' title='Permanent Link: How to create a Twitter-style alert with jQuery, CSS, and PHP'>How to create a Twitter-style alert with jQuery, CSS, and PHP</a></li>
<li><a href='http://briancray.com/2009/07/28/increase-form-usability-replace-form-button-submit/' rel='bookmark' title='Permanent Link: Web form usability: Better form submission feedback with jQuery'>Web form usability: Better form submission feedback with jQuery</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fh1DGw3z2-Y:i0HVTnBrvZU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fh1DGw3z2-Y:i0HVTnBrvZU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fh1DGw3z2-Y:i0HVTnBrvZU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fh1DGw3z2-Y:i0HVTnBrvZU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fh1DGw3z2-Y:i0HVTnBrvZU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fh1DGw3z2-Y:i0HVTnBrvZU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fh1DGw3z2-Y:i0HVTnBrvZU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fh1DGw3z2-Y:i0HVTnBrvZU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=fh1DGw3z2-Y:i0HVTnBrvZU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=fh1DGw3z2-Y:i0HVTnBrvZU:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/fh1DGw3z2-Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2009/12/28/simple-image-randomizer-jquery/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		<feedburner:origLink>http://briancray.com/2009/12/28/simple-image-randomizer-jquery/</feedburner:origLink></item>
		<item>
		<title>Is your Google Analytics missing page views? Introducing Asynchronous Tracking</title>
		<link>http://feedproxy.google.com/~r/briancray/blog/~3/DVXHXDF_I7U/</link>
		<comments>http://briancray.com/2009/12/20/asynchronous-tracking-google-analytics/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 06:19:51 +0000</pubDate>
		<dc:creator>Brian Cray</dc:creator>
				<category><![CDATA[Internet marketing]]></category>
		<category><![CDATA[web analytics]]></category>

		<guid isPermaLink="false">http://briancray.com/?p=1534</guid>
		<description><![CDATA[<p>What happens to your Google Analytics if someone leaves the page before it has fully loaded? The page view doesn't get recorded and Google Analytics fails as an accurate source of user data.</p>
<p>Google has fixed missing data issues with <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html">Asynchronous Tracking</a>. Just read this quote straight from the <a href="http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#EventHandlers">Asynchronous Tracking documentation</a>:</p>

<blockquote><p>"Even if [a] button is clicked before the browser has finished loading ga.js, the event will be captured and eventually executed. Using traditional tracking, the browser might throw an exception in this situation."</p></blockquote>]]></description>
			<content:encoded><![CDATA[<p>What happens to your Google Analytics if someone leaves the page before it has fully loaded? The page view doesn&#8217;t get recorded and Google Analytics fails as an accurate source of user data.</p>
<h3>Asynchronous Tracking for Google Analytics</h3>
<p>Google has fixed missing data issues with <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html">Asynchronous Tracking</a>. Just read this quote straight from the <a href="http://code.google.com/apis/analytics/docs/tracking/asyncUsageGuide.html#EventHandlers">Asynchronous Tracking documentation</a>:</p>
<blockquote><p>&#8220;Even if [a] button is clicked before the browser has finished loading ga.js, the event will be captured and eventually executed. Using traditional tracking, the browser might throw an exception in this situation.&#8221;</p>
</blockquote>
<p>While this quote refers to <a href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerOverview.html">event tracking</a>, I believe it applies to any of Google Analytics&#8217; tracking methods, including page views.</p>
<p>Google Analytics Asynchronous Tracking works by <a href="http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.html">queuing up tracking commands</a> for execution when the analytics script finishes loading. Since the Asynchronous Tracking code is put in the &lt;head&gt; of an <abbr>HTML</abbr> document, it will always finish loading in time.</p>
<h3>Comparing traditional vs. Asynchronous Tracking code</h3>
<h4>Traditional tracking code for Google Analytics</h4>
<ul>
<li>Goes at the end of an <abbr>HTML</abbr> document, before <code>&lt;/body&gt;</code></li>
<li>Uses <code>document.write</code> to insert script</li>
<li>Doesn&#8217;t capture events before page load</li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #003366; font-weight: bold;">var</span> gaJsHost <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;https:&quot;</span> <span style="color: #339933;">==</span> document.<span style="color: #660066;">location</span>.<span style="color: #660066;">protocol</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;https://ssl.&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;%3Cscript src='&quot;</span> <span style="color: #339933;">+</span> gaJsHost <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #000066; font-weight: bold;">try</span><span style="color: #009900;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> pageTracker <span style="color: #339933;">=</span> _gat._getTracker<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;UA-xxxxxx-x&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
pageTracker._trackPageview<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<h4>Asynchronous Tracking code for Google Analytics</h4>
<ul>
<li>Goes at the beginning of an <abbr>HTML</abbr> document, before <code>&lt;/head&gt;</code></li>
<li>Uses a <abbr>DOM</abbr> injection to insert script (geeks should like that one)</li>
<li>Captures events prior to page load</li>
</ul>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
&nbsp;
  <span style="color: #003366; font-weight: bold;">var</span> _gaq <span style="color: #339933;">=</span> _gaq <span style="color: #339933;">||</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  _gaq.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'_setAccount'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'UA-XXXXX-X'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  _gaq.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'_trackPageview'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> ga <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> ga.<span style="color: #660066;">type</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'text/javascript'</span><span style="color: #339933;">;</span> ga.<span style="color: #660066;">async</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    ga.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'https:'</span> <span style="color: #339933;">==</span> document.<span style="color: #660066;">location</span>.<span style="color: #660066;">protocol</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">'https://ssl'</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">'http://www'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'.google-analytics.com/ga.js'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'head'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>ga<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<h3>Begin using Google Analytics Asynchronous Tracking today</h3>
<p>I became aware of Asynchronous Tracking thanks to <a href="http://www.webresourcesdepot.com/tracking-new-rss-subscribers-with-google-analytics-to-understand-them-better/">this article on Web Resources Depot</a>, and I&#8217;ve been using it since. So far there have been no issues with tracking or loading times. In fact, there seems to be improvements in load times and reporting.</p>
<p>If you <strong>do not</strong> use <a href="http://www.google.com/analytics/features.html#customized_reporting">advanced tracking options</a> such as <a href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerOverview.html">event tracking</a> or <a href="http://code.google.com/apis/analytics/docs/tracking/gaTrackingCustomVariables.html">custom variables</a>, just replace your current tracking code with the <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html#Snippet">Asynchronous Tracking code</a> (above) and you&#8217;re done!</p>
<p>If you <strong>do</strong> use <a href="http://www.google.com/analytics/features.html#customized_reporting">advanced tracking options</a> make sure you read over the <a href="http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.html">Asynchronous migration examples</a> and migrate all of your tracking code to the new format.</p>


<p>Related posts:<ol><li><a href='http://briancray.com/2009/12/29/understanding-user-behavior-google-analytics-event-tracking-jquery/' rel='bookmark' title='Permanent Link: Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery'>Diving deep into user behavior with Google Analytics, Event Tracking, and jQuery</a></li>
<li><a href='http://briancray.com/2009/03/14/google-analytics-hack-track-outbound-links/' rel='bookmark' title='Permanent Link: Google Analytics Hack: Track Outbound Links In 2 Easy Steps'>Google Analytics Hack: Track Outbound Links In 2 Easy Steps</a></li>
<li><a href='http://briancray.com/2009/08/07/track-subscriber-inbound-traffic-google-analytics-wordpress/' rel='bookmark' title='Permanent Link: Wordpress plugin: Track subscriber inbound traffic in Google Analytics'>Wordpress plugin: Track subscriber inbound traffic in Google Analytics</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/briancray/blog?a=DVXHXDF_I7U:8D3rOz5rYwE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=DVXHXDF_I7U:8D3rOz5rYwE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=DVXHXDF_I7U:8D3rOz5rYwE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=DVXHXDF_I7U:8D3rOz5rYwE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=DVXHXDF_I7U:8D3rOz5rYwE:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=DVXHXDF_I7U:8D3rOz5rYwE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/briancray/blog?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=DVXHXDF_I7U:8D3rOz5rYwE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=DVXHXDF_I7U:8D3rOz5rYwE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/briancray/blog?a=DVXHXDF_I7U:8D3rOz5rYwE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/briancray/blog?i=DVXHXDF_I7U:8D3rOz5rYwE:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/briancray/blog/~4/DVXHXDF_I7U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://briancray.com/2009/12/20/asynchronous-tracking-google-analytics/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://briancray.com/2009/12/20/asynchronous-tracking-google-analytics/</feedburner:origLink></item>
	</channel>
</rss>
