> ## Content Index
> Fetch the complete content index at: https://blog.melardenio.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# Fifteen Years of Blog Posts and the Migration That Fought Back
- URL: https://blog.melardenio.com/fifteen-years-of-blog-posts-and-the-migration-that-fought-back/
- Published: 2026-09-13T11:51:32.000Z
- Updated: 2026-11-09T03:49:03.000Z
- Description: Moving 15 years and almost 1,300 Blogger posts to a self-hosted Ghost blog sounded simple. It was not simple.
- Author: Rommell Ardenio
- Tags: Software & Homelab

I'll be honest — this one took it out of me a bit.

This blog has been sitting on Blogger for close to fifteen years. Fifteen years of whatever I felt like writing about at the time: gadget reviews nobody asked for, ECE board exam results I posted because people kept searching for them, ABS-CBN station ID trivia, motovlogging notes, scooter maintenance guides, random photos, even a test post or two I forgot to delete back in 2011\. Almost 1,300 posts. That's not a blog anymore, that's a small archive of a whole chunk of my life on the internet.

Moving all of that to a self-hosted Ghost setup on my own homelab sounded simple in my head. It was not simple.

## We'd actually already tried this once

Turns out there was already an attempt at this migration sitting on the server from a couple weeks back — a full export, a conversion script, the works. I found it, got hopeful for about five minutes, then realized it never actually worked. The blog was still just sitting there with the default "Coming soon" post. Whatever was tried before had quietly failed and nobody circled back to it.

So we started digging into why, and it turned out the earlier attempt was trying to shove the content straight into the database by hand, which is exactly the kind of shortcut that looks like it should work and then just doesn't, because Ghost doesn't store posts as plain HTML anymore — it wants its own structured format under the hood. Bypass that and Ghost has no idea what you actually gave it.

## Fifteen years of content means fifteen years of weird edge cases

Once we switched to doing it the way Ghost actually wants — through its own import tool instead of a shortcut — I thought we were basically done. Nope. The whole import kept failing partway through, no partial progress, just a flat rejection, and figuring out which post out of nearly 1,300 was the problem felt like searching for one bad bulb in a string of Christmas lights.

Eventually we found it: a couple of posts from 2009 and 2010 that had literally nothing in them — empty, blank, probably drafts I never finished or accidentally published back then. A few more were nothing but an old embedded photo or, in one case, an ancient Flash video player from an era when that was still a normal thing to put in a blog post. Ghost's importer looked at those and basically said "there's nothing here I can work with" and stopped the entire import cold.

We patched those handful of posts just enough to give them something real to hold onto, and tried again. And again it failed — on a different post this time, one I'd genuinely forgotten existed. That's what fifteen years of posting does. You accumulate stuff you don't remember writing, in formats that made sense at the time and don't anymore.

## We didn't get it perfect. We got it there.

After a few rounds of finding a break, fixing it, and trying again, all 1,286 posts finally went through. I won't pretend everything came out flawless — a lot of the old images I embedded from other websites back in 2010 and 2011 are just dead links now, because whatever site I linked to has long since disappeared or moved on. Fifteen years is a long time on the internet. That's not something migrating the data can fix; that's just what happens to the web over a decade and a half. The photos I actually uploaded to Blogger myself, though, those came through fine.

What mattered to me wasn't a flawless transfer. It was that none of it got left behind. Every post, every year, every random thing I wrote is actually still there, searchable, readable, sitting on infrastructure I control instead of waiting for a platform to decide it's done supporting old blogs. We tried our best with fifteen years of accumulated mess, and in the end, that was enough.

Small bonus round after all that: once everything was live, I noticed new posts weren't even showing up on the homepage — turned out the theme was built to organize everything by topic tags instead of by date, and with almost 1,300 old posts now in the mix, anything new just got buried. Swapped it for a standard theme so new posts actually lead the page like a blog should. Small thing, but after the day I'd had, it felt like the last domino.

## Related reading

- [Ghost Import Error: ValidationError: Invalid Lexical Structure](https://blog.melardenio.com/ghost-import-error-validationerror-invalid-lexical-structure/)
- [Ghost Homepage Shows Tags Alphabetically Instead of Latest Posts: Fix](https://blog.melardenio.com/ghost-homepage-shows-tags-alphabetically-instead-of-latest-posts-fix/)
- [I Deleted 1,313 Tags From My Blog, and It Felt Great](https://blog.melardenio.com/i-deleted-1-313-tags-from-my-blog-and-it-felt-great/)