Posts from "2013"

More About Less

less cssCSS3Back in version 2.0.8 we added the LESS ​stylesheet compiler to Exponent.  LESS is a dynamic stylesheet language which extends CSS with dynamic behavior such as variables, ​mixins, operations and functions.  This functionality makes it much easier to create flexible stylesheets since redundant styles and style variations can be handled by the compiler/server instead of the designer.  Though this addition to Exponent was primarily to support Twitter-Bootstrap, its use is increasing especially beginning with v2.2.3.

In this article our focus is on creating or updating .less stylesheets.  For information on how to incorporate .less style sheets into your custom theme, module, or view, please see this help doc.  The use of .less stylesheets in place of .css stylesheets is transparent within Exponent.  

In version 2.2.3 we convert all our core css stylesheets to .less, since we now also have custom 'mixins' to do some of the heavy lifting.  Mixins allow you to tie a bunch of properties and customizable values all into one nice little package.  Here’s an example:

/* Mixin */
.box-shadow (@x: 0px, @y: 3px, @blur: 5px, @color: #333) {
  -webkit-box-shadow: @x @y @blur rgba(0, 0, 0, @color);
  -moz-box-shadow: @x @y @blur rgba(0, 0, 0, @color);
  box-shadow: @x @y @blur rgba(0, 0, 0, @color);
}

This takes all of the box-shadow code needed for display on multiple browsers and wraps it up nicely into a single mixin that can be implemented with custom values (or the defaults that we used above). Now, instead of writing a huge chunk of code every time you want a box-shadow, this is all you need:

