Overview
This post is to provide an idea about what all things needed to be taken care while migrating from Ghost CMS to Zola SSG, what to expect
Note: Based on my current requirements, hugo seems best match for me.
About my usage
Over time, managing updates, security, and backups for various platforms became a significant overhead. I want a simpler approach with a minimal maintenance efforts.
As part of it, I have been experimenting static site generators (SSG) from a couple of years, started with Hugo. Lately, came across zola, which meets most of my requirements and is more stable.
After trying out the different platforms my requirements do have changed for personal blogs.
- Ability to focus more on content writing
- It should be done quickly with less overhead.
- Stability
- Minimal Maintenance
- less coding :)
- Using own domain
Additionally, finding the right theme, choosing the hosting platform and also it should be under budjet.
Why Zola SSG?
Earlier my security blog was hosted on the Ghost platform (Self Hosted), where i didn't have much touble with Ghost, rarely i get any issues related to platform itself. It was easily upgradable and can take backups quickly. I also have an automation script in place which will do the job for me in frequent intervals.
The difficulty in finding a theme that perfectly matched my needs prompted me to explore other options.
As, i write most of my notes in org-mode, markdown for reporting purposes, which convinced me to move to Zola as it uses Markdown. Hugo was also an option, as it even allows me to write the posts in org-mode file format. The content structure, configuration, and deployment were so easy to follow in Zola.
This post was intially written in Markdown and built with Zola, deployed on Cloudflare pages. Currently i moved to Hugo with Org-Mode and still deployed on Cloudflare Pages.
Migration Process
> If you are starting from scratch, you can skip the below section.
After exploring over the net for some time, found a few old projects which have been written for ghost to Zola migration. Later realized that, those were written for older version of ghost platform.
- Found this one ghost-to-md, which is close to my needs. It helps in converting the ghost exported content i.e. JSON to Markdown. With a minor tweak to the output template, allowed me to complete the conversion successfully.
Example:
func mdFormat() string {
return `+++
title = "%s"
slug = "%s"
date = %s
updated = %s
[extra]
social_media_card = "%s"
+++
%s
`
}- Next, I copied all the `images` folder from ghost content directory directly into the Zola `static` directory and updated the image paths in the Markdown files accordingly.
-
Later, I used search and replace and added few of the following:
- Updated broken URL's, bookmarks and references
- Updated post's metadata
- Added `draft = true` to tag draft posts.
- Missing Tags
- Using the GitHub, finally deployed all the content onto Cloudflare pages.
Conclusion
Overall, migrating to Zola has been a positive experience so far. It's given me a lot more control over my blog and simplified my workflow considerably. While there were some hiccups along the way, but i was able to get it work. I wouldn't necessarily recommend my exact migration process to everyone, as it was tailored to my specific setup. But if you're feeling overwhelmed by any CMS or looking for a more minimalist approach, I'd definitely encourage you to explore Zola. For me, it seemd to be a good fit, and will provide an update after using it for a while longer.
Updates:
2025-08-08
- The subscription managment, Analytics feature seemed to be much needed for my usecases. It became challenging with integrations and need to move back to Ghost again.
- Themes for Zola is growing. Currently, i spent good amount of time in tweaking it to match my preferences. Which i felt like its more efforts than on focusing on content.
- Overall Zola SSG is still good for minimal and markdown friendly users.
2025-08-12
- The following posts are hosted on hugo using the emacs org-mode.
2026-02-01
- Based on my requirements, the hugo seems to be better option. Therefore migrated the portal to hugo.