I’m in the process of migrating from a self-hosted Ghost blog to Hugo on Netlify.
Step 1
Log into your Ghost blog.
http(s)://<your-blog-url>/ghost
Go to the Settings tab and export your content. See documentation on Ghost.org.
Step 2
Go to jbarone/ghostToHugo, install the package and use it to convert the files to a Hugo-compatible format.
You might get errors while converting dates. Try the -d "2006-01-02T15:04:05.000Z"
format:
ghostToHugo <your-ghost-backup>.json -d "2006-01-02T15:04:05.000Z" -p <output-directory-name>
Step 3
Navigate to your new Hugo folder. Install a theme. Do further setup, for example for Netlify.
(Optional) Step 4
Use pandoc
if you need to convert files from HTML to Markdown.
Let’s say that ghostToHugo
converted your json file into a new file with Hugo frontmatter. But the content itself is still HTML.
Like so:
+++
categories = ["actual plays", "solo", "lightweight", "indie"]
date = 2012-12-08T23:00:00Z
draft = false
slug = "wu-sharp-four"
tags = ["actual plays", "solo", "lightweight", "indie"]
title = "Actual Play: Wu# With the 9Qs: Qs 7-9"
+++
<ul>
<li><a href="http://dieheart.net/wu-sharp-one">part 1</a> (setup)</li>
<li><a href="http://dieheart.net/wu-sharp-two">part 2</a> (Qs 1-3)</li>
<li><a href="http://dieheart.net/wu-sharp-three">part 3</a> (Qs 4-6)</li>
</ul>
If you use pandoc
to convert the complete file from HTML to Markdown, the program will convert the frontmatter, too.
Unfortunately, you can’t tell pandoc
to ignore yaml or toml metadata in HTML.
But you can use sed
to tell pandoc
which lines to start from. Then you can merge the converted file back together with the frontmatter.
Check on which line your content starts.
Let’s say that you want to convert all files beginning with line 12, using fish shell.
for file in *.html
begin
sed -ne '1,12p' "$file"
sed -ne '12,$p' "$file" | pandoc -f html -t markdown
end | tee (basename $file .html).md
end
This command loops over all HTML files in a folder.
We use fish’s begin ..end
block to run two commands at once.
The first one takes the first 12 lines and leaves them unchanged. The second command takes the lines 12 to the end of the file and pipes them to pandoc
.
Bot of these commands go to stdout. We can then use tee
to create a file with the file ending .md
.