ExressionEngine Search Engine Optimization

Optimising your Expression Engine website is fundamental to help our site performance especially to improve the speed and not slow down the performance of the hosting server.. Some tips to dramatically speed up your Expression Engine site. Following some of the simple steps below should result in a big improvement in your EE website performance. But let us first look at how and why EE is loved for SEO.

Read More EE Resources:

Getting Started with Expression Engine

How to secure your ExpressionEngine Website

What are the Things You Can Do With ExpressionEngine?

How ExpressionEngine Handles SEO

For any CMS to be seen to be good for SEO, it should have some features and handle some ranking factors in a professional way. It should handle SEO in the following ways:

  • Completely automate
  • Allow the developer to configure
  • Let the end-user manage

We went through the list of raning factors and pulled out the ranking factors we think a CMS has its fingers in. Here's that list and how the ExpressionEngine CMS from EllisLab would handle them:

Read More Resources:

Getting Started with Expression Engine

How to secure your ExpressionEngine Website

What are the Things You Can Do With ExpressionEngine?

Keyword in Title Tag

ExpressionEngine has a default Title field in every channel. However, we prefer to create a dedicated channel field to populate the HTML Title tag (this lets the Channel Entry Title be different from what appears in the browser Title).

Either way, the title variable can be sent to a shared/centralized template that creates the HTML Title tag for every page on your website. This approach keeps the site's code DRY while making Google happy with unique META for every page.

Keyword in Description Tag

There's no default field for META Description in ExpressionEngine, but you can either take advantage of EE's channel fields and create a field for each Channel, or use a third party add-on like SEO Lite.

We prefer to keep our EE installs as close to "out of the box" as possible so stick with creating Channel Fields for the META Description value. You can set this field to be required so content managers don't leave it blank.

Read More::

Getting Started with Expression Engine

How to secure your ExpressionEngine Website

What are the Things You Can Do With ExpressionEngine?

Duplicate Meta Information On-Site

When it comes to SEO, shortcuts are usually a dangerous path. It would be easy to use an add-on or put some code in ExpressionEngine templates that would check META Descriptions and drop in default text if the fields were left empty.

In this case, an empty value would be better than a default because then Google would find duplicate instances of the default value in your website and possibly penalize you for it.

Keyword Appears in H1 Tag

This is simple to do in ExpressionEngine. EE doesn't dictate your HTML structure so setting the H1 tag is as simple as: <h1>{title}<h1>

As long as the content manager puts the desired keyword in the Entry Title, it will appear marked up as an H1 on the website.

Read More Resources:

Getting Started with Expression Engine

How to secure your ExpressionEngine Website

What are the Things You Can Do With ExpressionEngine?

Keyword in H2, H3 Tags

While H1 tags are usually set automatically in an ExpressionEngine template, the lower-level heading tags can be handled in different ways.

Depending on the site design and how it's been coded, we can either set these programmatically by feeding other Channel Fields into them, or let the content manager create them using a WYSIWYG editor.

Keyword in URL

ExpressionEngine creates a URL title for you based on the Title you enter for each Entry - so if the keyword is in the Entry Title it will also be in the URL title. ExpressionEngine also allows content managers to over-write the default URL title so any combination or ordering of keywords can be manually specified.

URL Length

ExpressionEngine's default URL titles will often be longer than the 3-4 word recommendation from the SEO world, but again - since EE lets you overwrite the defaults your URL titles can be as short as you like.

URL String

When viewing categorized content the SEO world recommends category keywords in URL. ExpressionEngine offers this option natively when using Categories.

Read More EE Resources:

Getting Started with Expression Engine

How to secure your ExpressionEngine Website

What are the Things You Can Do With ExpressionEngine?

URL Path

The SEO world says a page with a fewer segments (closer to the base URL) may get a slight boost. ExpressionEngine sites used to suffer in this regard so you may find (or have) some lingering resistance in this area. Depending on what content you are pulling, EE's default URLs are created based on a combination of:

  • Template Group name
  • Template name
  • Category name
  • Pagination state
  • Date indicators
  • Entry URL title

This can lead to longer than desired URLs. However, ExpressionEngine 2.8 introduced Template Routes that allow the developer to shorten the URL structure.

