Based on advice from Aussie MVP Troy Hunt I started looking into Ghost as a better blogging platform than Blogengine. The fella seemed to be right, it's offering a much better experience, but how to set it up and get your content across?

Well, Troy himself offered great advice on getting the hosted version (Ghost Pro rather than just Ghost) and using Cloudflare to provide HTTPS for free in the bargain in his post here; Troys New Blog

That covers the initial setup, but nothing about migration or what platform he was initially using.

Casting around the net for a few articles the best one was by Brian Peek here; Brian Peek Migrating Blogengine

This helped me out a lot, however there was a significant difference. Brian is self hosting, therefore has access to FTP and all that good stuff. With Ghost Pro it's hosted so you don't get that sort of access. I needed to migrate in another way. That said I have a brain that likes to hack problems and it was simplicity itself.

I downloaded all the images from my Blogengine site, then I simply created a fake story in my Ghost Pro blog that would never be published. Clicking the add image button as below you can select loads of images at once, i.e. bulk upload! The new urls in Ghost were clearly shown in the authoring experience, which I could then map to the legacy links.

Capture

Then I exported the Blogengine content to BlogML (which you do from Blogengine.net admin pages -> import/export)

Capture2

To make things more complicated I was moving domains too, from my old trusty the-north.com to jamiemcallister.com. So I opened the BlogML XML in Notepad++ and carefully did some find and replace to manipulate the file. I changed the domains, and the expected image paths to match the image uploads I'd done through the Ghost Story editor earlier.

So far so good, but Ghost doesn't accept BlogML when importing content. You need to convert the format.

Brians blog pointed to this tool as being promising; BlogEngine2GhostConverter

However I'm a bit paranoid about downloading and compiling stuff like this. In the end I spun up a throw away Virtual Machine which I compiled this code on then ran the tool to convert to the JSON format Ghost favors.

It took a while but the new file parsed the content into Ghost without issues. Not sure why such key functionality is still under the 'Labs' i.e. experimental part of the platform?!

Capture3

Now I need to setup permanent redirect notifications from the old blog to the new. Search engines can penalize you for having duplicated content, so it's good to show google your intent. I'm still putting this together and will post the solution when it's done.