New Canonical URL Field Makes Exponent CMS More SEO Friendly

Over the years, Exponent CMS has proven itself to be one of the top search engine friendly CMS platforms available in the marketplace – and it just got better.

I recently teamed up with Exponent CMS code ninja Phillip Ball to integrate a new Canonical URL field into the core of the CMS, allowing webmasters to easily add a <link rel="canonical" > tag into the header of their Exponent CMS web pages, on a page by page basis.

The new Canonical URL field, which will be featured this Friday May 3, 2013 in the 2.2.0 release candidate, has been integrated into the Exponent CMS page manager configuration, and you can also assign a Canonical URL when creating a new news article or blog post.

If you're a developer using Exponent CMS and aren't familiar with the SEO ramifications of the Canonical URL field, you might be asking yourself why this new field matters and what its purpose is.

What's the Purpose of Canonical URLs?

In layman terms, what the Canonical URL Tag does is it tells the search engines what URL to give credit to in the case of multiple URLs having identical content.

For example, if you're trying to make finding information easy for your website users by adding the same content in multiple sections of your site, such as pricing information, photo galleries, etc. by using the Exponent CMS content aggregation feature on your website, you've created yourself a duplicate content issue with the search engines.

In this case, it's important to assign a <link rel=”canonical”> tag on the pages to let the search engine know which URL is the original (and often times only URL indexed) source of the content.

SEOMoz.org also suggests that the rel=canonical tag be utilized on each page of your website, even if you don't have a duplicate page, in case of future developments on your site that might cause a duplicate content issue.

How Do I Use the New Feature?

As Phillip and I have collaborated on this feature, we tried to make it as easy and straight forward as possible from an administrative perspective. If your website will be using Exponent CMS version 2.2.0 or newer, you'll find the Canonical URL field on any content page configuration under the “SEO” tab.

Exponent CMS Canonical URL Page Configuration

You'll also be able to find this Canonical URL field on the Exponent CMS blog, news, and ecommerce modules when adding or editing a post or product.

If you do not manually assign a Canonical URL within this field, the <link rel=”canonical”> tag will default to the SEF URL for that particular page/post/product.

In order to manually set a Canonical URL for a piece of content, simply type or paste in the FULL URL that you want to assign the canonical tag to.

What Does the Canonical URL Markup Look Like?

The canonical URL tag, whether you assign it manually or let it default automatically, will show up in the header tag of your Exponent CMS website, directly under the meta description tag:

Exponent CMS Rel=Canonical URL Markup

What if My Version of Exponent Doesn't Have the New Canonical URL Field?

If your website's version of Exponent CMS isn't the latest and greatest and you don't want to spend the time upgrading your theme in order to implement this new feature, Phillip Ball has come up with a work around that you can drop right into the header your site's theme.

However, because you should be assigning Canonical URLs on a page by page basis to eradicate duplicate content issues, this work around is not an ideal solution if duplicate content is what you're trying to fix. If you simply want to assign a Canonical URL tag to your web pages because it's a “SEO best practice” for pages not at risk of duplicate content, here's what you need to do.

Navigate into the backed files of your website, accessing the theme folder and adding this code snippet inside the header tag of your default theme and any subthemes you might have for your site:

 <link rel="canonical" href="<?php echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]" ?>"/>

Here's what that looks like in the theme file:

Exponent CMS Canonical URL Workaround

While not ideal, this relatively easy process will automatically add a rel=canonical tag on each of your web pages.

About the author

Atlanta SEO Consultant Chris J. EverettChris Everett is a SEO consultant and founder of Captivate Search Marketing in Atlanta, GA.

Chris has been a core contributor to the Exponent CMS open source project since 2008.

If you have any questions about rel=canonical tags or how to make your Exponent CMS site more SEO friendly, feel free to drop him a line on Google+.

Prepping Your Site for v2.2.0 (or how to deal with a major update)

