Moving 3,684 blogs off Typepad before the shutdown

A few months back a long-time blogger reached out in a panic. He had been posting on Typepad since 2004, close to two decades of writing, family photos and a small community built around it. Then Typepad emailed to say it was shutting down in 30 days. That left him a month to save 5,000 posts and nearly 10,000 images, or lose the lot.

He was one of many. We ended up moving 3,684 blogs to new homes in that wave of Typepad to WordPress migration work. Anyone who has been through a platform sunset knows the text is the easy part. The hard part is keeping the data intact and the site still recognizable when it comes out the other side.

The mistake: trusting the standard importer

I started where everyone starts, with the built-in importer. Raise memory_limit to 1GB, push up the execution time, hand it the XML file and let it run. That was a rookie call. A web-based importer will not survive a multi-gigabyte export covering twenty years of posts.

The import ran for five minutes, hit a timeout, and left the database half written, with duplicate posts, orphaned meta data and missing media. Typepad exports often carried only links back to their own servers rather than the image files, so anything we had not fetched before those servers went dark would be gone permanently.

Treating it as a data recovery job

So we stopped treating it as a file upload. The import moved to the command line and ran in chunks, with a custom script to sideload the images: pull every image URL out of the Typepad content, download the file to the local server, then point the post content at the new attachment ID.


/**
 * Simple helper to sideload images during a massive migration.
 * Prefixing with bbioon to keep things clean.
 */
function bbioon_sideload_migration_image( $url, $post_id ) {
    if ( ! $url ) return;

    require_once( ABSPATH . 'wp-admin/includes/media.php' );
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    require_once( ABSPATH . 'wp-admin/includes/image.php' );

    // Magic happens here: fetching the remote file and creating the attachment
    $attachment_id = media_sideload_image( $url, $post_id, null, 'id' );

    if ( is_wp_error( $attachment_id ) ) {
        error_log( 'bbioon_migration_error: ' . $attachment_id->get_error_message() );
        return false;
    }

    return $attachment_id;
}

Running it through WP-CLI took the browser timeouts out of the picture and let us watch the process as it went. When the script tripped on post 2,401, we knew that was where it stopped and could resume from there instead of generating another round of duplicates.

Why the archive is worth the effort

The official report on the Typepad migration project gives a sense of how widespread the panic was. Plenty of these archives went back to 2005. One blogger with more than 9,000 images was in tears when the whole thing came up live on WordPress. That is the part of the job that stays with you.

WordPress handles this well. It is open, it is portable, and it is not disappearing. Moving to a self-hosted or managed WordPress setup means the data is yours to keep.

This gets complicated quickly, and more so when a platform starts pulling the plug. If you are tired of debugging someone else’s setup and you just want your site to work, drop my team a line. We have probably seen it before.

If you have a large archive sitting on a legacy platform, do not wait for the shutdown notice. Get it moved while the old servers are still up.

author avatar
Ahmad Wael
I'm a WordPress and WooCommerce developer with 15+ years of experience building custom e-commerce solutions and plugins. I specialize in PHP development, following WordPress coding standards to deliver clean, maintainable code. Currently, I'm exploring AI and e-commerce by building multi-agent systems and SaaS products that integrate technologies like Google Gemini API with WordPress platforms, approaching every project with a commitment to performance, security, and exceptional user experience.