Noobie Guide to move an old site from wordpress to Ghost

Hello,
A lot of my pet projects are done in wordpress, i would like to move another one of them on Ghost.
But i ve a lot of unanswered question in my mind. Some had already a reply in this forum some are still open: I would like to make a FAQ / chain of thought post to help everyone who is in my position.

I ll use my own domain and example to ground the answers, but i ll gladly expand the reply.

Context
I ve this website done in wordpress ( https://www.grappling-italia.com/ ) it s more than 15 years old, so it s a mess - i ve also lost a lot of ranking and such (from 7K a day to less than a 400) management is painful, and while ghost is NOT the best solution ( internal link is still lacking, no custom post and so on) I am willing to move it.

Moving a website means:

  1. Getting a GhostPro account
  2. Moving the content preserving the URL structure
  3. be sure all link are OK.

Step 1
Easy enough, BUT i ve some other content for example Trova palestra vicino a te - Directory di Palestre di Arti Marziali e Sport da Combattimento. is a different wp installation than the main root and so is /shop. ← and i want to keep it that way
is it possible to have the main domain pointing to Ghost and a sub directory pointing to another server?

I know it s a IT issue, but i ve not found a defintive answer - you can do it with Apache’s proxying but i ve not idea if i can do that on ghostPro hosting - is that possible?

Step 2
exporting and import on wordpress is “easy” and so is with Ghost: here it describes how to create “permalink” -

and this

i ve not understood if you can build different path for different Post type.
I ve not understood how to have the right link structure (mine is kinda long and complex: /%category%/%year%/%monthnum%/%day%/%postname%-%post_id%.html ) and how to map Wp Category to Ghost Tag

Step 3
for this i am just gonna check manually and run ahref or something.

Am i forgetting something?

Manolo

This isn’t supported directly in Ghost, but you can put a Cloudflare worker (or a similar service) in front of Ghost, and proxy the /shop urls to a different server.

The WP import tool converts categories to tags. For your link structure, I’d think about putting what was the category in the first tag spot, which means you can refer to it as {primary_tag} in the routing.

Looking at your current URLs, I’d recommend a redirects.yaml file and making use of regular expressions

Be sure to check that your images are moved and pointing at new URLs, not the ones on the old server. (They can look fine… until you turn off the old server, and then everything is broken.)

Here’s a related blog post I wrote:

1 Like

Four ‘gotchas’ I’ve experienced doing this recently.

  1. The Ghost export plugin automagically changes the name of the /uploads directory to /wordpress for subsequent import into /content/images. You have to rename the downloaded image directory appropriately. Huge zipped image files might not upload, so split them into convenient 100-200 Mb zip files. I think these need to be done manually zipsplit does not work. As mentioned in another thread, files that are not images and material outside the WP /uploads/YYYY directory structure can mess things up. Prune this stuff first before uploading.
  2. The categories and tags translation from WP to Ghost really only makes sense if they were very well organised in the first place. Even then, Ghost’s use of primary tags might break things. I ended up wiping all the tags (~4000 of them) from the downloaded JSON and reallocating them based upon post content. A smarter user than me might do this with AI.
  3. Instead of AHREFS recommended by @Cathy_Sarisky I rolled my own and used lychee for simple link checking. It’s fast, caches results and has regex’s to handle stuff to ignore (a real bonus for my content which has lots of academic references and a billion redirects).
  4. Some WP gallery plugins leave weird HTML that might need manual attention or a better-crafted regex than I’m capable of to fix them. YMMV.
2 Likes