(Update: we HAVE reverted to the name 'container' instead of 'container2' for release candidate1!)  Here are some tips and tutorials to help ensure your site is 'v2.2 ready'!  While there is really no show-stopping change moving from v2.1.1 to v2.2.0, the move to v2.2.0 will reveal any themes or custom views which haven't been updated to 2.0 standards.  In a pragmatic sense, though the upgrade must be run and completed to convert the database for use in v2.2.0, your site would continue to work using one of the shipped or add-on themes which are 2.2 ready.

Since this upgrade only affects a custom theme and/or custom views, that's where we'll need to look:

  • Theme 1.0 compatibility removed
    • This one is the easiest to spot and correct.  It will occur in the main theme template (/themes/mytheme/index.php) and the subthemes (found in the subthemes folder)
    • Calls to the deprecated 1.0 theme subsystem look like 'exponent_theme_method' instead of 'expTheme::method'  And moreso there are only three mandatory calls with a fourth recommended call for hard-coding other modules
      • expTheme::head(...) in the <head>...</head> section, this method is used in place of the deprecated exponent_theme_headerInfo(...) call
      • expTheme::main() in the main content area in the <body>...</body> section, this method is used in place of the deprecated exponent_theme_main() call.
      • expTheme:foot() at the bottom of the <body>...</body> section, this method is used in place of the deprecated exponent_theme_footerInfo() call.
      • expTheme::module(...) within the main content area for hard-coding (embedding) modules, this is THE single multi-purpose method to display a module in place of many deprecated calls: 
        exponent_theme_showSectionalModule(...), 
        expTheme::showSectionalModule(...), 
        exponent_theme_showTopSectionalModule(...), 
        expTheme::showTopSectionalModule(...), 
        exponent_theme_showModule(...),
        expTheme::showModule(...),
        expTheme::showSectionalController(...),
        and expTheme::showController(...)
        • A big difference between the expTheme::module(...) call and the others (except the last two) is that it is called with a single parameter of an associative array of named parameters, whereas the deprecated ones were called with simple (sequential) parameters.
        • Likewise most of these various calls were to either deal with a 1.0 module or 2.0 controller, or to hard-code a module with a specific 'scope' (global, sectional, or top-sectional), which is now simply a 'scope' named parameter with 'global' being the default.  The expTheme::module(...) call is 'smart' in being able to to it all!
        • Deprecated call - expTheme::showModule($module,$view,$title,$source,$pickable,$section,$hide_menu,$params);
        • 2.0 call - expTheme::module(array("controller"=>"navigation","action"=>"showall","view"=>"showall_mega","source"=>"mega","chrome"=>true));
  • Old School (1.0) modules no longer exist
    • Another fairly easy thing to spot and correct are hard-coding an old school module within the main or subtheme template.  In many cases, these old school modules have been disappearing and references to them as hard-coded modules may have already been exposed.  However some were replaced with like named 2.0 modules (controllers)
    • A big difference between the old and 2.0 modules is old school modules only required a 'view' parameter, whereas the 2.0 modules require an 'action' parameter (with the default view implied).  The old school default (view) was 'Default' whereas the 2.0 module default action is 'showall' and the default view is also 'showall'. Therefore to locate old school modules, they were typically called using a 'module' parameter instead of 'controller' (however each are interchangeable).  Specifically, 2.0 modules need to have an action parameter, whereas the old school modules only pass a 'view' parameter (with NO action parameter).  If the old school view was something other than 'Default', please see the next area of discussion.
    • Here's a list of old school modules and their 2.0 counterparts:
      • simplepollmodule or simplepoll => simplePoll
      • navigationmodule or navigation => navigation
      • calendarmodule or calendar => events
      • formmodule or form => forms
      • containermodule or container => container (this has changed to simply 'container' in release candidate 1)
      • headlineController or headline => text (this is a 2.0 controller which has been deprecated)
    • Here's an example of an update required since most themes include a hard-coded container
      • Deprecated call - expTheme::module(array("module"=>"container","view"=>"Default","source"=>"@left"));
      • 2.0 call - expTheme::module(array("controller"=>"container","action"=>"showall","view"=>"showall","source"=>"@left"));
    • ​​If you've kept up to date through v2.1.1, the only NEW upgrade involves the 'container' module.  
    • The deprecated call may continue to work, but is unsupported.  If it fails to work because this is a module name change, your custom themes will not seem to work (will say that containermodule is unavailable) until it is corrected.
  • Old School Module Custom Views must be updated to work with their 2.0 module counterpart
    • The most complex of the changes will likely be required for any old school module custom views.  These would be found in the //themes/mytheme/modules/ folder using any of the above full module named folders.  In many cases, the custom view could be upgraded by a couple of simple renames.
      • Rename the 'module' folder into its 2.0 counterpart...e.g., 'navigationmodule' into 'navigation'
      • Within the newly renamed folder, enter the 'views' folder and create a new folder with the name of the module, such as 'navigation'
      • Move all the other files (.tpl files) within that 'views' folder into that newly created folder
      • Enter the folder with the moved templates, then rename the view template(s) into a 2.0 suitable name which includes the action:
        • 'Default.tpl' would become 'showall.tpl'
        • 'YUI Top Nav.tpl' would become 'showall_YUI Top Nav.tpl'
    • Any configuration or form files (.config or .form) would need more complex editing.
      • .config files are no longer used as these details must now be handled within the controller itself
      • .form files are now templates within the 'configure' subfolder of the views folder.  They are named by the associated view name with a .config suffix.  The files are now formatted just like a view instead of using the shorthand notation to create controls.  You should look at a system module like 'events' or 'blog' to get an idea of how view specific configurations work.
  • (Updated) Some YUI constants and file names/locations have been deprecated
    • Both of these issues tend to be revealed as improper formatting such as misaligned columns or font styles.
    • The 'Reset' stylesheet names have been deprecated for quite some time (apparently) and were finally removed in YUI v3.10.0.  Since many of the older themes use YUI reset(s) instead of the new 'normalize' standard, here's the changes you'll need to look for and make in the expTheme::head() call at the top of your theme templates (and subthemes) (note the additional 'css' at the beginning of the filename!)
      • cssreset/reset-min.css has become cssreset/cssreset-min.css
      • cssreset/fonts-min.css has become cssfonts/cssfonts-min.css
      • cssreset/grids-min.css has become cssgrids/cssgrids-min.css
    • We have finally removed the deprecated YUI path constants for consistency with other path constants.  These were typically used to load scripts or stylesheets in the theme templates (also subthemes) and custom views)
      • JS_FULL is now JS_URL
      • JS_PATH is now JS_RELATIVE
      • YUI3_PATH is now YUI3_RELATIVE
      • YUI2_PATH is now YUI2_RELATIVE

