I have always been of the opinion that the platform/framework that the site is built in, has no relevance to the performance of its SEO. However, having seen various performance issue on a couple of sites in the past (particularly against WordPress), I decided to to some research into what other platforms do to make them so SEO friendly and return quicker results in search engines with an aim to translate these into an ExpressionEngine guide.

I will preface this article with a disclaimer. A lot of these points are not *specific* to ExpressionEngine, but I find that a lot of projects that we've been brought in on late in project cycle, lack a lot of the SEO basics. In recent times, we're getting asked more and more to help clients with optimising the site for their search engine presence and whilst we're not SEO professionals, we've been able to help with the basics and can advise and make recommendations if a site needs more 'professional' help.

We've also recently added a clause into our standard terms called the 'Field of Dreams' clause - a reference to a mediocre 1989 Kevin Costner film, which had the strap line 'If you build it, he will come'. (http://www.imdb.com/title/tt0097351/). The fact that you *have* a website is not qualification in itself that people will necessarily come and visit. 

This is certainly not exhaustive - I'd love to hear other SEO-related techniques that people employ to improve their visibility with search engines.

Google Sitemap

Having a google site map is a great way to tell Google about your content and to get the site indexed quicker.

If you use something like Taxonomy or Structure, I recommend http://devot-ee.com/add-ons/google-sitemap-lite which will automatically create Google Site Map XML for your. However, if you don't - this solution will work just as well, to do it manually:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{exp:channel:entries channel="channel1|channel2|channel3|channel4" dynamic="no" disable=""}
<url>
<loc>{page_uri}</loc>
<lastmod>{edit_date format="%Y-%m-%d"}</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
{/exp:channel:entries}
</urlset>

Automatic Ping

Wordpress, by default seems to automatically ping a variety of websites to notify them of new content or edited content. This 'Ping' not only notifies them of the content, but invites the search engines to spider the site to see if there's anything else for it to index.

Sites like http://pingomatic.com/ are good - however, you can also leverage the functionality of ExpressionEngine 'Pings' to automatically send notifications to various services. I have created a simple csv import script to insert a fairly comprehensive list of ping XML RPC (Remote procedure calls) directly into your ExpressionEngine installation (works as of ExpressionEngine 2.5.2). If anyone has any more comprehensive list, please send them to me and I will update this script.

Download ping .csv

Accurate META data (descriptions/keywords)

Create a unique Title Tags, Meta Descriptions, and Meta Keywords for all posts & pages of site to ensure that your pages are indexed accurately.

Using an add-on such as http://devot-ee.com/add-ons/seolite  and (http://ee-garage.com/nsm-better-meta) are great since they allow you to define individual SEO tags on a per entry basis whilst also providing you with 'defaults' for pages that are not associated with individual entries.

Generate 'Related' post content

Important metrics like bounce rate, time on site, page views per visit etc can be improved this metrics by adding related post information particularly using a tag cloud or associative structure. Showing related posts in your RSS feeds too can increase your SEO friendliness.

Use add-ons such as Tagger (http://devot-ee.com/add-ons/tagger) or Solspace Tag (http://devot-ee.com/add-ons/tag) to tag your content with specific keywords and then output 'related' content with entries that share the tags. Alternatively, simply associate content with related entries or by using Pixel and Tonic Playa (www.pixelandtonic.com/playa/).

Use Google Authors Tag to improve site visibility

Google is piloting the display of author information in search results to help users discover great content. Site posts/content/blogs should have an associative 'author'. This will significantly improve your SEO visibility. Link your entries with 'authors' by simply registering your content authors with Google+ and linking their entries with their G+ account. This is simply done by adding a link on the article page such as

<a href="https://plus.google.com/109412257237874861202?rel=author">Google</a>

Image Compression / Site Speed

Using Yahoo's excellent image optimisation system 'smush.it' - you can provide severely lossless ways to compress and optimises your JPG images. You can also look at the great add-on CE Lossless (http://devot-ee.com/add-ons/ce-lossless) from causing effect which provides great compression utilities.

Broken Link Checker

Broken links on a site detrimentally affect the sites SEO quality, therefore, having your site checked with a broken link checker will ensure that you rectify broken links as quickly as possible to maintain quality of the site.

Take a look at http://www.brokenlinkcheck.com and run regular site link checks and fix them as quickly as possible.

.htaccess tweaks

Caching certain files will not only help your site speed, but also aid your SEO quality longer term. Caching JS and CSS files is a relatively straightforward job and will contribute to your overall SEO quality.

Setting your .htaccess file to redirect from non www. traffic to www. or vice versa will also help keep consistent URL's (site.com/group/template/ versus www.site.com/group/template). This will avoid duplicate content in google, avoid the possibility of split page ranking and or split page link popularity and ensures consistency.

ExpiresActive On
ExpiresDefault "access plus 4 hours"
ExpiresByType application/javascript A900
ExpiresByType application/x-javascript A900
ExpiresByType text/javascript A900
ExpiresByType text/xml A90
ExpiresByType text/css A900
ExpiresByType text/plain A62
ExpiresByType image/gif A14400
ExpiresByType image/jpg A14400
ExpiresByType image/jpeg A14400
ExpiresByType image/png A14400
ExpiresByType image/bmp A14400
ExpiresByType application/x-shockwave-flash A3600

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]


Keep track of old or invalid URLs

Register your site with google webmaster tools (https://www.google.com/webmasters/tools/home?hl=en) and keep track of URL errors. If they look like they should be directed somewhere, use the .htaccess or a plugin to handle redirects.

Using an add-on such as Detour Pro (http://devot-ee.com/add-ons/detour-pro) is a great add-on if you're not comfortable working with the .htaccess, which doesn't use handles redirection using built in hooks for ExpressionEngine to manage redirects.

Keep your URL structure clean

Rather than relying on ExpressionEngines site.com/post/c10/entry_url_title, use add-ons such as Low seg2cat (http://gotolow.com/addons/low-seg2cat) to rewrite them as site.com/post/nice-category/entry_url_title. Try to keep your site URL structures as clean as possible. Use embed/stash techniques to keep segments to a minimum.