Category Archives: Site

Traffic Resuming After WordPress Hack

Early in March this site was hit with a WordPress hack that was present for about 10 days until I discovered and fixed it. After the fix I was frequently checking Google Webmaster Tools to make sure search results returned. After about one week, my traffic (from Google at least) had pretty much recovered to the pre-hack levels:

Google search traffic screenshot
Google search traffic recovering after WordPress hack removed

And here is the corresponding timeline from Google Analytics, showing traffic slowly returning to normal:

Google Analytics traffic screenshot
Google Analytics numbers recovering after WordPress hack removed

Recovering from a WordPress Hack

Last night I had the unpleasant discovery that this site’s WordPress had been “hacked”, with every post redirecting to an uploaded “this site has been hacked” variety of HTML file. I looked back and realized it happened on March 1st and mad at myself for not noticing sooner.

Fortunately it was pretty easy to clean up by zapping the database and restoring from a good backup (thankfully I have daily backups running).

The harder part is going to be recovering in Google’s view. Search queries as shown in Google Webmaster Tools dropped like crazy right away:

Search queries chart from Google Webmaster Tools
Search queries chart from Google Webmaster Tools

And here’s the corresponding crawl errors view:

Crawl Errors Chart from Google Webmaster Tools
Crawl Errors Chart from Google Webmaster Tools

Hopefully after a little time the Google crawler will see all those pages returned, but I’m guessing whatever page rank I had will be very slow to recover (if it ever does). In the meantime I’ve improved my WordPress security a bit more, updated to the latest of everything, and removed a few unused plugins. Next will be to set something up to notify me more quickly if this happens again.

Migration from MovableType Complete

I successfully migrated this website from MovableType 4.35 to WordPress 3.8.1. These are my notes from the migration in case they are helpful for anyone else. The good news is this is pretty straightforward, and there are plenty of notes out there (just search the internet for “WordPress MovableType import”). The tricky parts are the custom or special areas of your MovableType installation, and mine was no exception.

First, why switch to WordPress? I wanted something more current with a stronger platform of plugins and themes. I’ve been happy with MovableType and stuck through it over many versions and changes. It just started to look and feel a bit dated and it was time for something new. WordPress isn’t exactly “new” (having just passed its 10-year anniversary), but it continues to evolve and improve. I’ve also used it for a couple of sports team websites which turned out well.

As part of any migration , you need to identify the aspects of your site which are customized, unique, or which will potentially cause problems. In my case I had the following to deal with:

  • About 600 posts dating back 12 years
  • Individual post links were based on year/month/day, a custom slug name (saved in the Keywords field), and no extension; for example: http://www.cantoni.org/2013/12/05/tech-advent-calendars-2013
  • Posts written in different markup (plain text, HTML, Textile and Markdown)
  • Comments (which I did not migrate)
  • Categories, but no tags
  • Three different syntax-highlighting scripts/styles used over the years

These were the migration steps to import MovableType into WordPress:

  1. Installed WordPress
  2. Installed movabletype-importer plugin and activate it
  3. Configured the timezone and permalink settings (permalink matching what I used for MovableType)
  4. In MovableType modified ImportExport.pm to omit comments and tags, and set the proper basename for posts (gist)
  5. Performed the export of all entries to a text file
  6. Converted Textile and Markdown to HTML markup (gist, original script from Mark Shroyer)
  7. Imported into WordPress
  8. Moved old static directories (./2014, ./2013, etc.) so that WordPress would start serving those pages
  9. Installed wp-markdown plugin, activate it, and enable for posts and pages

I also found the suicide plugin very helpful as I iterated on the steps above. You can erase all posts and metadata in a single step. Make sure to remove after your migration is complete!

After everything was migrated and permalinks working correctly, I finished the initial setup:

  1. Installed disable-comments, activate it, and disable all comments site-wide
  2. Modified .htaccess to redirect from old rss.xml to new feed link
  3. Modified .htaccess to redirect from old category pages to new links
  4. Updated FeedBurner to use new feed link
  5. Installed google-analytics-for-wordpress, activate it, and configure my ID number
  6. Configured twenty-thirteen theme with a child theme, a few custom header images, and the sidebar widgets

Still on my to-do list:

  • Finish bringing over any static pages that are still useful
  • Fix syntax highlighting and consolidate to a single solution
  • Monitor Google Webmaster Tools for any crawler errors (page not found)
  • Clean up links to comment feeds (and other extra junk in HTML head)
  • Add more redirects from old archives pages where needed

Great Example of Mobile Context: Moviefone

There are a lot of “movie times” apps out there, but I’m sticking with Moviefone for my favorite feature: the Playing Now Near Me button. It really captures the idea around mobile context — rather than messing around with dates/times and zip codes, just show me what my closest options are. This would also be great for travelers who aren’t familiar with the area.

This could also be useful if you’re near the end of your movie, and want to sneak into another in the same theater!

Screenshot of Moviefone mobile iPhone app

The Moviefone mobile app killer feature: Playing Now Near Me
(click to view full-size)