I Deleted 1,313 Tags From My Blog, and It Felt Great

I Deleted 1,313 Tags From My Blog, and It Felt Great

Here's a number that stung: zero. That's how many clicks Google sent to this blog in the last three months. Impressions? One. A single person, somewhere, saw one of my posts in a search result and politely scrolled past.

This blog has 1,297 posts going back to 2009. So I gave myself a month to fix it, opened a project in Tala (my own task app) called SEO Project for Ghost, and started pulling on threads. This is what the first three days looked like.

Step one: see the blog the way Google sees it

Before changing anything, I crawled every URL in my own sitemap: 2,600 of them. Every single one returned a healthy 200. The problem wasn't anything broken. The problem was what was there:

  • 1,303 tag pages for 1,297 posts. And 1,118 of those tags were used by exactly one post. Think "pgt season 2 semi finals", "facebok", "googlel". Old Blogger habits never die, they just get imported.
  • 1,276 posts with no meta description at all.
  • 931 posts under 300 words, and 551 under 150.
  • Every tag page had a title over 60 characters, because Ghost tacks my 70-character site name onto the end of each one.

Search Console confirmed it: 242 pages indexed, 3,430 not indexed. Google had looked at my blog, shrugged, and filed most of it under "nah".

A month of tiny tasks

I don't trust big vague goals like "improve SEO". So the campaign became 24 daily tasks, D1 to D24, with 123 small steps between them, all living in Tala with due dates through October 31. Claude typed them in for me through the Tala web page, which was fun to watch until it found out that a React form ignores text you set behind its back. It had to type into the box properly, like a human.

Then we hit the first real wall. Google Search Console has to be opened in a browser, and when the automated browser tried to sign in, Google said no:

"This browser or app may not be secure. Try using a different browser."

Fair enough. Google really doesn't want robots logging into Google accounts, and I'm not going to argue with that. I did the Search Console and Bing parts myself, and the robot stuck to the parts it's good at.

Sorting 1,297 posts without reading 1,297 posts

The fix for the tag mess was simple on paper: replace 1,300 throwaway tags with a handful of real topics. Doing that meant deciding which topic each post belongs to.

We wrote keyword rules: titles mentioning Suzuki, Yamaha, Hayate or a scooter go to Motorcycles & Scooters, LTO and NBI go to PH How-tos, and so on. The first pass left 556 posts unsorted. Then I found out why it was so bad: an escaping bug had turned every \b word boundary in the new rules into a literal backslash. The rules were looking for a backslash followed by "b", which, unsurprisingly, almost never appears in posts about scooters. One fix later we were down to 364 posts for manual review.

The rules also flagged three groups with no ranking value at all: 212 gossip and entertainment posts, 57 board-exam passer lists copied from the PRC, and 52 expired promos. A Cebu Pacific seat sale from 2014 isn't helping anyone in 2026.

Nine colourful topic tags with post counts: Tech Tips and Gadgets 186, Travel and Life 173, Motorcycles and Scooters 155, Cars 29, Software and Homelab 25, AI and Automation 21, PH How-tos 21, Broadcast Engineering 12, RC and Personal EV 11
The 9 topics that replaced 1,319 tags.

The mistake I almost made

The plan said: write meta descriptions for the 10 most important posts first. With zero clicks there's no traffic to rank by, so the first draft picked the longest posts without a description. Six of those ten turned out to be the copied exam-result lists. Some of them run past 18,000 words, because they're just names.

Polishing copied content is a waste of time and arguably makes things worse. So we threw out the length rule and went looking for posts I actually wrote from experience: renewing a Qatar visa, the NBI branch list, my Daihatsu Charade engine swap, setting up a Hobbywing ESC at the RC track in Doha, restoring a Yamaha X1. We also skipped anything copied: folk tales, a presidential speech transcript, press releases, and a news article that still had someone else's byline on it.

The result was 30 new meta descriptions, each between 120 and 155 characters and each describing what's genuinely in the post. All 30 were checked on the live pages afterwards.

Safety nets before the delete button

Deleting 1,300 tags and unpublishing hundreds of posts on a live site is not something you do on vibes. So, in order:

  • We took a snapshot through the Ghost Admin API of every published post's tags and meta fields, plus every tag.
  • I made a full Ghost content export myself, because the integration key can't call the export endpoint. Only the owner's own login can.
  • We did a dry run first, which told us exactly how many posts would change (612) and how many tags would go (1,313).

Two gotchas showed up along the way. Ghost's tag API quietly capped limit=all at 100, so our first snapshot only had 100 of 1,319 tags. We caught it and paged through the rest. And a successful DELETE comes back as an empty 204, which would have crashed our JSON-parsing helper on the very first delete. That one was caught before the job ran, which is the best time to catch anything.

The big clean

Then we pressed go. Every action was written to a log file, one line per change:

  • 9 topic tags, each with a real description and a short title. The four that already existed kept their URLs.
  • 612 posts filed under their topic.
  • 1,313 old tags deleted. Posts don't lose anything when a tag goes; the empty tag page just disappears.
  • 300 posts reverted to draft: the short gossip posts, the copied exam lists and the expired promos. Not deleted, just unpublished. If I miss one, it's a single click to bring it back.

Zero failures. Then we checked the live site. The unpublished posts and deleted tags return a clean 404, the posts we kept still return 200, and the new tag pages show their new titles and descriptions.

Bar chart: before, about 2,600 sitemap URLs (1,297 posts plus 1,303 tag pages); after, about 1,000 (997 posts plus 9 topic tags)
Before and after: what Google gets in the sitemap.

The sitemap went from about 2,600 URLs to about 1,000. Instead of handing Google a phone book of empty tag pages, the blog now hands it 997 posts and 9 topics that actually mean something.

Did it work?

Honest answer: I don't know yet, and nobody can know in three days. Google has to recrawl, notice the 404s and settle on a new opinion of the site, which takes weeks. What changed today is that the blog stopped working against itself. The ranking part comes from what's next: deciding on the 366 thin posts that are still up, and then writing new posts about the things I actually build.

What I'd tell you if you have an old blog too

  • Crawl yourself first. You can't fix what you haven't counted.
  • Tags are topics, not keywords. If a tag only has one post, it isn't a tag, it's a typo with its own URL.
  • Don't polish junk. Spend your effort on posts you'd still be proud to share.
  • Unpublish before you delete. A draft is free insurance.
  • Back up, dry-run, log everything. Boring, and completely worth it.

I'll post again at the end of the month with the Search Console numbers, whatever they turn out to be. If the clicks go from zero to anything, you'll hear about it.