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

<channel>
	<title>Devon Hillard Tech Blog &#187; seo</title>
	<atom:link href="http://www.digitalsanctuary.com/tech-blog/tag/seo/feed" rel="self" type="application/rss+xml" />
	<link>http://www.digitalsanctuary.com/tech-blog</link>
	<description>Java, ATG, Seam, and related Technologies</description>
	<lastBuildDate>Thu, 01 Jul 2010 21:06:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Making Search Keywords Easy</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/making-search-keywords-easy.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/making-search-keywords-easy.html#comments</comments>
		<pubDate>Mon, 22 Feb 2010 01:12:09 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=586</guid>
		<description><![CDATA[I was recently contacted by SortFix who introduced their offering to me and thought maybe I&#8217;d be interested in writing a blog post about SortFix.  (full disclosure: I have received nothing from SortFix other than their e-mail request).
SortFix is basically a value added search provider who wraps Google search results.  Their approach is [...]]]></description>
			<content:encoded><![CDATA[<p>I was recently contacted by <a href="http://www.sortfix.com">SortFix</a> who introduced their offering to me and thought maybe I&#8217;d be interested in writing a blog post about SortFix.  (full disclosure: I have received nothing from SortFix other than their e-mail request).</p>
<p><a href="http://www.sortfix.com">SortFix</a> is basically a value added search provider who wraps Google search results.  Their approach is to analyze other keywords which appear frequently in your search results.  You can then drag these other high frequency keywords to either the &#8220;Add to search&#8221; box, or the &#8220;Remove&#8221; box.  There&#8217;s also a &#8220;Dictionary&#8221; box which defines keywords you may not know.  </p>
<p>For example, if you search for &#8220;<a href="http://www.sortfix.com/search/go/gl/1?q=rs6">RS6</a>&#8220;, you&#8217;ll get &#8220;Power words&#8221; like &#8220;v10&#8243;, &#8220;performance&#8221;, &#8220;audi&#8221;, &#8220;carlos&#8221;, 2010&#8243;, &#8220;2003&#8243;, &#8220;juan&#8221;, etc&#8230;  By adding or removing those keywords, you can tune your search for either the 2003 edition of the RS6, or the new 2010 one, or you can check out the king of Spain, Juan Carlos&#8217;, ride.  </p>
<p>I can see this being useful for people who don&#8217;t have super good Google-Fu.  I don&#8217;t see myself using it, but I can see it being useful for many other folks.  Another point against it is that currently it&#8217;s a Flash based interface, and generally I avoid Flash as much as possible.  Apparently they are working on a non-Flash version, which would be a nice improvement IMHO.</p>
<p>I really like the idea the idea of offering up high frequency additional keywords to people who are searching for things to help them refine their search.  I can see this being very useful for onsite eCommerce searching, helping narrow down products based on common attributes, etc&#8230;</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/general/making-search-keywords-easy.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/making-search-keywords-easy.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ATG SEO &#8211; Tools and Traffic</title>
		<link>http://www.digitalsanctuary.com/tech-blog/debian/atg-seo-tools-and-traffic.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/debian/atg-seo-tools-and-traffic.html#comments</comments>
		<pubDate>Mon, 04 May 2009 13:52:04 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ATG]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=406</guid>
		<description><![CDATA[SEO Tools
Other than using lynx to test your site, there are several other tools I would recommend utilizing in your quest for better SEO.  One great tool is the SEO Analysis Tool from SEOWorkers.com.  This tool quickly analyzes the page, and provides excellent reports on the size and relevancy of your meta tags. [...]]]></description>
			<content:encoded><![CDATA[<h2>SEO Tools</h2>
<p>Other than using lynx to test your site, there are several other tools I would recommend utilizing in your quest for better SEO.  One great tool is the <a href="http://www.seoworkers.com/tools/analyzer.html">SEO Analysis Tool from SEOWorkers.com</a>.  This tool quickly analyzes the page, and provides excellent reports on the size and relevancy of your meta tags.  It also provides data on the frequency of keywords, singly and in groups of two and three.  Here is a part of the a report for <a href="https://www.sparkred.com">sparkred.com</a>:</p>
<p><a href="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/picture-12.png"><img src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/picture-12-550x440.png" alt="Google Webmaster Tools for SparkRed.com" title="Google Webmaster Tools for SparkRed.com" width="550" height="440" class="aligncenter size-medium wp-image-407" /></a></p>
<p>I&#8217;ve already mentioned utilizing Google Analytics to monitor what keywords are bringing you good traffic versus bad.  I&#8217;d also recommend another Google tool, <a href="https://www.google.com/webmasters/tools/">Google Webmaster Tools</a>.  Google provides a TON of useful data here.  You can see things like the crawl frequency, page response times during the crawl, and page rank of your pages (including a by month breakdown).  You can also use quick links to see related pages, pages which link in to your site, all the indexed pages of your site, and more.  It also gives you diagnostics into any problems with the crawl or your meta tags.  </p>
<h2>How to Promote Your Site</h2>
<p>In order to drive traffic to your site and to increase your ranking in search engines, such as your Google Page Rank, you want high quality links pointing to your site.  By high quality links I <strong>don&#8217;t</strong> mean spam links, link farms, or the like.  I mean links on relevant sites pointing your site, driving high quality traffic.</p>
<p>There are two halves to this.  The first is to provide really good quality content on your site.  This means having a great site, it means updating your site frequently, and it means providing non-core but helpful related content.  An example of that might be having a blog that provides related content.  For instance for MyShoeStore.com you might have a blog with posts about the latest fashions and how to match shoes to each look, the best sales you&#8217;re currently running, the 10 most extreme shoes of all time, photos of the shoes worn by celebrities that week, etc&#8230;  You want something that will have people returning to visit your site more frequently, and something that will make other people link to your site in their blogs, tweets, Facebook pages, IMs to friends, and so forth.  If you have a blog post about the shoes on the red carpet at the People&#8217;s Choice awards, people will link to that from tons of forums discussing fashion.  Those a great links!  Relevant high quality links bringing in high quality traffic.  And you just need a blogger.  A college fashionista who wants to get into fashion journalism will do it for cheap.</p>
<p>The second is to promote your site on other sites.  Find forums and communities that are filled with the people you want to attract to your site, signup, and contribute to the community conversation.  Note I didn&#8217;t say spam the community.  Post useful stuff.  Even stuff that links to sites that aren&#8217;t yours.  Be a real contributing helpful member of the site.  In your site profile, have a link to your site, and when it&#8217;s relevant feel free to link to your site, your latest sale, whatever, as long as it&#8217;s relevant.  Obviously if you&#8217;re an ATG developer or a VP of IT, it&#8217;s probably not you doing all this, but have someone do it.</p>
<p>Those two things are how you get traffic and a high page ranking in the search engines.  It&#8217;s all about having good content and being an upstanding citizen of the relevant online communities.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/debian/atg-seo-tools-and-traffic.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/debian/atg-seo-tools-and-traffic.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ATG SEO &#8211; URL Formats and Crawler Limits</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/atg-seo-url-formats-and-crawler-limits.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/atg-seo-url-formats-and-crawler-limits.html#comments</comments>
		<pubDate>Fri, 01 May 2009 15:05:27 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ATG]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=401</guid>
		<description><![CDATA[URL Formats and Structures
By making your URLs expressive and relevant to the content and structure of the site, you help not only your search engine ranking but also your users, since they can easily tell what a given link will take them to.
This is a bad URL:


http://myshoestore.com/app/cat/browse.jsp?id=245345&#38;cat=234523

This is a good URL:


http://myshoestore.com/shop/mens-shoes/fluevog/size-12

It is chock full of [...]]]></description>
			<content:encoded><![CDATA[<h2>URL Formats and Structures</h2>
<p>By making your URLs expressive and relevant to the content and structure of the site, you help not only your search engine ranking but also your users, since they can easily tell what a given link will take them to.</p>
<p>This is a bad URL:</p>
<pre class="brush: xml;">

http://myshoestore.com/app/cat/browse.jsp?id=245345&amp;cat=234523
</pre>
<p>This is a good URL:</p>
<pre class="brush: xml;">

http://myshoestore.com/shop/mens-shoes/fluevog/size-12
</pre>
<p>It is chock full of descriptive words. The page allows you to &#8220;shop&#8221; for &#8220;mens shoes&#8221;, more specifically &#8220;fluevogs&#8221; in &#8220;size 12&#8243;. This makes it much easier for search engines to know the purpose of the page and also for users to know what a link will take them to.</p>
<p>In order to accomplish this, you should name your directories and pages as accurately and descriptively as possible. You should also structure your site&#8217;s content and URLs in a logical hierarchical fashion.</p>
<p>Now your site may have a single actual JSP that handles displaying a category, and another one that handles displaying a product, any product. So you need to map the URL http://myshoestore.com/shop/mens-shoes/fluevog/size-12 to actually serve up the content from http://myshoestore.com/app/cat/browse.jsp?id=245345&#038;cat=234523.</p>
<p>Depending on your technology there are different ways to do this.</p>
<p>If you&#8217;re using JBoss Seam it&#8217;s very easy to use rewrite patterns in the pages.xml mapping file. This not only handles mapping the incoming requests for pretty URLs to the actual resources on the backend, but also handles generating the pretty URLs within the site automatically, which is a huge time saver.</p>
<p>If you&#8217;re using Apache you can use mod_rewrite to translate the pretty requested URLs to the ugly actual URLs. Of course in that case you need to ensure you&#8217;re generating the correct pretty URLs on the pages of your site.</p>
<p>If you&#8217;re using ATG you should read the chapter of the ATG Programmers Guide titled Search Engine Optimization (chapter 10 for ATG 2006.3). This covers the ATG support for URL Templates and the Jump Servlet. A few of the downsides to be aware of, are that it&#8217;s not super simple to set up, and that it only displays the pretty URLs to search engines, not to all users. I really prefer solutions that give users the benefits of readable URLs as well. The out of the box ATG system has too much of a performance impact to use for all situations.</p>
<p>We&#8217;ll be releasing a high performance open source solution for URL re-writing in ATG eCommerce applications as part of the <a href="https://developer.sparkred.com/confluence/display/ATGDC/Foundation">Open Source Foundation ATG eCommerce Framework</a> in the near future. </p>
<h2>Know Your Limits</h2>
<p>Search engine spiders, like the GoogleBot, have limits as to what they&#8217;ll parse and consider. For instance the GoogleBot will only read in the first ~101kb of your page&#8217;s HTML. Anything after that is ignored. So you need to ensure that your pages are smaller than 101kb. This is also a best practice with regards to performance: keep your HTML as small as possible.</p>
<p>Search engines will often display a small chunk of text with the search results, usually this is taken from the page&#8217;s description meta tag. Most will only show the first 160 characters of the description, so you want to be sure that your description content is less than 160 characters and makes sense for a human to read.</p>
<p>Many search engines will ignore, or penalize you, for having more than 100 links on a given page. Keep the number of links on a single page to a reasonable level. If your primary navigation must have more than 100 links, you can load in the second, third, etc&#8230; level navigation via AJAX/Javascript.. This will let your users have access to the full navigation structure from any page, but keeps things more reasonable for the search engine crawler. You&#8217;ll want to be sure that the crawler will be able to traverse through the complete site structure using the more limited navigational options it can see, the non-AJAX navigation.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/general/atg-seo-url-formats-and-crawler-limits.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/atg-seo-url-formats-and-crawler-limits.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ATG SEO &#8211; Accessibility and GoogleBot</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/atg-seo-accessibility-and-googlebot.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/atg-seo-accessibility-and-googlebot.html#comments</comments>
		<pubDate>Wed, 29 Apr 2009 16:10:52 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[ATG]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[GoogleBot]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=396</guid>
		<description><![CDATA[Semantic Tags
Use the right tags for the job.  For high importance headings use &#60;h1&#62;, for lists use &#60;li&#62;, and so on.  Don&#8217;t JUST use CSS classes for styling, make sure you&#8217;re also using the appropriate HTML markup for your content. By using semantic markup you can identify the importance and structure of the [...]]]></description>
			<content:encoded><![CDATA[<h2>Semantic Tags</h2>
<p>Use the right tags for the job.  For high importance headings use &lt;h1&gt;, for lists use &lt;li&gt;, and so on.  Don&#8217;t JUST use CSS classes for styling, make sure you&#8217;re also using the appropriate HTML markup for your content. By using semantic markup you can identify the importance and structure of the content and data on the page in a way that not only assists search engine crawlers, like GoogleBot, understand your content better, but also supports alternate browsers/web clients such as screen readers, other accessibility tools, and future applications.</p>
<h2>Accessibility</h2>
<p>By designing your site to be easily accessible to search engines, you also end up making it accessible to people with disabilities such as the blind or vision limited. Or you can look at it the other way: by designing your site to be accessible to people with disabilities and to be WAI or 508 compliant, you end up with an excellent site for search ranking.</p>
<p>It can often be hard to justify the cost and effort to make your site 508 compliant, even if it&#8217;s a legal requirement, however if you view it as a SEO effort, it&#8217;s much easier to assert a strong ROI on the project, and kill two birds with one stone.</p>
<p>You can read more about accessibility here:</p>
<ul>
<li><a href="http://www.afhill.com/blog/accessibility/" target="_new">Andrea Hill&#8217;s Blog</a></li>
<li><a href="http://www.w3.org/WAI/" target="_new">WAI Homepage</a></li>
<li><a href="http://en.wikipedia.org/wiki/Web_accessibility" target="_new">Web Accessibility entry on Wikipedia</a></li>
</ul>
<h2>Standards</h2>
<p>Be sure you&#8217;re following standards and best practices around your markup. This includes having nicely structured, valid, HTML/XHTML markup, and also being sure you have accurate helpful alt and title tags on your links, images, and other dom elements.</p>
<h2>See what GoogleBot sees</h2>
<p>First you have to be able to see the page the way GoogleBot sees it. The easiest way is to use a text based web browser like <a href="http://en.wikipedia.org/wiki/Links_(web_browser)">links</a> or <a href="http://en.wikipedia.org/wiki/Lynx_(web_browser)">lynx</a>.  GoogleBot is actually a customized version of lynx, and supposedly has been/is being improved to be able to cull some data out of Flash, and possibly even some Javascript driven content, however it&#8217;s best to assume that what lynx shows you is what GoogleBot sees. </p>
<p>You&#8217;ll want to design your page structure and dom tree to be logical in order, structure, and semantic. Here is a view of CNN.com in lynx:<br />
<div id="attachment_347" class="wp-caption aligncenter" style="width: 560px"><a href="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/picture-1.png"><img src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/picture-1-550x385.png" alt="The CNN.com homepage viewed using the lynx browser" title="Cnn.com under lynx" width="550" height="385" class="size-medium wp-image-347" /></a><p class="wp-caption-text">The CNN.com homepage viewed using the lynx browser</p></div></p>
<p>It&#8217;s extremely usable. You can see the main navigation first thing, and if you scroll down you see the main headline stories, latest news, etc&#8230; This is what you want your site to look like to GoogleBot.</p>
<p>In contrast, here is what a large theatre&#8217;s website looks like in lynx:?<br />
<a href="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/theatre.png"><img src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/theatre-550x465.png" alt="theatre" title="theatre" width="550" height="465" class="aligncenter size-medium wp-image-371" /></a></p>
<p>The primary navigation on the real site doesn&#8217;t even appear here. The images don&#8217;t have titles or alt tags, and the structure is lacking and confusing. This is NOT what you want your site to look like to GoogleBot.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/general/atg-seo-accessibility-and-googlebot.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/atg-seo-accessibility-and-googlebot.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ATG SEO &#8211; Search Engine Optimization</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/atg-search-engine-optimization-seo.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/atg-search-engine-optimization-seo.html#comments</comments>
		<pubDate>Mon, 27 Apr 2009 14:54:34 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[ATG]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=296</guid>
		<description><![CDATA[
No matter how good your website or web application is, if people can&#8217;t find it, then it doesn&#8217;t do anyone any good.
The Secret to SEO
So how do you game Google?  How do you trick search engines to put you at the top?
You don&#8217;t.
The &#8220;secret&#8221; to search engines is that they are built to return [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/3345754367_761b4f95a4jpg-150x150.jpg" alt="Search is Rocking" title="Search is Rocking" width="300" height="200" class="alignright size-full wp-image-367" /></p>
<p>No matter how good your website or web application is, if people can&#8217;t find it, then it doesn&#8217;t do anyone any good.</p>
<h2>The Secret to SEO</h2>
<p>So how do you game Google?  How do you trick search engines to put you at the top?</p>
<p><strong>You don&#8217;t.</strong></p>
<p>The &#8220;secret&#8221; to search engines is that they are built to return the most useful relevant results. All you have to do is to build your site in accordance with standards, common sense, and have it be helpful or useful. The upside to taking these elements into consideration is that not only will it help people find your site, but often it will improve the experience on the site as well.</p>
<p>I&#8217;m going to cover aspects of your site such as head tags, semantic tags, standards and accessibility, URL structures, limitations to be aware of, how to test what GoogleBot sees, tools to check your site with, and how to boost your Google ranking using means beyond just fixing up your site.</p>
<p>These pointers will apply to any website, but I will make some specific recommendations and provide some sample code for ATG sites, which are often not very SEO friendly, despite best intentions.</p>
<h2>Head Meta Tags &#8211; Title, Description, and Keywords</h2>
<p>The first important things that the search engine will see in your HTML are the tags in the head section of the HTML. There are three that we care about, Title, Description, and Keywords.</p>
<h4>Title</h4>
<p>The Title meta tag should uniquely identify the content of the page. Every page should have a different title, and the title should describe the content of the page accurately and succinctly. My preference is to put the site name after the unique portion of the title, like &#8220;Men&#8217;s Shoes &#8211; MyShoeStore.com&#8221; or &#8220;Men&#8217;s Fluevog Size 12 &#8211; MyShoeStore.com&#8221;. The content of the title should be relevant to the content on the page, words from the title should be found prominently within the page content.</p>
<p>When you&#8217;re using a template or including a shared header file, as is common in many dynamic sites, especially ATG sites, you need to pass in the unique title as a param.</p>
<p>Within your header page you use code like this:</p>
<pre class="brush: xml;">
&lt;title&gt;&lt;dsp:valueof param=&quot;title&quot;&gt;Shoes&lt;/dsp:valueof&gt; - MyShoeStore.com&lt;/title&gt;
</pre>
<p>And from within the calling page you pass in a title like this:</p>
<pre class="brush: xml;">
&lt;dsp:include page=&quot;fragments/page-header.jsp&quot;&gt;
     &lt;dsp:param name=&quot;title&quot; value=&quot;Contact Us&quot; /&gt;
&lt;/dsp:include&gt;
</pre>
<p>Or with catalog data, like this:</p>
<pre class="brush: xml;">
&lt;dsp:include page=&quot;fragments/page-header.jsp&quot;&gt;
     &lt;dsp:param name=&quot;title&quot; param=&quot;category.displayName&quot; /&gt;
&lt;/dsp:include&gt;
</pre>
<p>The other thing to keep in mind is that the Title is the default name of the bookmark if the user bookmarks the page. It needs to be clear, concise and helpful, and should make it easy for the user to find among their other bookmarks.</p>
<h4>Description</h4>
<p>The description meta tag should contain a longer description of the page content. It should be no longer than 160 characters, and should use terms that are highly relevant for the page content, and are repeated within the page.</p>
<p>For dynamic sites, including ATG, I recommend the same approach as above for the title tag.</p>
<h4>Keywords</h4>
<p>The keywords meta tag should contain close to eight keywords which best represent the content of the page, and terms that people might use to search for similar content. Those keywords should feature prominently within the page content itself.</p>
<p>For dynamic sites, including ATG, I recommend the same approach as above for the title tag.</p>
<h4>Tuning Your Head Tags</h4>
<p>It&#8217;s important to tune your description and keywords to get the right users to the right content. This is the great part: by using the best relevant terms, by providing helpful accurate terms and not trying to scam or spam traffic your way, you end up helping searchers to find what they are looking for, and you end up helping yourself to get more and higher quality traffic..</p>
<p>So in order to be more efficient, you need to figure out what people are searching for when they end up at your site. There are a couple ways to do this. The most basic is to use an analytics package, such as Google Analytics, and look at the keywords people are using that direct them to your site. Google Analytics makes this easy by also showing you the average time on the site, and number of pages visited by users divided by the keywords they searched for. This makes it easy to tell which keywords generate traffic of users who WANT to be on your site, and find it useful (and hence will come back, make purchases, etc&#8230;), and which keywords brought in the wrong people, people who were looking for something else.</p>
<p>Here is the Google Analytics keyword report for my site:?</p>
<p><a href="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/picture-11.png"><img src="http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2009/04/picture-11-550x187.png" alt="Google Analytics Keyword Report" title="Google Analytics Keyword Report" width="550" height="187" class="aligncenter size-medium wp-image-361" /></a></p>
<p>You can see that people who come to my site when they&#8217;re searching for &#8220;create web service seam&#8221; only look at the first page they see, and have 100% bounce rate. That means one of two things: A) this group of people was really looking for something else and my site didn&#8217;t help (in which case I should probably change my keywords and content so they don&#8217;t waste their time on my site) or B) the first page answered all of their questions. In this case the page on my site is probably pretty helpful for people searching for those words, so I&#8217;m going to keep the keywords, but you understand the point.</p>
<p>These types of reports should allow you to tune your keywords to get the best quality traffic and the happiest users.</p>
<p>To be more advanced you can track the keywords that didn&#8217;t just lead people to your site, but led people who made purchases/other goals to your site. You can do this with Google Analytics by setting up Goals, or with other analytics packages.</p>
<p><strong>There will be three more posts on SEO coming in the next few days!</strong></p>
<p>&#8212;&#8212;&#8212;<br />
<a href="http://www.digitalsanctuary.com/tech-blog/general/atg-seo-accessibility-and-googlebot.html">ATG SEO – Accessibility and GoogleBot</a></p>
<p><a href="http://www.digitalsanctuary.com/tech-blog/general/atg-seo-url-formats-and-crawler-limits.html">ATG SEO – URL Formats and Crawler Limits</a></p>
<p><a href="http://www.digitalsanctuary.com/tech-blog/debian/atg-seo-tools-and-traffic.html">ATG SEO – Tools and Traffic</a></p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/general/atg-search-engine-optimization-seo.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/atg-search-engine-optimization-seo.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>JBoss jsessionid Query Parameter Removal</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/jboss-jsessionid-parameter-remove.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/jboss-jsessionid-parameter-remove.html#comments</comments>
		<pubDate>Tue, 20 May 2008 23:33:48 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[jsessionid]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[tomcat]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/?p=109</guid>
		<description><![CDATA[Instead of just using the Apache mod_rewrite rules from my post on &#8220;Hiding jsessionid parameters from Google&#8220;, which uses redirects, wouldn&#8217;t it be better to simply not output the jsessionid parameter into the URLs?
First, what are those jsessionid params, and why are they there?  
For a web application to have state, i.e. remember things [...]]]></description>
			<content:encoded><![CDATA[<p>Instead of just using the Apache mod_rewrite rules from my post on &#8220;<a href="http://www.digitalsanctuary.com/tech-blog/general/hiding-jsessionid-parameter-from-google.html" target="_new">Hiding jsessionid parameters from Google</a>&#8220;, which uses redirects, wouldn&#8217;t it be better to simply not output the jsessionid parameter into the URLs?</p>
<p>First, what are those jsessionid params, and why are they there?  </p>
<p>For a web application to have state, i.e. remember things from one page request to the next (such as that you&#8217;re logged in, who you are, what is in your shopping cart, etc&#8230;), most web applications have something called a session.  The session starts when you hit the website at first, sticks with you while you are on the site, and expires after you have either logged out or have been idle (i.e. not clicked on anything) for a set period of time (perhaps 30 minutes).</p>
<p>In general the actual session data is held on the server, things like your shopping cart, your user profile, all of that.  However, in order to associate requests from your web browser with the correct session, your browser needs to pass something for the web application to recognize which session is yours.  This is traditionally done in two ways:  </p>
<p>firstly and primarily using a session-life browser cookie (or two) which hold a session identifier and optionally some additional security token(s).  The browser receives this cookie from the web application, and then sends the cookie back to the web application with each page request.  The web application looks at the cookie, and figures out which session is yours, and handles your page request appropriately.</p>
<p>secondly, and usually only as a fall-back for browsers which do not support cookies or whose cookie support has been turned off, is to rewrite every link in the web application which points to another page in the same web application with a special session id added to the URI of the link.  This is usually done as a path parameter (following a &#8216;;&#8217;), but sometimes is also done as a query parameter (following a &#8216;?&#8217;).  </p>
<p>Since on the first request to a web application, the browser is not sending a session cookie, the web application has no way of knowing if the browser actually supports cookies or not.  So for the first page, the web application will usually send back the session cookie AND rewrite all of the links on the page with the jsessionid just in case the cookie is not returned.</p>
<p>So what&#8217;s the problem?</p>
<p>Search engine spiders, like Google&#8217;s GoogleBot, usually do not support cookies.  This means that they see the site with the jsessionid parameter in every link and every requested URL.  So this leads to three related problems.  First, the links that show up in a Google search include an ugly &#8216;jsessionid=xxxxxx&#8217; which looks ugly.  Second, Google doesn&#8217;t recognize that the jsessionid parameter doesn&#8217;t change the page content, and as such each time the GoogleBot hits the site, and gets a different jsessionid, it indexes all of the pages again.  This leads to getting multiple result listings for the same page in search results.  For instance you might see the same page listed 7 times in a row.  Third, by having multiple instances of the same page with the same content, the Google PageRank of the actual page is severely diluted and perhaps even penalized due to the multiple presentations.</p>
<p>Because of these problems, we do not want the GoogleBot to see the jsessionid URI parameters.  </p>
<p>In my earlier post, linked to above, I used Apache mod_rewrite to look for requests from GoogleBot, and send a redirect back to GoogleBot, redirecting it to the same URI it had initially requested, just stripped of the jsessionid parameter.</p>
<p>This time I&#8217;m going to use a Servlet Filter to prevent the jsessionid parameter from being inserted into the URL links on the page for GoogleBot requests.  This is more elegant since there are no redirects.</p>
<p>First, I want to link to the web page which provided the starting point for the solution I used:  <a href="http://randomcoder.com/articles/jsessionid-considered-harmful" target="_new">JSESSIONID considered harmful</a></p>
<p>I took that approach and modified the filter code to only do this for GoogleBot requests, which will allow users who don&#8217;t support or allow cookies to still use the site.</p>
<p>I have one Java class: <a href='http://www.digitalsanctuary.com/tech-blog/wp-content/uploads/2008/05/disableurlsessionfilter1.java' target="_new">DisableUrlSessionFilter.java</a></p>
<pre class="brush: java;">
package com.digitalsanctuary.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

/**
 * Servlet filter which disables URL-encoded session identifiers.
 *
 *
 * Copyright (c) 2006, Craig Condit. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * * Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &amp;quot;AS IS&amp;quot;
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * Modified by Devon Hillard (devon@digitalsanctuary.com) to only filter for GoogleBot,
 * not for users without cookies enabled.
 *
 */
@SuppressWarnings(&quot;deprecation&quot;)
public class DisableUrlSessionFilter implements Filter {

    /**
     * The string to look for in the User-Agent header to identify the GoogleBot.
     */
    private static final String GOOGLEBOT_AGENT_STRING = &quot;googlebot&quot;;

    /**
     * The request header with the User-Agent information in it.
     */
    private static final String USER_AGENT_HEADER_NAME = &quot;User-Agent&quot;;

    /**
     * Filters requests to disable URL-based session identifiers.
     *
     * @param pRequest
     *                the request
     * @param pResponse
     *                the response
     * @param pChain
     *                the chain
     *
     * @throws IOException
     *                 Signals that an I/O exception has occurred.
     * @throws ServletException
     *                 the servlet exception
     */
    public void doFilter(final ServletRequest pRequest, final ServletResponse pResponse, final FilterChain pChain)
	    throws IOException, ServletException {
	// skip non-http requests
	if (!(pRequest instanceof HttpServletRequest)) {
	    pChain.doFilter(pRequest, pResponse);
	    return;
	}

	HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
	HttpServletResponse httpResponse = (HttpServletResponse) pResponse;

	boolean isGoogleBot = false;

	if (httpRequest != null) {
	    String userAgent = httpRequest.getHeader(USER_AGENT_HEADER_NAME);
	    if (StringUtils.isNotBlank(userAgent)) {
		if (userAgent.toLowerCase().indexOf(GOOGLEBOT_AGENT_STRING) &gt; -1) {
		    isGoogleBot = true;
		}
	    }
	}

	if (isGoogleBot) {
	    // wrap response to remove URL encoding
	    HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(httpResponse) {
		@Override
		public String encodeRedirectUrl(final String url) {
		    return url;
		}

		@Override
		public String encodeRedirectURL(final String url) {
		    return url;
		}

		@Override
		public String encodeUrl(final String url) {
		    return url;
		}

		@Override
		public String encodeURL(final String url) {
		    return url;
		}
	    };

	    // process next request in chain
	    pChain.doFilter(pRequest, wrappedResponse);
	} else {
	    pChain.doFilter(pRequest, pResponse);
	}
    }

    /**
     * Unused.
     *
     * @param pConfig
     *                the config
     *
     * @throws ServletException
     *                 the servlet exception
     */
    public void init(final FilterConfig pConfig) throws ServletException {
    }

    /**
     * Unused.
     */
    public void destroy() {
    }
}
</pre>
<p>and the servlet filter configuration in my web.xml file:</p>
<pre class="brush: xml;">
	&lt;filter&gt;
		&lt;filter-name&gt;DisableUrlSessionFilter&lt;/filter-name&gt;
		&lt;filter-class&gt;
			com.digitalsantuary.util.DisableUrlSessionFilter
		&lt;/filter-class&gt;
	&lt;/filter&gt;

....

	&lt;filter-mapping&gt;
		&lt;filter-name&gt;DisableUrlSessionFilter&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;
</pre>
<p>So far, it seems to be working beautifully.  It only impacts the GoogleBot, and it successfully strips the jsessionid parameter from the links on the site.</p>
<p>Enjoy!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/general/jboss-jsessionid-parameter-remove.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/jboss-jsessionid-parameter-remove.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Search Engine Optimization</title>
		<link>http://www.digitalsanctuary.com/tech-blog/general/search-engine-optimization.html</link>
		<comments>http://www.digitalsanctuary.com/tech-blog/general/search-engine-optimization.html#comments</comments>
		<pubDate>Fri, 01 Feb 2008 08:21:40 +0000</pubDate>
		<dc:creator>Devon</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.digitalsanctuary.com/tech-blog/general/search-engine-optimization.html</guid>
		<description><![CDATA[Optimizing sites for Google rankings isn&#8217;t a focus of mine, but is an inevitable factor that must be addressed when building any site.  I&#8217;m no SEO expert, then again, neither are half of those who claim to be.
The best thing you can do is to have your site be real, be useful, be focused [...]]]></description>
			<content:encoded><![CDATA[<p>Optimizing sites for Google rankings isn&#8217;t a focus of mine, but is an inevitable factor that must be addressed when building any site.  I&#8217;m no SEO expert, then again, neither are half of those who claim to be.</p>
<p>The best thing you can do is to have your site be real, be useful, be focused on a specific topic or niche, and make sure links to it show up on other relevant sites.</p>
<p>A simple way to get those links is to make your site&#8217;s URL part of your signature, and post HELPFUL posts on relevant forums, blogs, etc&#8230;  Be engaged in other communities who serve a demographic similar to your site&#8217;s ideal demographic.  Become a contributing and trusted member.  Your posts will drive the best type of traffic to your site.</p>
<p>As someone who uses Google to find content 1,000 times more than I use Google to get traffic to my site, I am firmly against gaming the system, link farming, spam, google bombs, or anything that drives down the signal-to-noise of search results.  But there are steps you should take to ensure your site shows up as good signal where it should.</p>
<p>1. Provide free information.  Even if you&#8217;re an e-commerce site, provide free product information, reviews, specifications, research, forums, etc&#8230;  People tend to research online before they buy.  If they do their research at your site, they&#8217;re more likely to buy from you because by providing helpful, ideally unbiased, information free of charge, your site will be more trusted.  You will also end up with more external sites linking to your helpful free information, than would have linked to your Buy Me Now page.  Useful information is valuable, and is referenced far more often than a commerce only page.</p>
<p>2. Ensure the information is visible to the Search Engines.  Content in images, Flash, Ajax loaded data, sometimes iframes, etc&#8230;  is not visible to search engines.  If you must present information that way, ensure the same information is available via plain html.  You can use javascript to load Flash over html for instance.  Test your site using a text-based web browsers such as lynx or links.  Make sure your site is structured well, has all your content available, and &#8220;works&#8221;.  </p>
<p>3. The Title tag:  should be the first tag within the head tag.  Should be about 9 words.  Keywords should be toward the beginning.  Do not repeat words.  It should be readable to a person and make sense.  It should be unique for each page.</p>
<p>4. The Description tag: should be the second tag within the head tag.  Should be about 16-20 words.  It should be made up of complete sentences, with keywords toward the beginning.  It should be readable to a person and make sense.  It should be unique for each page.</p>
<p>5. The Keywords tag: should be the third tag within the head tag.  Should be 30-50 words (assuming they&#8217;re all relevant).  Should be in short phrase form, separated by commas.  Capitalize all words.  It should be unique for each page.</p>
<p>6. Heading content (<h#> tags): should contain keyword phrases, but should not repeat identical phrases.  Should be 2-4 words.  Should structure your document just like an outline for a paper or presentation.</p>
<p>7. Image alt tags:  every image should have an alt tag.  The alt tag should be no more than 12 words long.  It must be descriptive to a person and describe the image or it&#8217;s purpose in the page clearly.  Again, test with a text-based web browser to see the alt tags in context.</p>
<p>8. Links: use keywords in the URL (more on this later).  The link text should contain keywords.  The surrounding text should also be keyword rich, using keywords which are relevant for the target page.  </p>
<p>9. Main Content: Minimum of 300 words.  Make the first 150-200 words keyword rich.  Think of it like an executive summary.  Words used in your title, description, and keyword head tags should appear at least twice each within the main text.  CSS and JS should be externalized so as to not obscure the focus on the text.</p>
<p>10. URLs should be made up of useful words, separated by hyphens.  Bad: &#8220;blog2&#8243; Good: &#8220;tech-blog&#8221;.  Bad: &#8220;/prod.jsp?id=1342342&#8243; Good: &#8220;/mp3-players/apple/ipod/ipod-nano.jsp&#8221;.  Many blogging tools and e-commerce tools will create category based faux directory structures for your pages.</p>
<p>Try to keep these guidelines in mind while building your site and templates.  In general most of these tips not only help search engines understand your site best, but also help with accessibility, graceful degradation of browsers, and general readability for your users.</p>
<p>I&#8217;d welcome any other tips in the comments.  Or any ideas around specific products (ATG, Seam, etc&#8230;).</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.digitalsanctuary.com/tech-blog/general/search-engine-optimization.html" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.digitalsanctuary.com/tech-blog/general/search-engine-optimization.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
