SEO Lite – The one calorie SEO addon for ExpressionEngine 2.x

A while back I released DevKit for ExpressionEngine using the module “SEO Lite” as an example. Now this module is ready for download!

Click here to download SEO Lite

Full documentation: SEO Lite documentation

A SEO module for ExpressionEngine – what does it do?

Sure you could add custom fields for this kind of meta data, but SEO Lite makes it cleaner and easier to use for the client.

SEO Lite is a lightweight addon for ExpressionEngine that adds SEO meta data for title, keywords and description for entries on your site, enabling them to rank better in the search engines. It uses a template which you can customize to your needs.

It will add a new tab to the publish entry page called “SEO Lite” where you specify title, keywords, and description for the entry.

If you do not specify anything the original entry title will be used, together with the default values for keywords and description.

Why Lite?

First, it’s very lightweight – you only use one tag to output the template, and this tag uses only one database query to fetch the template, entry title, default entry keywords/description or/and the specific keywords/descriptions for that entry.

So you add the power of SEO optimalization with only one query which should be a good tradeoff and perfect for high-traffic websites.

Second, it’s lite functionality-wise as well. No frills. If you want a more extensive module I recommend NSM Better Meta which is a very good commercial alternative.

The template

The default meta data template looks like this:

<title>{title} - {site_name}</title>
<meta name='keywords' content='{meta_keywords}' />
<meta name='description' content='{meta_description}' />
<!-- generated by seo_lite --!>

This can be edited in the SEO Lite Settings. The only thing that’s replaced by SEO Lite is {title}, {meta_keywords} and {meta_description} and you can use any kind of global variables and EE conditionals in it which should make it pretty powerful.

The Tag

Use this tag in your header template to output the template above:

{exp:seo_lite url_title="{segment_3}"}

The url_title parameter uses {segment_3} to find the entry based on the current url. If you have the entry_id you may also use it like this:

{exp:seo_lite entry_id="{entry_id}"}

Installing the module in a WooTheme

Here’s a video showing how to install the module and use it with any of the WooThemes:

Of course this process will be the almost identical on any site.

ScribeSEO Support In The Works

I’m currently implementing support for ScribeSEO. To get an update when this is ready subscribe to my RSS feed or follow me on Twitter.


Download .zip

Documentation, support, download etc. available over at

Let me know what you think! :-)

  1. Hi Bjorn: can more than {title} – {site_name} be used to populate the tag? I’d like to be able to pull a section heading in as well. So something like:

    {title} | {section_name} | {site_name}

    I tried using the default_title to do this, but then the SEO lite title gets overridden and the entry title is used instead (assuming I pass that as an embedded variable) Is there a way to pass a variable into the title?

  2. Ross:

    The url_title parameter is used to fetch the entry, either that or the entry_id parameter. I think what you’re trying to achive is best done in the template (do it in the SEO Lite Control Panel .. just change the template there to {title} | {segment_2} | {site_name} or whatever ..)

    Jean St-Amand:

    {section_name} can be used if it is available to the template parser at that point. It is not fetched from the entry (only title / keywords / description is). But getting custom field is a nice additional feature request I guess .. is that what you’re trying to do or is {section_name} populated from somewhere else?

  3. Hi, i’m on 2.11 Build:20101020 still affected by the publish tab layout problem, the SEO Lite Tab is not visible. (tried the patch already). help pls.

  4. Hi Bjorn,

    Is SEO Lite {segment} aware? I have tried to implement your answer to ross in SEO Lite’s template but I just get:

    My Page Title | {segement_2} | My Site Name

    (both page title and site name are working fine. I am currently using the {exp:seo_lite use_last_segment=”yes”} )

    Thanks for the great work!


  5. Iain, it’s {segment_2} not {segement_2} ;-)

    Lincoln: that’s strange, the bug is marked “Fixed for next release” .. which means it should be out now. I will have a look at it.

  6. Hi Bjorn,

    just installed ‘SEO lite’ module, it works fine in the template but it doesn’t create a new tab to the publish entry page. Any ideas why?

    respect, dmitry

  7. sorry, i just realised: it dosn’t create the ‘SEo lite’ tab only on the publish entry pages with custom layout.. any solution to it? Or.. how do i remove custom layout and restore the default one (for the sake of ‘SEO lite’ tab)?

  8. Hi Bjorn, I’m having issues with SEO Lite not posting channel specific content to pages.

    All that is displaying on the page are the default values in the “Welcome to SEO Lite” setup.

    I’ve used the tag examples in the instructions to no avail.

    EE 2.1.0 – Build: 20100810

    Any thoughts?

    Thanks very much, Doug

  9. Re: custom publish layout

    If you have custom layout it will not create the SEO Lite tab automatically.

    To do this manually go to the publish screen and select “Show toolbar”. Click “Add Tab” and give the tab a name (ie. SEO Lite) .. and then drag the “SEO Title”, “SEO Meta Keywords” and “SEO Meta Description” into the new tab before saving your new layout to a member group as usual.

    I have prefixed “Title”, “Meta Keywords” and “Meta Description” with “SEO” to make it easier for people who use custom layouts. To get this update download the latest release from github.

  10. Thanks Bjørn, but to be clear, I’m not referring to “pages” as an entry from the Pages module, but simply a site page – any page.

    Sorry for any confusion.

    Thanks, Doug

  11. SEO Lite works great except for my home page which is

    What do I need to do so that SEO Lite sees that? Right now it’s only returning the defaults.

    I am using {exp:seo_lite use_last_segment=”yes”} and I am new to EE.

    Thanks, Steve

  12. Steve – the homepage sounds like the perfect location for the defaults if you ask me :-) .. but if you’re displaying dynamic information on the homepage (ie. from a channel) you can specify the entry_id parameter if you wish.

  13. That makes perfect sense (the defaults)!

    But I am using displaying dynamic information on the homepage, but when I use {exp:seo_lite entry_id=”{entry_id}”} all I get are the defaults on every page.

    The embedded header comes before my {exp:channel:entries} so may that’s why?

    {embed=”embeds/html_header” page_title=”Teachers for Home Instruction and Special Education”}

    <div id="sidebar1">


    <!-- end #sidebar1 --> </div>

    <div id="mainContent">

    {exp:channel:entries channel="home" disable="categories|member_data|pagination" sort="asc" }


    Thanks, Steve

  14. Yepp, that’s why .. if you want to give entry_id to seo_lite in that example you’ll have to have the embed inside the channel:entries tag and then use {embed:entry_id} in the html_header template to make sure seo_lite gets that entry.


    Since support in these comments are getting a bit difficult to follow please post support requests in the SEOLite forums over at devot-ee:

    btw – you can also vote SEO Lite for “Module of the year” on devot-ee: :)

    closing comments

Comments are closed.