Other articles of interest:

About the author

Dave Leffler
Exponent CMS Developer

SEO Friendly Features of Exponent CMS

I've worked with Exponent CMS in a variety of roles since 2007, from being merely a user/customer of OIC Group, Inc., to becoming a project manager for OIC Group, and now as a SEO consultant for my own business in Atlanta.

While Exponent CMS doesn't have the community following of Wordpress, Joomla, Drupal, etc., I've had experience with all of these top CMS platforms, but Exponent is always the one I come back to.

In terms of SEO friendliness, Wordpress has several plugins that work quite well for optimizing websites, but what I love about Exponent CMS is that the markup is highly flexible and all of the SEO tools needed for to optimize your website are built in – no plugins necessary.

Over the last several weeks, I've been working with the lead developers on the Exponent CMS project – Phillip Ball and David Leffler – on enhancements to the CMS that make Exponent even more SEO friendly than it already was. In the coming weeks, we'll be adding even more features that I personally believe will make Exponent the most search engine friendly CMS platform in the open source marketplace.

So, aside from being able to control basic Meta Data on a page by page basis, what are some of the other built-in SEO friendly features of Exponent CMS?

Router Maps

When you're working with a CMS that allows for dynamic content publication and display, you're going to run into problems with long, nasty URL strings that include parameters for views, actions and sources that aren't friendly for either users or search engines.

