Migrating from WordPress to Hugo

2020-11-21 4 min read

A little under 3 years ago I wrote a post entitled Site Redesign and Migration, where I unveiled a full redesign of my website after having moved it off of the Squarespace. Three years before that I started my website on Squarespace, after considering a host of other alternatives. And now, after many months of consideration, and after reading many blogs about why one should or shouldn’t use a Static Site Generator (ex: “Why I Don’t Use a Static Site Generator” by Kev Quirk), I’ve opted to migrate my website from WordPress to Hugo.

So, why am I making the change?

In some ways, Hugo is actually more complex than Wordpress. I can spin up a WordPress website on almost any hosting platform out there. I’ve been using Amazon LightSail, but I could have just as easily used DigitalOcean, Google Cloud, or WordPress.com.

Hugo is a Static Site Generator (SSG), which means that I design the website in Markdown, and then Hugo generates a static HTML website from that. It’s not as simple as WordPress, where I could simply go into the web interface, type up a post, hit “Publish”, and it appeared on my website. I have to open a Markdown editor on my computer, write the post, render it locally to ensure I’m happy with the content and design, then commit it to a Git repository. Once committed, my website has to be rebuilt and redeployed to the server.

But that last paragraph actually hit on one of the largest reasons for switching to Hugo: my website is a Git repository. Even if I choose to migrate from Hugo to some other SSG in the future, my posts are all already in Markdown format. As long as whatever I choose uses Markdown (which many SSGs do), I just have to rearrange the directory structure, and then publish. And even if I choose to return to a full CMS, there are some that support Markdown, so in many ways I’m future-proofing my content.

Another reason for leaving Wordpress is actually the requirements for running a full-blow Content Management System (CMS). I find as I grow older, I no longer am interested in keeping servers up to date to protect them from the latest vulnerabilities. And so, the fewer requirements my website has to operate, the better.

And finally, I simply don’t use most of the features of WordPress, nor do I care to at this time. I don’t currently enable comments on my posts. I’ve used analytics in the past, but that is possible on Hugo as well.

What all did this migration entail?

First of all, I actually manually went through every page and post on my existing website, and copied them into Markdown format on my computer, verifying that links worked correctly, pictures and videos inlined in a post looked right, and selecting where they would reside on my website. Most pages on my WordPress website were directly copied to top-level pages on my Hugo website, as were some of my blog posts. However, I chose to move a majority of the posts that I wrote for my 100 Days to Offload experiment into an Archives section, unless I felt that they would be useful to others in the future.

Next, I selected a theme that I liked the look of, and then tested the settings on my local computer. I also initialized a Git repository for all of the files I had created, and pushed the changes to GitHub. (I looked at using GitLab or another alternative, but for now the easiest way to deploy seemed to be with GitHub)

Finally, I spun up a new app on the DigitalOcean App Platform, tied both my Git repository and my domain name to the app, and published my website.

And so, thus begins the latest stage of the story of my website. Hopefully, I will continue using Hugo for many years to come. Although, if history is any indicator, in approximately three years I will be considering something else…

Edit 1: Due to the design of Hugo, my RSS feed now is located at https://www.justinvollmer.com/posts/index.xml. I will try to get a redirect working, but I am not confident that will occur.


For more information on deploying a Hugo website to the DigitalOcean App Platform, see this guide.