As I had mentioned in my previous post, GraffitiCMS appeared as if it was on life support, so it was time to consider a new platform for this site.  The impetus to me wanting to make the switch was worrying how I was going to migrate my existing content URLs to the new format for the chosen platform.

After much research,  I finally settled on WordPress mainly because the community support for things like plugins and widgets which allowed me resolve the URL remapping issue quite easily.

While there are many CMS systems out there, both paid and free, it really came down to how extensible the platform would be based upon the community that uses it.  I was not thrilled to be using PHP as I am more familiar with the .NET technologies, but considering I don’t have a lot of time to develop for the site, I wanted something that I could find supported code for.

So since I was hosting GraffitiCMS on IIS6,  I upgraded my site to be hosted on IIS7 because of the URL rewrite plugin that is available.  This allows me to specify a list of old URLs to rewrite to new URLs in the WordPress format by issuing 301 responses so that search engines recognize the content has moved.  This should minimize the impact to SEO, and allow existing sites which linked to my site to still function.   This provided similar function to the .htaccess file used Apache web servers.  If you are using IIS6, there is a .htaccess solution from Micronovae’s IIS Mod-Rewrite module available.  However, as I mention below, with some of the WordPress plugins available you can also handle the redirects.

Some prerequisites to migrating to WordPress is that you must install PHP on the server that is going to host your blog, as well as have access to a MySQL instance which will house your database.

So here are the steps I used to migrate from GCMS to WordPress.

  1. Export existing content from GCMS into a format that can be imported into WordPress: This was accomplished by the tool created by Jon Sagara called GraffitiToBlogML (Jon ported Curt’s original VB code to C# which I prefer.) which will export your content into either MoveableType export format or BlogML format.   I did have to modify Jon’s code to include Extended Post information and not just Body information since I had used the extended post feature of GraffitiCMS.  If you need to know how to do that, please drop a comment, and I will post those details.   I used Jon’s app to export my content into the MoveableType format, as there didn’t appear to be a direct imported for BlogML in WordPress.  In hind sight I didn’t realize it did not export the tag data, so you might want to modify the code to see if it can support exporting tags
  2. BACKUP! BACKUP! BACKUP! :  Backup your GraffitiCMS database, and backup your GraffitiCMS files on your site before you modify anything so in case you need to revert back you can.
  3. Download the latest WordPress release and upload it to your website: You can create a sub-directory on your site named "wp" and copy all the WordPress files in there.  However, doing this will yield needing the "wp" in all of your links, which for me in an OCD kind of way I was not happy with.  Since GraffitiCMS is .NET and WordPress is PHP I was able to upload WordPress to the the root of my site, since there were no conflicting file or directory names.  This also had the side effect of letting me configure and update WordPress while GraffitiCMS was still serving content.
  4. Import GraffitiCMS data into WordPress: Since I exported the data previously,  I used WordPress’s import function to bring in posts, comments, and categories.  It worked quite well with using the MoveableType format prepared by the above mentioned application.
  5. Configure WordPress and Install Plugins: Follow the current setup guides on the web, and use these plugins below to achieve similar functionality to what you had in GraffitiCMS.  You might want to leave some of these plugins inactive so you can configure your site url redirections before you actually start redirecting. It should be noted that if you want to use the “pretty permalink” (no index.php) option, you will need the .htaccess or the URL Rewrite rule to do this.  I was not able to find a way with the Redirection plugin below. 
    1. Redirection – A great plugin where you can map the old GraffitiCMS URLs to the new WordPress URLs.  It also allows you to track links which issued a 404 error so you can adjust your rule set to match how your site is being used.  It was quite simple to create an import file in CSV, .htaccess, or XML where I was able to provide the old and new URLs.  I used the 301 rewrite function so search engines will pick up the new links.  Remember to also update the links for any RSS feeds you had in your site for categories or tags as well.
    2. Google Analyticator – An integrated plugin that allows you to use Google Analytics which also includes a module for the WordPress dashboard to display latest statistics.
    3. Woopra Analytics – My favorite web analytics engine includes a dashboard module for real time data on who is visiting your site.
    4. Google XML SiteMaps – Sitemaps are generated when you update your content so they can be crawled by Google, Yahoo, or Bing (or other search engines).
    5. All in One SEO Pack – GraffitiCMS really had a nice design which was well thought out for SEO optimization.  This plugin uses many of those same rules with your content to achieve similar results.
    6. Easy Adsense – If you have Google’s Adsense ads on your site, this is a great way to integrate them into your content.  It allows dynamic placement to adhere to Google’s policies as well.
    7. Akismet – The comment SPAM technology that was used in GraffitiCMS.
    8. Disqus – A full featured comment system which allows federated use of OpenID,  FaceBook credentials for having conversations on your content.  It replaces the default Comment system in WordPress and includes Dashboard modules for tracking conversations.  It also allows you to import your existing comments from posts.   Install this one after you import your existing GraffitiCMS data so the comments exist to be imported.
    9. Yet Another Related Posts Plugin (YARPP) – Adds links of related posts from your site to the bottom of posts and RSS feeds similar to one of the modules that was available for GraffitiCMS.
  6. Switch to WordPress from GCMS: After you have all your content in WordPress, your URLs mapped out, and you are ready to make the switch,  make the index.php on your root the default page to load.  Also activate the redirector plugin so your old links now go to your new content.  Hopefully all is well,  but expect to be checking your 404 logs and adjusting your rules.
  7. Remove GraffitiCMS files: After you have been running your new WordPress site for a few days,  and are sure this is the direction you want to go in, you can remove your legacy GraffitiCMS files.   Be aware if you used the IIS7 URL rewrite module, these rules are stored in the Web.config file so you might still need that.
  8. Monitor Search Engines and Logs: If you setup all your redirection information and verified that the new sitemap.xml contains your new links search engine crawlers should rediscover your content and update your pages within their results.  Also, if you use Feedburner you might need to update your sites syndicated feed URL.

That really should be all there is to it.   It will take some time to get used to the differences of WordPress from GraffitiCMS, but so far I am very happy I made the move.  GraffitiCMS had much promise of an easy to deploy app, which looked like it might build a good community following, but it didn’t quite make it that far.  GraffitiCMS definitely had a quicker deployment ability, but I think the community support for extending WordPress makes up for the learning curve to get similar results.

If you have any questions, please post it in a comment below and I will see what information I could supply.  Overall, I felt the process was pretty painless, even when working with a completely different platform.


.htaccess definition for “pretty permalink”:

To create a .htaccess file, open up your preferred text editor and enter in the following:

# BEGIN WordPress
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
# END WordPress


IIS7 URL Rewrite module for "pretty permalink"