/* Implementation */
.somediv {
  .box-shadow(5px, 5px, 6px, #eee);
}

Pretty awesome right? When this code is compiled automatically by Exponent, it’ll create a the appropriate CSS stylesheet. You get a much more readable code without sacrificing browser compatibility.

In v2.2.3 we include a custom 'mixins' file which is located in /framework/core/assets/less/exponent.less.  This mixn may be included in your .less file by adding the following line to the top.

 @import '/framework/core/assets/less/exponent.less'

Here are some of the mixins found in exponent.less:

  • .border-radius and .border-radius-custom
  • .box-shadow and .drop-shadow
  • .gradient and .quick-gradient
  • .reflect
  • .opacity

Take a look at exponent.less to see all the included mixins, plus some implementation samples.

I think you'll appreciate how LESS can make your work 'more' productive and will consider using it in your next project.

Permit me to tell you a little about the next version

While v2.2.3 (when released) will focus on addressing issues in v2.2.2 and removing all the deprecated features and 0.9x compatibility, there will be a few minor new features and changes to the permissions system (final implementation will be based on your feedback to this article!).

New features include adding a 'copy' item command to the portfolio module, adding an optional 'force image resize' during a quick upload, and better theme support for mobile devices by use of optional 'touch' icons and the 'meta viewport' tag.  We may also be able to squeeze in a 'multi-day' feature to the event module along with external calendar (ical & google xml) feed caching.

However, the bigger changes will be to user/group permissions.  This will be accomplished by the addition of group global permissions (restrictions) and changing the way we deal with the 'create' permission.

Group Global Permissions - This new feature provides greater control over what basic users are allowed to do (or more accurately 'are prevented from doing').  These restrictions will be implemented within a 'User Group', therefore the 'user' must be assigned to a 'group' in order to enforce these 'global permissions'.  However, this method will ensure that upgrading from a previous version will continue to operate transparently the same as before.  But if you want to apply them to all basic users, you can set the group as a 'default group' to be assigned to all new users.  Based on user requests, Global Permissions/Restrictions already include:

  • Prevent File Uploading - will prevent the user from being able to upload a new file.  They will still be able to select existing files from the file manager.
  • Prevent User Profile Changes - will prevent the user from being able to change their user profile (email address, profile extensions, etc...)  This does NOT affect the user being able to change their password since we already have a global setting to 'disable user password change requests' in the Site Configuration settings.
  • Disable Slingbar (Exponent Menu Bar) or Slingbar menus - will  'hide' the 'Exponent', 'Files', and/or 'Pages' menus from the user (leaving only the 'User' menu).  Or you can select to hide the entire 'Exponent Menu Bar'.  Under normal circumstances, a user with any permission on the site would see the 'slingbar.'  This feature allows greater control on preventing it's display.

Enhanced 'Create' Permission - Unlike the group global permission feature, the enhanced 'create' permission feature may affect some users ability to perform actions after a version upgrade!  Currently (v2.2.2), the 'create' permission also always implies/provides the 'edit' permission.  This means that if you can create new module items, you will also be able to edit all module items (but still requires a 'delete' permission to remove the item).  However under the new (v2.2.3) system, the 'create' permission would be separate from the 'edit' permission.  What's NEW is that the 'create' permission (without an 'edit' permission) would also allow you to edit any module item you had created (no change here), but NOT the other users' module items.  To edit other users' module items, you'd also need to have an 'edit' permission.  The same applies to deleting a module item.  If you have a 'create' permission, you may delete a module item you created, but would need a 'delete' permission to delete other users' module items.  In practice, this new feature will allow a module to have many users who are able to create and manage their own items, but not have any influence on the other module users (unless you also gave them an 'edit', 'delete', or 'manage' permission).

As a permissions primer...permissions cascade down through any child objects such as pages, containers, and the module.  The 'manage' permission implies/provides ALL permissions.  The 'configure' permission is needed to access module configuration settings (change the module's action, view, and other module settings).  The 'create' permission is needed to create new items or modules (and up to v2.2.2 also provides an 'edit' permission).  The 'edit' permission is needed to edit an existing module item.  And the 'delete' permission is needed to delete/remove an item or a module.  Admin users are always granted permission!

While this new approach to the 'create' permission should greatly enhance a multi-user site, it is not a complete solution.  There are some scenarios where a user would be allowed to 'create' a new module item, but NOT edit it (invoices, etc...).  It is recommended the developer create a new module controller method/add_permission for that instance.  Creating a stricter permission system would be very complex and time-consuming to implement.  However, there are plans to implement some 'workflow' features such as 'revisions' (allow rolling back to a previous item version) and 'approvals' (optionally require a user with approval permission to approve new or updated content).  These workflow features would not be as complex as those partially implemented in the 0.9x code, but should become very useful.  The workflow features are targeted for the v2.2.4 release.

If you have any suggestions to the above features especially the Group Global Permissions and Enhance Create Permission, please respond with a comment.

Bring Out Yer Dead!

Bring Out Yer Dead!Monty Python fans will quickly recognize the title phrase and remember the scene where he's not quite dead.  So begins this article on how to remove all the old, dead stuff from your Exponent site and custom theme.  Before the end of the year (probably v2.2.3 which tentatively will be a Thanksgiving/Christmas holiday/last release of 2013) we'll have stripped out several deprecated modules and no longer support older themes (deprecated function calls).

Deprecated Function Calls

  • The most prevalent deprecated call when hard-coding modules is that a 2.0 controller requires an 'action' parameter where all the old school modules only used a 'view' parameter.  The default action is ALWAYS 'showall' (if none is passed) and the default view is ALWAYS the action name (if none is passed).  Therefore if you simply updated an old function call by changing it to 'expTheme::module()' and did not ensure you passed an 'action' parameter...you may not see the correct view...especially if the view you requested was not a variant of the showall action.  
    • Take for instance, the Search module 'Show' view.  If you updated it to simply pass the 'view' parameter of 'show', it would attempt to display the 'showall_show' view with the showall action.  The easiest fix is to change the 'view' parameter to an 'action' parameter which will automatically use the same named view ('action'=>'show').
  • I've previously written about the other hard-coding function calls which must be replaced.  In v2.2.1 you'll now receive a deprecated theme call warning message when logged on as an admin.  The message will contain details about what file and line the deprecated call is on and a suggestion on the fix with a link to a more detailed help page.  (updating to 2.2.0 blog post) (theme update guide)

Deprecated Modules

  • The Headline module was marked as deprecated quite a while back and was fully removed in v2.2.0.  It is replaced by the Text module showall 'Headline' view.  This change is automatically accomplished in an upgrade by converting all Headline modules into Text modules with the Headline view.
  • The Flowplayer module uses a non-HTML5 compliant player and was replaced by a newer Media Player module.  The new Media Player module also plays simple YouTube links using the same player (YouTube module requires using the 'embed' code) so we've also deprecated the YouTube module.  Though they still exist, they will be completely removed as stated above.  There is currently an optional upgrade script to convert all Flowplayer and YouTube modules into Media Player modules.  Currently if you run a 0.9x Migration, it will create Flowplayer/YouTube modules which you can then upgrade to Media Player modules.  This will be changed once the deprecated modules are removed.
  • All the old school modules have been deprecated, replaced, and removed as of v2.2.0.  In fact, you'll notice the 'Old School' modules tab is missing from the Module Manager.  Any old school modules on the site will automatically be upgraded to work with their 2.0 controller replacement during an upgrade.

Updated Requirements?

  • And now that PHP v5.5 has been released, PHP v5.3 is no longer recommended (end of life) and PHP 5.2 is obsolete, we should consider updating the minimum PHP requirement be at least v5.3.1 (or one of the more robust iterations of v5.3) to allow some of the v5.3+ only PHP features such as namespaces, etc...

Facebook and Tweet Integration in v2.2.1

FacebookTwitterThe next release will introduce a new 'Facebook' module and optional Facebook 'Like' and Twitter 'Tweet' buttons to blog posts.  

The new Facebook module will allow you to insert a 'Like' button onto a page which points to the site, the page, or a custom url.  It will also allow you to insert a 'Like Box' (or timeline) onto a page.  These views interact with Facebook to display results from Facebook, and also update 'Likes' on Facebook.  There are several display options which reflect the same options offered by the widget on Facebook.com.

Blog posts may now optionally display Facebook 'Like' and/or Twitter 'Tweet' buttons at the bottom of each post.  These features should allow greater proliferation of your ideas and works.

Additionally, we've added a new optional 'Follow' button to the Twitter module view, and there will be a new (optional) user profile extension which allows creating a 'signature' which is automatically attached to the end of blog posts you create.

Part V – Google Analytics – Advanced SEO Tips for Your Exponent CMS Website

In this, Part V of my advanced SEO tips for Exponent CMS websites, I'll discuss a critical component for search engine marketing: Analytics.

A gigantic aspect of search marketing is measuring, analyzing, and modifying your SEO and PPC campaigns to ensure they're always performing at their best. The best way to gather this data is by integrating a comprehensive traffic analytics program into your Exponent CMS website.

One of the most popular Analytics programs available – and is 100 percent free – is Google Analytics. Google Analytics gathers detailed statistics about web traffic and its sources and measures conversions and sales. All of this data is essential for running a well optimized SEO campaign.

So how do you get Google Analytics to work on your Exponent CMS website? If you're the webmaster of an Exponent site, the process takes a few steps but it's really quite simple.

Setting Up Your Google Analytics Account

If you or your client don't already have a Google Analytics account set up, it's very easy to get a new account. Simply go to Google.com/Analytics and sign in with your Google Account. From there, you'll need to go to Accounts list and click to add a “New Account.”

Create a new Google Analytics Account for your Exponent CMS Website

Next, fill out the pertinent information about your Exponent CMS website, giving it an account name and providing your website's URL. Whether or not you choose to allow Google to view your account data is up to you.

Setup Google Analytics Account for your Exponent CMS Website

When you're done, simply click “Get Tracking ID” and accept the Google Terms & Conditions to get the code snippet you'll need to integrate into your Exponent CMS theme files.

Google Analytics Tracking Code for your Exponent CMS Website

Installing Your Google Analytics Code

As you can see in the image above, you'll need to simply copy the code snippet tracking code found in the box that is specific to your account and paste it into each page of your site.

If you were working with a straight HTML site, this could get a little cumbersome, however because we're working with a dynamic CMS that uses themes/subthemes, you'll only need to paste it into each of your theme files.

You can access these theme files within cPanel or by pulling them down via FTP.

Within your public_html directory, you'll need to navigate into your Exponent theme folder and into the directory of the theme you're using for your website.

Google Analytics Edit Theme File Exponent CMS Website

Within your theme directory you'll first want to edit your index.php file, inserting your code snippet just before the closing body tag of the file:

Google Analytics Edit Theme File Exponent CMS Website

Once you've pasted in your snippet, save the file or push it back up via FTP. Go back into your theme folder and into “subthemes” and repeat this paste/save step for each of your website's subtheme files.

Google Analytics Edit Subthemes Exponent CMS Website

Once you've saved the snippet, you can verify its tracking status by going back to your Google Analytics account and into Tracking Info where you copied your code snippet. There you'll see the tracking status for your Analytics account:

Google Analytics Tracking Status

Now that you've successfully setup and installed Google Analytics into your Exponent CMS website, you can now set goals, track traffic sources and gather other pertinent website data that will help you continually measure and analyze the performance of your SEO marketing strategy.

About the Author

Atlanta SEO Consultant Chris J. EverettThis SEO tutorial article was written by Chris Everett, a search engine marketing consultant at Captivate Search Marketing in Atlanta, Georgia.

Chris has worked with Exponent CMS websites since 2007 and continues to help improve the system's SEO friendliness.

Connect with Chris on Google+ to learn more.

Part IV – XML Sitemaps – Advanced SEO Tips for Your Exponent CMS Website

As a follow up to Part III of my advanced SEO tips for Exponent CMS webmasters that discussed installing webmaster tools,  I'll now discuss the importance of XML Sitemaps and how to create and configure one for your Exponent site.

What are XML Sitemaps?

XML Sitemaps for your website that notifies the search engines about each web pages on your site, how important each page is, as well as how often the site is updated.

Creating a XML Sitemap also provides a way for the search engines to discover pages on your website that they might not have found through the normal site crawling process.

A complement to the Robots.txt file, after they are generated, XML Sitemaps are uploaded to Google and Bing Webmaster tools to help you manage the indexation of your web pages.

Creating & Uploading a XML Sitemap

Generating an XML sitemap is very easy by going to www.xml-sitemaps.com.

This website gives step by step instructions on how to create your XML Sitemap. You'll first need to enter your website URL and then select the frequency that your site is changed.

XML Sitemap Details

Next you can tell the search engines precisely when the last time your site was updated:

XML Sitemap Last Modification

The Priority tag for your XML sitemap assigns a value to your URLs between 0.0 and 1.0, where 0.0 identifies the lowest priority URLs on your site and 1.0 identifies the highest priority URLs. The default priority of a page is 0.5.

XML Sitemap Priority

Once you've filled out the necessary data, you can then run your XML Sitemap by clicking the “Start” Button.

Run XML Sitemap

As you can see in the image above, you can run a XML Sitemap for a website up to 500 pages for free. If your website has more than 500 pages that need to be indexed, you'll have to find an alternative sitemap generator, or pay for the advanced version.

Once you click “Start” the Sitemap crawler will start to build your XML Sitemap:

XML Sitemap Crawl

Once the Sitemap generator is finished running, you can download it and push it up to the public_html directory of your Exponent CMS website via FTP or cPanel/WHM.

Uploaded XML Sitemap

You can verify that you've properly uploaded your XML sitemap by going to www.yourwebsite.com/sitemap.xml It should look something like this:

XML Sitemap Display

Configuring Your XML Sitemap in Webmaster Tools

So now that you've created and uploaded your new XML Sitemap to your web server, you now must go to Webmaster tools for both Google and Bing and submit your XML Sitemap URL.

Google Webmaster Tools

In the Google Webmaster Tools, you can access the Sitemap configuration page from the dashboard, or on the left hand menu under Optimization by clicking the “Sitemaps” link.

Google Webmaster Tools Dashboard XML Sitemap

Once you've landed on the Sitemaps configuration page, you can submit a new sitemap by clicking the red “Add/Test Sitemap” button on the right hand side.

Google Webmaster Tools XML Sitemap

There, you'll simply enter “sitemap.xml” in the rest of the URL field and click “Submit Sitemap”

Add Sitemap Google Webmaster Tools

You'll receive a “Sitemap Submitted” message to let you know that you've successfully completed the process:

Webmaster Tools Sitemap Submitted

Bing Webmaster Tools

Similarly to the Google Webmaster Tools, you can submit a XML Sitemap on the Bing Webmaster Tools dashboard under the “Sitemaps” section:

XML Sitemap Bing Webmaster Tools

To submit the sitemap, simply click “Submit a Sitemap” and fill out your XML Sitemap URL:

Submit XML Sitemap Bing Webmaster Tools

Once you've filled out your URL, click submit and you're done.

You now have successfully notified the search engines about each page on your website. While it does not guarantee every page will be indexed, it does help eliminate URLs not getting picked up through normal crawling.

In Part V of this Advanced SEO Tips series, I'll discuss how to configure and install Google Analytics on your Exponent CMS website.

About the Author

Organic SEO Consultant Chris J. EverettChris Everett is an organic SEO expert and is the founder of the Captivate Search Marketing search engine marketing firm in Atlanta, GA.

If you'd like to learn more about how to optimize your Exponent CMS website for maximum SEO value, feel free to contact Chris on Google+ or by visiting his website.

 

 

Part III – Webmaster Tools – Advanced SEO Tips for Your Exponent CMS Website

If you're the webmaster of an Exponent CMS website that is undergoing a search engine marketing program, there are several metrics you'll need to analyze to measure the performance of your campaign.

Among those basic trends are web page indexation, as well as website traffic and its sources.

In this, the third part of my Advanced SEO Tips for Exponent CMS Websites series, I'll discuss how to verify and install Google & Bing Webmaster Tools. In later posts, I'll discuss how to create and upload XML sitemaps, as well has how to setup and install Google Analytics.

Webmaster Tools

Webmaster tools allow you to manage the indexation of your website, as well as analyze its visibility in the search index. Before you can do this, though, you must first verify ownership of your site with both Google and Bing search engines.

Install Google Webmaster Tools

After logging into your Google Account, you'll want to go to https://www.google.com/webmasters/tools/. To setup your website profile, you'll need to select the red “Add a Site” Button on the right hand side of your screen.

Google Webmaster Tools Add A Site

A popup box will then appear, where you'll type in your website's domain name.

Enter Domain into Webmaster Tools

You'll next be directed to Verify ownership of your website.

There are multiple ways to verify ownership including inserting a meta tag in the header of your theme file or selecting your DNS provider, but the method I like to use is uploading an html verification file.

Google Webmaster Tools Verify Ownership

Simply download your HTML verification file and then upload that file to your public_html directory through cPanel or FTP.

Upload Webmaster Tools Verification File

Once your file is uploaded, go back to Google Webmaster Tools and click the red verify button.

If you've successfully uploaded your verification file, you'll get a Green check mark letting you know you've retained ownership of the site.

Install Bing Webmaster Tools

Similarly to Google, Bing Webmaster Tools can also be verified multiple ways. First you'll go to http://www.bing.com/toolbox/webmaster and either sign in or create a new account.

Once you are logged in you'll see your Bing Webmaster Tools domain dashboard and immediately you'll notice the “Add a Site” box where you can quickly type in your site's domain and then click “Add”

Bing Webmaster Tools Add a Site

You'll then be directed to a screen where you're given the option to declare whether an XML sitemap has been uploaded to your server:

Bing Webmaster Tools Add XML Sitemap

If you don't have an XML sitemap already on your web server, you can simply click “Add” and move forward through the process. I'll discuss creating and uploading XML sitemaps in Part IV of this advanced SEO tips for Exponent CMS websites.

Verify Bing Webmaster Tools

You can download your “BingSiteAuth.xml” verification file from Bing and then push that file up to public_html through FTP or cPanel/WHM. Once you've uploaded the file, click the “Verify” button to complete the process.

Bing Verification Button

Once you've verified ownership of your website with both Google and Bing Webmaster Tools, you can then remove URLs from the search index, view any crawl errors experienced by search spiders, analyze the overall health of your site, as well as submit XML sitemaps - all of which are essential tasks for properly maintaining a website undergoing an advanced SEO program.

About the Author

Atlanta SEO Consultant Chris J. EverettThis article was written by SEO consultant Chris Everett of Captivate Search Marketing in Atlanta, Georgia.

Chris has worked with the Exponent CMS open source project since 2007.

Feel free to connect with him on Google+ or LinkedIn.

 

Part II - .HTACCESS - Advanced SEO Tips For Your Exponent CMS Website

In Part II of my Advanced SEO Tips for Exponent CMS websites, I'll discuss how you can utilize your .htaccess file to practice better SEO.

.HTACCESS

Your .htaccess file, which also ships in your Exponent CMS install, is used to override the Apache or PHP configuration files on your web server.

The .htaccess file can be pulled down from your Exponent site's public_html directory much like the robots.txt, which I discussed in Part I of this advanced series file can through FTP or cPanel/WHM. The one catch here is if you're trying to pull it down from cPanel/WHM, you must check the box that allows you to see hidden files (dotfiles) in your directories.

Show Hidden Dotfiles cPanel

For SEOs who are optimizing Exponent CMS sites, there are two primary modifications that they can make to the file in order to make their Exponent CMS sites more SEO friendly.

Forcing a Preferred Domain URL

The first .htaccess modification you can make to optimize your website for SEO is to force a www. or a non-www. domain URL structure. This prohibits the possibility of two identical pages being indexed by the search engines with a www. and a non-www. version of the same website (the dreaded duplicate content issue!)

In the latest releases of Exponent CMS that support canonical URLs, this isn't such a big deal (so long as you're defining the canonical URL), but in previous versions of Exponent CMS before 2.2.0, you'll want to make sure you put this modification in place.

All you need to do is pull down your .htaccess file, uncomment out the example rule you want to follow, fill in the proper domain name, save, and re-push your file to the live server:

Force WWW in .HTACCESS Exponent CMS

301 Redirects

During a website redesign project, one of the most important items to cross off the go-live check list (for the SEO minded at least) is to ensure you have any 301 redirects in place for URLs that have been indexed by the search engines.

Often times when a website is moved from one CMS platform to another, or undergoes an SEO overhaul, the URLs of each web page are updated.

When this happens, SEOs want to ensure that every URL that's been indexed by the search engines are permanently (301) redirected to their new URLs so the website does not lose any of their current organic rankings, nor deter potential customers who have found the website via organic search and landed on a “Page Not Found” (404 error) because the URL they landed on wasn't properly redirected.

Plotting out 301 Redirects is relatively simple in the .htaccess file. All you need to do is pull it down from your public_html directory and at the bottom of your .htaccess file start adding your 301 Redirect rules, which would look as such:

301 Redirects .HTACCESS Exponent CMS

These two .htaccess modifications are critical for websites undergoing SEO programs, particularly when that site is going through a redesign.

About the Author

Atlanta SEO Consultant Chris J. EverettThis blog post was written by Chris J. Everett, a small business SEO consultant based in Atlanta, Georgia.

Chris has used Exponent CMS extensively over the past 5 years and writes about topics related to the SEO friendliness of the system.

To learn more about Chris, connect with him on Google+.

 

Advanced SEO Tips For Your Exponent CMS Website (Part I - Robots.txt)

When reading blogs that discuss topics related to SEO, most of the time you'll read about on-site strategies such as keyword optimization, image optimization, cross linking, etc.

Most of these  on-site strategies can be easily executed through the administration interface of your Exponent CMS website.

Some of the mission critical items for SEO that you can't execute through the admin interface of your Exponent CMS must be done on the web server through a FTP or cPanel/WHM type interface.

This post is the first in a series of submissions I'll write over the next few days discussing advanced server-side SEO tips for your Exponent CMS website include editing your robots.txt and .htaccess files, as well as pushing webmaster tools verification files and XML sitemaps to your web server.

In this edition, Part I, I'll discuss how modifying the Robots.txt file that resides on your web server can eliminate issues with duplicate content.

Robots.txt

The Robots.txt file on your web server defines crawling parameters for robots that crawl websites all over the Internet. For SEO, the Robots.txt file is a way to allow/disallow search engine robots (such as Googlebot) that index your web pages from crawling specific directories on your website.

If you're working with a new install of Exponent CMS, the Robots.txt file will be included in your installation with a basic set of disallow parameters that will look like this:

Exponent CMS Robots.txt for Advanced SEO

Because Exponent CMS is a dynamic platform, there are several modules within the system such as blog/news/portfolio or ecommerce that can pose some SEO headaches revolving around duplicate content.

Some of the most frequent issues that I encounter from Exponent CMS websites in terms of duplicate title tags, content, etc., come from the tagging functionality (blogs in specific) and when login/view cart links are hard coded for users on ecommerce websites.

If a robot can crawl a link to a blog tag or a link to login, this often times causes that URL to be indexed – more often than not with a duplicate Title or Description tag as other dynamic pages on your site. The example below shows an ecommerce Exponent CMS website that has had its login module link indexed. As you can see, the meta description is exactly the same as the homepage meta description:

Advanced SEO Tips: Duplicate URLs Robots.txt

You can easily prevent this type of SEO issue by disallowing the /loginmodule (or for newer versions of Exponent the /login) or any other troublesome directories within your Robots.txt file.

In the screenshot below, you can see where this Robots.txt file has added more parameters than the initial file that comes with your Exponent CMS install.

Modified Robots.txt file

Simply pull down this file from public_html through your FTP or cPanel/WHM interface, make these modifications and push that file back up to your web server to ensure you don't experience these easily avoidable SEO headaches.

In Part II of these server-side SEO tips for Exponent CMS sites, I'll discuss how to modify the .htaccess in order to redirect URLs and set a preferred domain URL structure.

About the Author

Organic SEO Consultant Chris J. EverettChris J. Everett is an SEO expert and the founder of Captivate Search Marketing, a digital marketing firm based in Atlanta, Georgia.

Chris has worked with Exponent CMS in a variety of roles since 2007 and continues to work with the software's developers to further enhance its SEO friendliness.

Connect with Chris on Google+

The 'Wizard' Returns to Exponent

The WizardOne feature which didn't make the move from Exponent 1.x to 2.x was the 'Wizard'...essentially a sequential set of forms.  Well 'ta-daaa', we're planning to have a wizard or paged-form feature in the next release (already in the 'develop' code branch)!  This will be a much simpler implementation than available in 1.x, as a 2.x paged form can easily be designed all in one place, instead of having to create separate form pages, etc...  This feature will be available in both the forms module/site forms (event registration now uses site forms) and in templates/views.

You may be asking, 'how does a paged form or wizard work?'  Well in many of the system forms, we use 'tabs' to segregate collections of input, and recently also introduced 'groups' to further segregate sets of controls on a page/tab.  These will still be used in most cases, but in some scenarios a sequential or progressive set of controls is more intuitive.  This is more evident in a complex form requiring a great deal of customer input such as a 'camp registration and release' form.  On the other hand, the 'site configuration' form is NOT intended to be sequential and would be practically unusable if it did not remain as a tabbed form.

How will a paged form work in Exponent?  In the form designer, it will be as simple as adding a 'form page break' control as the first/top control, and placing one where ever you want to begin a new 'form page'.  Exponent will do all the heaving lifting from that point.  If you want to revert to a standard form, you'd simply remove/delete the page break controls from that form using the form designer.  In practice a paged form would have at least two page breaks (including the top one) with one or more being the break(s) between the different pages.

The result will then look something like this.  Exponent performs input validation on all visible controls prior to moving to the next 'page.'  And as the development code matures prior to the next release, we will likely add form module configuration settings to enable/disable certain features like the 'page' description (Basic Information, etc...) appearing below the 'page' caption (Step 1, Step 2, etc...) AND also at the top of the current 'page', etc...

How will a paged form work within a template/view?  In the simplest sense a 'paged' form is simply one with controls grouped inside 'fieldsets' and then a jQuery plugin is used.  The {form} block function has been updated to accept a new 'paged' parameter which now also requires you pass an 'id' or 'name'.  Then within the form you group pages of control with the 'page' block with a required 'label' and an optional 'description' param.  Let's take a module view (mass-mailer) that is currently coded like this:

    {form action=mass_mail_out}
        {group label="Send this Message To"|gettext}
            {control type="checkbox" class="emailall" postfalse=1 name="allusers" label="All Site Users?"|gettext value=1 description='Uncheck to allow user/group/freeform selection'|gettext}
            {control type="checkbox" postfalse=1 name="batchsend" label="Batch Send?"|gettext value=1 checked=1 description='Hide email addresses from other users'|gettext}
            {userlistcontrol class="email" name="user_list" label="Users"}
            {grouplistcontrol class="email" name="group_list" label="Groups"}
            {control type="listbuilder" class="email" name="address_list" label="Other Addresses" size=5}
        {/group}
        {group label="Message"|gettext}
            {control type="text" name="subject" label="Subject"|gettext}
            {control type="html" name="body" label="Message"|gettext}
            {control type="uploader" name="attach" label="Attachment"|gettext description='Optionally send a file attachment'|gettext}
        {/group}
        {control type="buttongroup" submit="Send"|gettext cancel="Cancel"|gettext}
    {/form}

a 'paged' version (if we wanted one) is easily created and would be coded like this:

    {form action=mass_mail_out name='mass-mail' paged=1}
        {page label="Send this Message To"|gettext description="Select Recipients"}
            {control type="checkbox" class="emailall" postfalse=1 name="allusers" label="All Site Users?"|gettext value=1 description='Uncheck to allow user/group/freeform selection'|gettext}
            {control type="checkbox" postfalse=1 name="batchsend" label="Batch Send?"|gettext value=1 checked=1 description='Hide email addresses from other users'|gettext}
            {userlistcontrol class="email" name="user_list" label="Users"}
            {grouplistcontrol class="email" name="group_list" label="Groups"}
            {control type="listbuilder" class="email" name="address_list" label="Other Addresses" size=5}
        {/page}
        {page label="Message"|gettext description="Email Content"}
            {control type="text" name="subject" label="Subject"|gettext}
            {control type="html" name="body" label="Message"|gettext}
            {control type="uploader" name="attach" label="Attachment"|gettext description='Optionally send a file attachment'|gettext}
        {/page}
        {control type="buttongroup" submit="Send"|gettext cancel="Cancel"|gettext class='finish'}
    {/form}

As with all pre-release code, the specifics listed above are subject to change prior to the actual release.

We've also already added another 1.x feature missing in 2.x...'Configuration Profiles' which allows backing up and restoring the current site configuration (on the server).  This becomes really handy in a test or development environment as you can very quickly switch between databases and themes to test a new feature or customization.