War Story: Switching from Movable Type to WordPress MU

As some of you may have noticed, we made the switch from Movable Type (v3.33) to WordPress MU on July 9th. We thought it would be a great idea to discuss why we made the switch as well as the technical requirements of making the switch. We’re currently serving seven blogs, containing 2,034 posts by 47 authors, with 1,924 comments. The switch took roughly 60 work hours including research, and the effort was led by me, an intern, with our product and ops teams supervising.

The most compelling reason for us to switch was WordPress’s usability — managing WordPress is strait up easier from a source code, data, and content management perspective (authoring, user management, etc). There were many specific reasons for the switch as well. First, WordPress, with all of its plugins, can offer an unbelievable amount of functionality. For example, with WordPress we could offer features such as author profiles and archive paging functionality. Our previous installation of Movable Type was also somewhat chaotic, making maintenance and expansion grueling. Find below a feature comparison between Movable Type and WordPress MU.

Keep in mind that the list of features below does not perfectly represent each platform’s feature set. The list instead contains features that we at Redfin wanted for our blog.
wp_table.png

Though this chart suggests that WordPress is the better choice for us, we had to consider the side effects of switching, the largest side effect being older permalinks potentially being broken. Other side effects were a potential loss of data (posts, comments, authors), a requirement for more blogger training, and having to familiarize ourselves with a new platform. Once we decided that we were willing to deal with these side effects, we began the migration process.

clip_image001.jpg

Both Movable Type and WordPress MU offer importing and exporting functionality, which made the task of getting our data into WordPress very simple. The WordPress import function also requires that all authors be in the system before the import begins, so we added our authors before performing the import. The reason for this is because the WordPress import process has a step that forces the importer to make author correlations between the imported data and the WordPress author list. The author correlation step provides a list of authors that were found in the imported data and requests that the importer decide how these authors correlate to the authors in WordPress. Unfortunately, this feature was broken in our installation of WordPress, so we were forced to write a custom script to correct the WordPress MU database by using the old Movable Type database.

With our data in place, the next largest task was to ensure that our old permalinks be properly redirected. To do this, we wrote a script that used the Movable Type database to produce a large set of Apache rewrite rules that redirect old permalink requests. To limit the number of required rewrite rules, we configured our WordPress permalink structure to match Movable Type’s (/year/month/post_title_etc.html). This also required an additional WordPress plugin that forces permalinks to use underscores instead of the default hyphens.

clip_image002.jpg

The last hurdle we ran into during this migration process was achieving our desired link structure. WordPress MU allows blogs to either appear as sub domains (new_blog.domain.com) or folders (domain.com/new_blog). We wanted our blogs to be accessible by blog.redfin.com, sfbay.redfin.com/blog, and seattle.redfin.com/blog, etc, and after lots of fiddling with WordPress, we concluded that we could not use the sub domain option. To get around this, we configured WordPress to use folders (blog.redfin.com/sfbay, blog.redfin.com/seattle, etc). We then configured a virtual host for each blog, sfbay.redfin.com, seattle.redfin.com, etc, to reverse proxy the /blog folder of these virtual hosts to the blog.redfin.com/sfbay, blog.redfin.com/seattle, etc folders. The reverse proxy article showed us the road, but the path we took was slightly different. Instead of using ProxyPass and ProxyPassReverse, we used the [P] option in a RewriteRule. This allowed us to apply other rewrite rules to the /blog folder, where the ProxyPass and ProxyPassReverse option did not.

We’re very happy with WordPress MU. In fact, we’re happier with WordPress MU than we were with Movable Type. The migration process was not easy, but it was worth the benefits of switching to WordPress. Feel free to post some comments if you’d like more specifics about the switch.

Discussion

  • http://www.overheardbin.com Eric Heller

    Thanks Alex! This is awesome! We hate being on MT but really didn’t want to think about what was involved in the transition. Hearing that you spent ~60 hours is a bit daunting, but at least I feel like I’m following down a path that someone has already marked.

    Thanks again!

  • http://devblog.redfin.com/author/alex.loddengaard Alex Loddengaard

    Had the author importing mechanism not been broken in our installation of WordPress, the migration would have been far less time consuming. I should also mention that a decent chunk of those 60 hours was spent figuring out the steps that needed to happen in order to migrate.

  • http://www.brandinteractivism.com Scott Paley

    Hi Alex,

    Thank you for this post. We are about to embark on a similar project and this is very helpful!

    As a matter of guidance, can you let us know what “a decent chunk of those 60 hours” actually means? Basically, if you were going to take this project on right now armed with this blog post, what amount of time would expect this would take?

    Thanks!

  • http://devblog.redfin.com/author/alex.loddengaard Alex Loddengaard

    Hi Scott,

    Most of those 60 hours was spent dealing with the WordPress bug that didn’t correlate authors correctly (I had to write a series of Perl scripts and also manually change a bunch of posts). I would say that if that bug is fixed in the most recent version of WordPress, then the most tricky piece of the whole process is dealing with legacy URLs or setting up a proxy (if you need to for your desired URL structure). If I had to estimate, I would say that everything could be done in 20 hours given no WordPress bugs and a good prior understanding of Apache.

    Let me know what you think, Scott! Hope this helps.

    Alex

  • Stephen Gelman

    Alex,

    I am attempting to do what you did with apache ProxyPass. Unfortunately, there doesn’t seem to be much out there about how that is done. Is there any chance you could email me the apache config necessary to do so?

    Thanks in advance!

  • http://helloecho.com Anton Visser

    Is there any change you can share that RewriteRule rules that you created.