Skip to main content

Migrating from WordPress.Com to Self-Hosted WordPress

By Chris La Nauze
Share: is a limited version of WordPress run by Automattic. Here, you can create a blog or website in moments without worrying about hosting and managing your WordPress. However, to use many more complex plugins and functionality, and to have the full breadth of customization you desire, you may at some point decide to use the full WordPress platform available from and “self-host” it – host it on your own server, or pay a company for hosting services.

Moving your blog from the “managed hosting” at to a self-hosted installation of the full WordPress platform requires a little planning, and some time, but can definitely be worth it in the end.

For the most part, getting your content out of is a fairly easy task. What is not easy, though, is matching your design from, and trying to replicate what you had on that platform on the new one.

If you happened to choose one of the themes that are built for by the team at Automattic, then you may be out of luck if it’s not available in the repository. Consider launching a new theme design for your site along with the move. However, if that’s not an option and you are very attached to your current site’s appearance, there are two ways you can go about replicating this look on your own hosting.

  1. The first way is to look for a free or paid version of a theme which is as close in design as possible to the one you chose originally, and then setup a child theme to modify the CSS to get it looking as similar as you can to the old one.
  2. The second way is to hire a developer and get a theme custom-coded for you to match your original design.

As for exporting other features, some, like menus, are only possible if you export using the “all content” option, and will require minor tweaks upon import to the new WordPress installation. Most plugins that you had before (and thousands more) can be found in the repository, and with thanks to the Jetpack plugin, you can enable the social functions, subscriber, and statistics from This will allow you to take advantage of the desktop and mobile apps to help publish and manage your site on the go.

There are some elements that are not currently possible to export: custom fonts, widgets, and some site settings (such as the site permalink structure). For the most part, you will be able to replace the fonts with something similar after the content import, or even use a fonts plugin or custom inclusion to add the same one back in. You will read about handling the migration of your permalink structure later in this post.

Lastly, if you used a custom domain name on and will be using it with the new site as well, don’t forget to change your name servers, or even transfer the domain name away from to another provider so you can continue to use the domain for the future without needing to login to to alter settings.

In order to do the export in the quickest amount of time, this step-by-step guide requires two things. The first is a functioning site on that contains at least one blog post or page (so we have something to export), preferably with images uploaded and embedded in the post. The second is a new WordPress install on your favorite hosting provider.

Getting Started

First, log in to your account.

First you need to make sure your site has been set to “public”. This gives the necessary permissions that allow the import on your installation to download the images and other media attached in the posts and pages. Without this step, you will need to access your media library, and download a copy of each item in the media library and manually upload and reattach to each post and page (a time consuming job).

To do this go to My Site > Settings > Privacy, and select Public, then save settings.

Privacy Settings

Note that the above image is of my own account where I manage a few different sites. From this account dashboard, you can also perform exports. The only difference is the fact that WordPress sends an email with a link to the finished file for download.

After accessing the admin area of the particular site in question, under the “Tools” menu, select the submenu “Start Export”.

3-Image of Export menu

From here you will need to decide what exactly you would like to export. You could export all elements in one go, but for bigger sites, I recommend splitting this up, and only exporting portions of the site at once (i.e. pages, then posts), and for even bigger sites, exporting based on authors, or published posts followed by drafts, etc. The key here is to plan what to export, and then manage the files for importing.

4-Image of Export selection

There are elements that you won’t have on your self-installed sites. If you don’t wish to install the Jetpack plugin, for instance, exporting the Feedback, Testimonial, or Projects/Portfolio sections will be unnecessary. They are part of (and of the Jetpack plugin on self-hosted WordPress) and not a standard part of the WordPress platform.

If you did want a portfolio section and have original content in your site, but didn’t want to use Jetpack, because of differences in table names, I suggest installing Jetpack for the migration, then afterwards install your prefered portfolio plugin, and copy and paste content into the new area. After that, you could delete Jetpack’s content before finally deactivating and uninstalling the unwanted plugin.

By default, you won’t see the testimonial and Projects sections in the export list, if they aren’t enabled in the settings page, so don’t worry if you don’t have them enabled. If you weren’t using them, then they will not be included in the export of “all content” or individual exports.

5 - Image with extra post types

One main reason I recommend splitting out the posts from the pages for larger sites is that sometimes the images don’t get imported correctly, or they get corrupted in some way. So, breaking it down into sections makes for easier troubleshooting if required, and less wasted time from having to delete all posts and pages and start again. But the caveat to this is that you can’t export menus separately – the only option is via the “all content” export feature if you need to export and import your menus rather than rebuilding them.

Just make your selection, and click “Download Export File”. There really is no right or wrong here, if you don’t like the import, just dump and delete the posts/pages, and create a new export file and do it again.

An XML file will be downloaded to your computer.

Migrating from Using Your Exported Data

Now that you have made sure your old site is public accessible and you have your exported content, log in to your new hosted WordPress website. For best results, install the theme and plugins that add the same functionality as your old site. You also need to change the permalink settings to match your site structure for the blog.