Such is the case with most of the dynamic content modules within Exponent CMS such as news, portfolio, blog, ecommerce, etc. Luckily for SEO enthusiasts such as myself, Exponent has built in an awesome feature called Router Maps that allows you to clean up that nasty URL strings with a cleaner, more search engine friendly version of the URL.

For example, the dynamic blog module URL below is performing the “Show All By Tag” action, where a user can view every blog post that is labeled with that specific tag. The Exponent CMS site will dynamically pull up and display each of these posts, which is essential functionality for a blog, but as you can see the URL isn't exactly user friendly:

Dynamic Exponent CMS URL String

By configuring the Router Map function in your Exponent theme folder with the appropriate rule, you can change that nasty URL to a cleaner one such as this:

Exponent CMS Clean Router Mapped URL

Flexible URL Structures

Since SEF (Search Engine Friendly) URLs were integrated into Exponent in 2007, they've evolved to become more and more flexible for SEOs.

The benefit of SEF URLs, aside from being easy for users to read, is that SEOs can craft custom optimized URLs with keyword inclusion to make their clients' websites more friendly for organic search.

Exponent allows administrators to assign a variety of URL extensions to their SEF URL field such as .html, .php, .htm, etc., based on their preference.

Historically, all pages within Exponent CMS would display URLs at the root level.

Exponent CMS URLs

Recently though in Exponent's 2.2.0 stable release, the SEF URL field has become even more flexible. The system now allows for nested URL structures that are preferred by some SEO consultants that allow URLs to look like this:

Exponent CMS Enhanced Nested URL Structures

The flexibility of how SEOs can execute their URLs within our system makes Exponent a very powerful platform for websites focused on SEO and search engine placement.

Rel=Canonical URLs

Another new feature added in the 2.2.0 stable release is support for Rel=Canonical URLs on a page by page basis.

For SEOs dealing with large websites that have potential duplicate content issues (having the same exact content appearing in multiple places on your website, or if your site is receiving syndicated content), the Rel=Canonical tag configuration allows SEOs the ability to easily assign credit to a preferred source URL in the event that duplicate content needs to be avoided.

Exponent CMS Rel Canonical URLs

Rel=Canonical tag fields have been integrated throughout the system in the page manager configurations, and in specific dynamic module types such as Exponent's news, portfolio, blog, and ecommerce modules.

File Manager Image Meta Data

The final feature that makes Exponent CMS a SEO friendly CMS that I'll discuss in this post is related to Exponent's file manager and attachable files functionality.

Certain modules within the system utilize “attachable files” functionality to display images in certain views/layouts.

For example, Exponent's ecommerce, blog, portfolio, and news modules use attachable image files to display images related to that product/portfolio piece/post:

Exponent CMS Attachable Files

The SEO friendly feature related to this functionality is how the image is optimized for organic search engine value.

Rather than simply inserting image files into the WYSIWYG editor for display on the website as you would using a text module, you can assign your Image Alt Text and Image Title tags for attachable files within Exponent CMS' file manager.

Exponent CMS File Manager Image Meta Data

So as you've optimized your attachable file, your image Alt text and Title tags will show up in the HTML markup just as if you had inserted your image into a WYSIWYG editor and optimized the image that way:

Exponent CMS Attachable Files Image Meta Data

Future Exponent CMS SEO Friendly Feature Enhancements

As the CMS continues to evolve, I've made it my personal mission to ensure that we work in every SEO friendly feature possible into Exponent CMS.

In future releases, we'll be working on such enhancements as allowing administrators to configure “No Index, No Follow” type robots tags on a page and post level.

We also plan to enhance the Exponent CMS tagging system so administrators will be able to assign unique SEO friendly meta data on a tag by tag basis, as well as add link title attributes to the Exponent CMS link manager module configuration.

If one thing is for certain as we continue to make Exponent CMS more and more Search Engine Friendly, it's that our system is incredibly powerful and its future is very bright.

About the author

Atlanta SEO Consultant Chris J. EverettChris Everett is a contributor to the Exponent CMS project.

