8 Steps for Resuscitating a Neglected WordPress Blog

When I finally decided to rekindle my blogging activity in 2015, I had two neglected self-hosted WordPress instances in desperate need of some TLC. Here are the 8 things I did to brush off the cobwebs and get derekhat.com back into fighting shape.

1. Update WordPress

WordPress accumulated quite a few new features during the years I wasn’t actively blogging. The first thing I did was make sure I was on the latest and greatest version. Updating is a no-brainer although there is a risk that your collection of old plugins and possibly your existing theme won’t play well. I did the upgrade then updated all plugins with updates available.

In hindsight I wish I had reverted to a very basic theme and deleted all my existing themes and plugins before updating so I could start with a clean slate. At one point I broke the whole site, including the admin section, by activating an older theme with the latest WordPress. I had to change the active theme directly in the database to recover.

2. Clean Up Spam

While I was neglecting it, this site collected an embarrassing number of spam comments. Although the Akismet and Bad Behavior plugins were stopping most spammy comments, some were slipping through and I wasn’t moderating because I was not receiving email notifications about the comments (see #8).

The first thing I did was to install the WP-reCAPTCHA plugin that uses reCAPTCHA 2 to stop spam bots in their nasty little tracks. reCAPTCHA 2 “uses an advanced risk analysis engine and adaptive CAPTCHAs to keep automated software from engaging in abusive activities on your site.” In other words, reCAPTCHA 2 uses different types of checks of humanness based on the output of machine learning algorithms. Rather than just relying on distorted text, reCAPTCHA 2 has multiple tricks up its sleeve such as selecting images:


Then I combed through the comment backlog and deleted anything that smelled of spam. Most of the spam comments were on a handful of more widely linked-to posts, which makes sense. I considered closing comments on older posts to neutralize this behaviour but I want to see how well reCAPTCHA 2 controls things on those posts for a while.

3. Update WordPress Theme

With the software updated and the spambots held at bay, I wanted an uncluttered theme that looked great on a phone. I ultimately chose Arcade Basic and I am really happy with it, although I haven’t quite come to terms with serving up the massive header image to mobile visitors.

There are is an amazing selection of free and cheap responsive themes out there for WordPress. Picking and tweaking a theme was the most time-consuming part of resurrecting this site.

4. Kill Off Old Content

I have content on this site going back to 2006; there are pieces that I am proud of but there is also some detritus. Starting with the most recent content, I have gone back through posts and purged content that I feel no longer needs a home on the Internet. I am using a plugin called 410 for WordPress that serves an HTTP 410 status code instead of an HTTP 404. I’m not sure how important this distinction really is but it’s low overhead while I’m already manually deleting old posts.

An HTTP 404 status code is what a web server uses to tell the browser that the requested page was not found but that it might be available again in the future. An HTTP 410 status code is what a web server uses to tell the browser (and search engines) that the requested page was intentionally removed and won’t be coming back. Over the years there has been speculation that search engines would penalize a site with a lot of 404s for previously working URLs because it was a sign of a lower value or lower quality site. More recently I’ve read that Google treats 404 and 410 responses the same. So it might not matter but at least a user who stumbles upon a deleted page gets a slightly more helpful message than “Not Found”:


5. Replace Feedburner Stats with a Plugin

Remember when Feedburner was all the rage? It provides stats on your RSS subscribers, generates a browser-friendly view of your feed, manages email subscriptions to your feed, injects footer text or ads into your content, etc. I was a big fan of Feedburner but with good feed statistics plugins available for WordPress these days, I really didn’t need an extra site to visit regularly.

6. Replace Feedburner Email Subscriptions with MailChimp RSS-to-Email

In addition to feed statistics, I was using Feedburner to provide email subscriptions to my posts. These days, MailChimp offers an RSS-to-Email service with three features I find compelling:

  1. More control over formatting
  2. Rabid attention to compliance with legislation such as CAN-SPAM and CASL
  3. Ability to send a single digest email per day or week instead of one email per blog post

It was trivial to export the email subscription list from Feedburner and import it into MailChimp.

7. Install Jetpack

I had heard about Jetpack but did not realize how awesome it is. When the dust settles, I’m not sure how many features I will stick with but the ones that I’m excited about right now are:

  1. Protection against brute force login attempts
  2. Site statistics
  3. Replaces paging with infinite scroll
  4. Ability for WordPress.com account holders to like a post
  5. Markdown compose
  6. Jetpack Monitor to alert you if your site is down
  7. Serves your images via WordPress CDN
  8. Adds share buttons to posts for popular channels including Twitter, Facebook, LinkedIn, and email
  9. Adds option for user to subscribe to follow-up comments on a post by email
  10. Basic grammar and style checking (proofreading)
  11. Adds links to related posts at the bottom of a post

One Jetpack feature I intentionally avoided was new posts delivered by email subscription. At first blush it seemed super convenient but the general advice online is to use a solution like MailChimp that gives you more power and control over your email relationship with your readers. Depending on the type of site you run, you may want to keep open the possibility of offering additional content or special offers exclusively to your email subscribers.

8. Verify Email Configuration

The biggest reason I had lapsed in my comment moderation duties was not realizing how much trash was accumulating because I was not receiving email notifications about the comments. To be completely forthright, I have no memory of ever verifying this was working when I moved my blog hosting to HostGator in 2011. And since I was not blogging, I was not logging in to WordPress to see the new comments piling up.

A quick search for “hostgator wordpress email not sending” suggested the problem was almost certainly something in my HostGator config. I used Email Trace in the HostGator cPanel to check on delivery to my target email address:



And I found this error:

virtual_aliases via virtual_aliases router forced address failure

A very quick bit of Google sleuthing suggested that I needed to check the HostGator MX Entry settings. (MX records are part of the setup for your domain that tell other computers where they can deliver email sent to a recipient on that domain.) Sure enough, the domain was set to automatically detect the MX configuration but was not detecting the right thing. My account was configured assuming HostGator was hosting the email for my domain, which it was not (I’m using Google Apps for email) and then HostGator was refusing to receive the mail it was sending to itself. I changed the configuration under MX Entry to explicitly use a remote mail exchanger, in this case the MX servers for Google mail that should have been automatically detected:



Bonus tip: an easy way to check the proper MX settings for your domain is to use http://network-tools.com/nslook/:




Bonus Step 9: Keep Notes

This page is the result of keeping some notes as I went through this process. Maybe it will be helpful for someone else. Maybe it will be helpful for me at some point down the road. Time will tell. For now I’m just excited to be back to blogging.


Leave a Reply

Your email address will not be published. Required fields are marked *