Change the settings to day and name, this matches the default permalink structure. If in the future you want to change this, you should also setup a 301 redirect plugin, add a header and footer plugin to insert your Google Analytics tracking codes, and setup a Google Search Console account to monitor broken links, and old page structures that need redirecting or creation, as well as other important notifications from Google about your site, this ultimately will help the search engines and users find the changed URLs. But during the import, you’ll want things to work as similarly to your old site as possible for simplicity’s sake.


Now it is time to import your content! To do this, navigate to “Tools” then “Import”. The first time you do this, you will install the WordPress importer plugin. The next time you use it, you will just see “Run Importer”.


Select your XML file from your computer, and click “upload file and import”.


You are immediately presented with the ability import the existing users into the site (select nothing), to assign the posts to a new user (enter a new username) or to assign it to your admin user. Be careful here; if you have more than one author you need to select nothing, so that all previous authors are added to the site, with their correct posts assigned to them. Choosing a user will override any previous author information from the export.

In this example, I have only one user, and don’t wish to make another user, but instead want to re-assign all posts and pages to my new admin user. In the highlighted box below, I will select my current admin user. Also tick “Download and import file attachments”, this is needed to get your media out of your account into your new media library.

Now hit submit and wait and wait till you see the next notification. The time this will take depends on how much content you have, the size and quantity of your media, and other networking factors of your hosting platform.


When it has finished importing it will remind you to update any imported users. By default, as a security measure all new imported users will be made “Subscribers”. You can then change their roles, passwords, etc from the Users section.


We are almost done, now we need to verify things went smoothly and the next steps needed to get everything running right.

First, double-check that the correct number of posts and pages and other custom post types are now inside your new site.

11-comparison-import image

Then check that the images and attachments were imported into your media library.


Create the menu (or assign the menu to the correct area in the theme if you imported it), assign widgets, and copy over any data that was in your widget areas from the old site, because as noted above, this is not included in the export file.

Lastly we need to verify that the images embedded in your posts are actually loaded from your new site’s media library, and not still being loaded from the site.

To do this, I first check that the site loads on the frontend and that the content is appearing. When hovering over featured images, they match the correct URL of the new site. I next verify each of the posts/pages in the editor, using text mode. The reason for this is to look for the site url in the image attachments. If this is wrong, it will stand out to you (you could also use the search field in your browser to highlight the URL, to save some time – it shouldn’t appear on the new site). Whereas if you look in visual mode you won’t see the difference until that image is either deleted, or you change the privacy setting on the site to private.

After all checks are done, and you have confirmed that all your data is moved across, you can simply make your account hidden. Don’t delete it, because as I mentioned earlier, if you want to use JetPack for stats and the desktop and mobile apps, you will need a account to activate and sync to your new site. You can also enable other services offered by, such as VaultPress (backups) and Akismet (spam protection) if you desire.

But wait, don’t forget that your users will still be going to, (your sub-domain) and you need to setup a redirect to the new address (this only applies if you didn’t buy and map a custom domain name). You don’t have access to the server so you will have to use the paid option found here to pay for the redirection to take place. it only costs a couple of dollars each year. Like when you move to a new house and have your mail redirected, you can choose to keep paying for this re-direction, or, sometime in the future, stop. I suggest you have a plan in place as to what you are wanting to do, and start updating your links around the web to point to the new correct location for your site. This includes reaching out to old contacts and give them the new link. It will save your bottom dollar in the long run, and is the perfect time to talk to those contacts about your business, blog or services.

Troubleshooting Tips

As mentioned earlier, for bigger sites I like to export sections of the site instead of using the all content export. One common problem is the importing of images. If you site is really big, just dumping the posts and starting again can be painful after an error. Thankfully, other solutions exist in the form of plugins that aid in downloading of your externally linked images, importing them into the media library and attaching it to the posts instead. One plugin I recommend is Image Teleporter. It can help import images (beyond just helping with migration errors), as they suggest in their page, it can also be used to bring in embedded images from services like Flickr, Instagram, or Pinterest, so they are hosted locally for a faster site.

Does the WordPress Importer plugin repeatedly fail for your bigger sites? If so, the developers over at Human Made that work mainly on VIP WordPress customers developed a WordPress import fork that works really well for larger WordPress imports. Recently it also came to my attention that you can perform migrations using the VaultPress backups from your account. To do this you need to be on a paid tier that includes backups, but from this, instead of restoring backups to the site, you can restore to your self-hosted, Jetpack connected site. This is a method of importing to a self-hosted environment that I will be testing in the future.

Have any personal experiences with moving from to a self-hosted installation? Share them in the comments below!

Chris runs Lanauze Designs, a small virtual agency in the Northern Suburbs of Melbourne, Australia. He predominantly works with clients in the Restaurant and Hospitality Industries, of which he has had extensive experience in (an Ex Chef, and Industrial Designer). Chris brings a unique edge to his clients, combining inside Hospitality industry knowledge, Design, Graphics, Photography, SEO, Email Marketing, Marketing, advanced funnel techniques and anything in between. Chris is an active member of the WordPress community in Melbourne and online.

Integromat Tower Ad