Page Loading Speed via HTML

The speed a page loads into a web browser depends on a number of factors not having anything to do with the CMS - how fast your host is, how optimized their database is, etc.

But still, there are a couple of things to look at within the CMS.

ExpressionEngine is incredibly flexible for developers - there are often half a dozen ways to implement a given feature. With that flexibility comes opportunity for inefficient code.

Most of the slow EE sites we've run across are slow because they were poorly implemented, not because ExpressionEngine itself is inherently slow. If a given template is loading slowly, developers can:

There should be no reason pages on a well-designed and well-implemented ExpressionEngine-based website running on a quality host should take any longer than 2 seconds to load.

Read More EE Resources:

Getting Started with Expression Engine

How to secure your ExpressionEngine Website

What are the Things You Can Do With ExpressionEngine?

Duplicate Content

We think more people worry about this one than they need to. The reality with ExpressionEngine is you will have content that appears at multiple URLs. This usually happens with blogs where a post will appear at the blog index URL, a paginated URL, a category URL, and its specific URL, etc.

This isn't a new issue, nor is it unique to ExpressionEngine. We're confident Google is smart enough to not penalize sites in this situation.


Content with images tends to rank higher and using an image opens up some additional opportunities for SEO optimization. Image file names, alt text, titles and descriptions can all be tweaked for better results.

While possible using native features, it's not the most efficient. This is a case where we will install a 3rd party module to help out - namely DevDemon's Channel Images.

Channel Images makes it easy for content managers to bulk upload images, change file names, add alt text, titles and descriptions right in the ExpressionEngine entry form.

Recency, Frequency and History of Content Updates

Theoretically any CMS should allow content managers to actually maintain content. But different systems have different efficiencies.

The way ExpressionEngine thinks about content (as structured content types) usually means EE can offer a more efficient editing process. Content is stored centrally and presented in different places on the site - but one update in the EE Control Panel will change it everywhere on the website.

Content Editors don't have to know or manage HTML to make updates.

Bullets and Numbered Lists

People scan more than read on the web - and Google knows this. Content using lists will generally rank better than content without. ExpressionEngine enables content managers to add bulleted or numbered lists using the native Rich Text Editor.

Link Anchor Text & Title Text

In an ExpressionEngine site there are two types of links: links that EE creates dynamically at the template level and links that are created by content managers within a block of text.

Dynamic links have the anchor and title text set by the developer (and any content from a Channel field can be used). ExpressionEngine's Rich Text Editor provides an interface for content managers to create links, then specify the link anchor text and link title text.

Schema.org Microformats

Between ExpressionEngine's flexibility with Channel Fields and its "hands-off" approach with front-end code, Microformats are easily doable in ExpressionEngine.

Mobile Optimized

Google's recent decision to start penalizing sites that didn't have a mobile friendly design made a lot of waves in the business community (and generated a lot of business for web development shops).

ExpressionEngine has never dictated front-end code. EE can spit out an old-school table-based layout with spacer pixels, specific desktop and mobile sites, or a completely responsive design.

User Friendly Layout / Site Usability

These ranking factors are more on your designer than your CMS - but ExpressionEngine can dynamically power any design your creative types can throw at it. Any change you need to make to help your site be friendlier or more usable can be accomodated by ExpressionEngine.

Breadcrumb Navigation

With ExpressionEngine you can either create breadcrumb navigation with custom code at the template level, or use any of a number of third party breadcrumb add-ons.

Site Architecture

ExpressionEngine has the flexibility to render a site architecture in any number of ways. While content gets "normalized" and stored in discreet channels (one channel for each type of content is usually best), the site's front-end architecture is established using ExpressionEngine's:

  • Template Groups
  • Templates
  • Template Routes
  • Categories
  • Relationships
  • Pages Module

Using a carefully planned combination of these EE features will usually allow a developer to create any site architecture desired. If not, there are some 3rd party solutions to consider as well.

HTML Errors/W3C Validation

A website that renders out to the browser with code that validates according to W3C standards is the goal of any web developer worth their salt.