Chris is a search engine marketing consultant based in Atlanta, Georgia, and he's the founder of the Captivate Search Marketing SEO Company.

To learn more about the SEO friendly features of Exponent CMS, feel free to connect with Chris on Google+.

SEO Friendly Markup Tips for Exponent CMS Developers

As I've optimized Exponent CMS websites over the years, one of the challenges that I've discovered is making sure the developers understand the proper SEO friendly markup principles required to maximize the organic search value of the site.

It's not that I blame the developers for some of the markup oversights I've come across when analyzing the level of SEO friendliness an Exponent CMS site might have – after all, it's their job to build the sites and the SEO consultant's job to optimize them.

With this in mind, I've come up with these SEO friendly markup tips to educate Exponent CMS developers who might not be as SEO savvy in order to make the development process more efficient – particularly for websites undergoing an organic search optimization program.

Don't apply the H1 Tag to the Website Logo

I've seen this done many, many times, where developers have created a logo style class in the CSS and have applied an H1 tag to the logo in every subtheme of the site.

SEO Friendly Markup Tips for Exponent CMS Developers

The problem with this from an SEO perspective is multifaceted. First, because the logo is typically at the top of the page markup, this H1 tag is the first tag that the search engine spider sees as it's crawling your page top to bottom.

In terms of content structure, the H1 tag is your web page's most important header tag, followed by the subheader tags H2 and H3, because it tells the search spider what the main topic (or keywords) is for the page. You also only want to use one H1 tag per web page. So if you're using the H1 tag in this fashion, you're literally telling the spider that whatever your logo title text is, is the main content topic for each page.

It also means that if you're building your Exponent CMS site with SEO in mind, you most likely have multiple H1 tags on each of your web pages, which isn't ideal for proper on-site optimization.

Don't Rely on Exponent's Out-of-the-Box Module Title Markup

SEO Friendly Markup Tips for Exponent CMS DevelopersThere are a lot of built in features that Exponent CMS has that are meant to be convenient time savers when it comes to markup.

One of those being the across-the-board H1 tag that is applied to each module title field.

The problem with this dovetails on the H1 logo markup that I discussed above, where if you're utilizing multiple types of content modules on one page, it becomes very easy to have multiple H1 tags on that single web page, which again, isn't best practice for on-site optimization.

If your homepage has a normal text module with a strong H1 tag, but you also have an upcoming events section, as well as a latest news section using a news module in summary/headlines view, topped off with a footer utilizing 3 or 4 separate link manager modules, you have potential for 7 or 8 different H1 tags on that one web page if you simply used Exponent's stock module markup.

Proper Markup Makes All the Difference

I'll illustrate for you an example of how using these two SEO friendly markup tips above can make a tremendous difference.

Earlier this year I had experienced some issues with a client's Exponent CMS website that was undergoing an SEO marketing program. The problem with the site was that we couldn't seem to get passed page 3 of the organic search results, and Google couldn't really decide which of our web pages it wanted to rank for some of our targeted keywords. Every couple of days, the page on our site that would show up in the middle of page 3 would change from the homepage to an internal page.

When I started digging into the code, I realized we not only had the H1 tag applied to our logo, but we also utilized all the stock module title H1 tags, so we had 9, yes 9 H1 tags on our homepage alone.

After finding this markup issue, we quickly stripped the H1 tag off of our logo, assigned H2 or H3 tags to our module titles that weren't the most important header tag our each of our web pages, and within about 10 days of me re-submitting our site through webmaster tools, we finally climbed onto page 1 of the search results, and to this day, every web page on this clients' site sits in the top 3 of the organic results.

If you're an Exponent CMS developer who has been utilizing these H1 tags in your markup, you might want to consider these SEO friendly tips to not only improve the organic value of your websites, but also to make your lives easier so you don't have to go back and fix it at a later date.

About the Author

Chris Everett is an SEO specialist in Atlanta, GA, and the founder of the Captivate Search Marketing Atlanta SEO Company.

To learn more about the technical SEO aspects of Exponent CMS, connect with Chris on Google+.