1. Home
  2. Services
  3. Ghost migration

Ghost migration without losing your SEO

If you are moving your blog, newsletter or media outlet to Ghost from WordPress, Substack or another platform, I prepare the migration so your articles keep appearing on Google at their new address.

Every article on your blog ends up on Ghost at its new address.

What’s specific to Ghost

What changes when your publication moves to Ghost

Ghost takes care of much of the technical SEO by itself, but it doesn’t know where your articles used to be.

  • Articles sit at the root: by default each article lives at /{slug}/, tags at /tag/ and authors at /author/. If your blog used dates or categories in the URL, those addresses change.
  • Routes are defined in routes.yaml: this file sets the URL structure and is uploaded from Ghost’s settings. With it you can bring the new structure closer to the old one and save on redirects.
  • Redirects go in redirects.yaml: they are uploaded from Settings, Advanced, Labs. Each rule goes under its code, 301 for permanent ones and 302 for temporary ones, and the file is indented with spaces, never with tabs.
  • The sitemap is created and updated automatically: ghost publishes it at /sitemap.xml and links to it from robots.txt. I check that it includes every article.
  • Canonicals and structured data come as standard: ghost adds canonical tags and structured data to posts and pages. I check that the canonical of imported articles points to their new URL and not to the platform they came from.

How I work

The three phases of the migration

On Ghost the redirect map travels in redirects.yaml, and I test it before the site opens.

Before the migration

  • Defining the scope: moving to Ghost usually comes with a new design, sometimes with a different domain and almost always with new URLs for the articles. Each change carries its own risks, and together they get more complicated, so I first put in writing what changes and what doesn’t.
  • Benchmark of the current situation: I analyse Search Console with at least 12 to 16 months of performance by page and by query, Analytics, the rankings of the keywords that bring you readers and subscribers, Core Web Vitals and inbound links. This is the snapshot we will compare everything against afterwards.
  • Full crawl of the current website: with Screaming Frog or a similar tool I extract every URL, status code, title, meta description, canonical, hreflang, internal link and click depth. On a blog that has been around for years, tags, date archives, author pages and images turn up that nobody remembered.
  • Redirect map: old URL and new URL, one by one, starting with those that bring in traffic or have links. Nothing gets sent to the home page wholesale. Anything without an equivalent goes to the nearest article or tag. The map is tested before the switchover day and uploaded to Ghost in redirects.yaml.
  • Review before opening: while it is being built, the new publication is set to private or kept in a staging environment. I review templates, canonicals, structured data, speed and tag and author pages, check that no internal links point to old addresses and make sure the sitemap lists the new ones.
  • Plan and timeline: I choose a date with no major launches or sends, with developers available on the switchover day and the days after, and with a rollback plan in case something goes wrong.

Migration day

  • I check in production that the 301s work, with no chains or loops, using a large sample of the map before and after the switch. On Ghost I also check that the publication is no longer private and that redirects.yaml contains the latest version of the map.
  • I crawl the new website and the list of old URLs to confirm their status codes.
  • I submit the new sitemap to Search Console. If the domain changes, I verify the new property and use the Change of Address tool.

After the migration

  • Daily monitoring for the first two weeks: indexing in Search Console, 404 and 5xx errors, rankings for the benchmark keywords and organic traffic by page type (articles, tags and pages). To see what Googlebot is crawling I use the Crawl Stats report in Search Console.
  • I update the external links you control, such as profiles, directories, old newsletters or media outlets that cite you, and request changes to the most important links pointing to your website.
  • I compare against the benchmark at 2, 4, 8 and 12 weeks. A temporary drop is normal, but if it still hasn’t recovered after two months, the cause needs to be found.

Before we start

What I can’t guarantee

  • That there will be no drop at all. After the switch, traffic fluctuates for a few weeks, and what I do control is that it doesn’t last long and that no article or link is lost.
  • An exact recovery date. It depends on how many URLs change, how many articles you have and how quickly Google recrawls them.
  • That Ghost will bring you more readers on its own. It takes technical work off your plate, but traffic still depends on what you publish.

Questions

Frequently asked questions about migrating to Ghost

A temporary drop is common while Google crawls the new addresses. If every old article redirects to its version on Ghost, that traffic can return to its pages.

It depends on how you had them set up. If your articles were already at the root with their slug, they can stay the same. If they included dates or categories, that structure can be reproduced with routes.yaml or redirected with redirects.yaml.

Ghost organises content with tags, which live at /tag/. The categories from your previous website become tags or are redirected to the nearest one.

No. I’m an SEO consultant in Valencia, but I carry out migrations remotely for publications all over Spain.

Are you moving your publication to Ghost?

Tell me what's happening with your website and I'll tell you whether I can help and when I'm available.

Share this page