We've said it already, but ExpressionEngine leaves the front-end code almost entirely in the hands of the implementing developer. Very few EE tags return HTML (and the ones that return HTML by default can often be configured to not return it).

# of Linking Pages

The number of linking pages - even within the same site - is a ranking factor. This is usually where ExpressionEngine developers reach out for the Relationships Field.

By implementing Relationships you can:

  • Give content managers a list of articles to select as "related" to the current one.
  • Have EE build those links dynamically on the rendered web page.
  • Also display a link back to the "parent entry" from the "child entry".

You can also use Categories and simply display other articles that belong to the same Category.

Number of Pages

In general - the bigger the site the more likely it is that the pages will be found in Google search results. A well-built ExpressionEngine site will allow content managers to easily add pages by just creating new entries in the right Channels. EE will dynamically update all necessary navigation and links.

Number of Comments

The value of blog comments has come into question over the recent years. The SEO value of them may be the best reason to keep comments turned on. Google sees an active commenting section as an indicator of a healthy site providing quality content.

ExpressionEngine grew out of the blogging market so comments are baked into the core. Every Channel, regardless of the type of content it holds, can accept and display comments from visitors.

Using comments opens the door to SPAM, but we have a good arsenal of add-ons that we install to prevent that from happening.

Presence of Sitemap

Submitting an XML Sitemap to Google is a great way to both speed up and improve your search rankings.

Presence of RSS Feed

An RSS feed is another way that Google can learn of and index new content on an ExpressionEngine-based website. Again, ExpressionEngine has a blogging heritage so comes with an RSS Module that you can install and use to create an RSS feed on your site.

Quick Step Guide to Implement SEO on ExpressionEngine

1 Turn off tracking
Admin > Security & Privacy > Tracking Preferences

2 Enable Gzip
Go to Admin > Output and Debugging Preferences. From here for the option: "Enable GZIP Output" - make sure that this is set to yes.

3 Cache Channel Queries
Go to Admin - Channel Administration > Global Preferences and set this option to yes. Pease note that you can only use this if you do not use future entries or expiring entries on your site.

4 Get rid of unused addons
Go to Add-Ons > Modules and uninstall/remove any unused add-ons

5 Take it easy on calls and embeds
For all templates, keep entry calls and embeds to a minimum. Variable and snippets may be the better option to reduce the page load.

6 Channel Entries
For all channel entries, make sure you disable what you are not using and set the cache the call. See the example below.

disable="categories|category_fields|member_data|pagination|trackbacks" cache="yes" refresh="30"

7 Optimise. Optimise. Optimise
Optimise all media content on the site. Ensure all imagery and video is optimised. Use the developer tools plugin to review the total page size. CE image is an excellent tool for resizing images as needed within a template. In addition to resizing on the fly, it has many image manipulation features.

8 Cache
Turn on template caching. From the EE admin panel, go to Design > Templates > Template Manager. From here select the “Edit Preferences” option for your selected template and set the caching to "Yes" along with the required time.

Other that EE’s inbuilt caching, you could also use a plugin such as CE Cache.

Leverage your browser caching too via htaccess - setting an expiry date for static resources will ensure previously downloaded resources will be sourced from local disk rather than over the network.

9 Minify
Minifying both both your CSS and JS code can save many bytes of data and speed up downloading, parsing, and execution time. For JS that is called on all pages, look to combine it into one file to reduce the number of server requests.

10 Compression
Enable compression on your server. This can be done via htaccess and can result in a reduction is file size by over 80%.

  • 0 Users Found This Useful
Was this answer helpful?

Related Articles

How to secure your ExpressionEngine Website

Website security is extremely important. It should be taken very seriously as it will to a large...

Getting Started with Expression Engine

When it comes to the web, ExpressionEngine is preferred by companies of all sizes for 5 major...

What are the Things You Can Do With ExpressionEngine?

ExpressionEngine (EE) is a commercial, modular CMS developed by EllisLab. It is available in both...

Tips for optimizing ExpressionEngine website for better performance

If you are familiar with ExpressionEngine for the design of your website, its important to have...

How to Use ImageSizer to Scale Lightbox Gallery Images in ExpressionEngine

The ImageSizer plugin from Lumis is a fantastic plugin and you will get to find that out very...