Moving a WordPress site to a new host, backing up content to share with a collaborator, merging two WordPress blogs into one, or migrating from another CMS platform — all of these tasks use WordPress import export tools. WordPress has built-in import and export functionality that covers most common scenarios, and a collection of third-party tools for cases where the built-in system falls short. This fits into the wider topic we cover in our Complete Guide to WordPress How.
WordPress Import Export — Built-In XML Tools
WordPress’s built-in WordPress import export system uses the WXR (WordPress eXtended RSS) format — an XML file containing posts, pages, custom post types, comments, categories, tags, authors, and media attachment references. It does not include the actual media files (only URLs), plugin settings, or theme customisations.
Export from WordPress: Tools → Export → select what to export (All content, Posts, Pages, or specific custom post types) → Download Export File. The exported WXR XML file contains all selected content with its metadata. For a complete content migration, export All content — this creates a single file containing every post type, comment, and taxonomy assignment. For selective migrations (moving only specific category content to another site), filter by category during export to create a smaller, targeted export file.
Import to WordPress: install the WordPress Importer plugin (Tools → Import → WordPress → Install Now → Run Importer) → choose the WXR file downloaded from the source site → map authors (match authors from the source to existing authors on the destination or create new ones) → check “Download and import file attachments” to attempt downloading the media files referenced in the export → Run Importer. The importer creates all posts, pages, and taxonomy assignments, and attempts to download media files from the source site’s current URLs. The WordPress import export process can time out on large sites with many media files — if it times out, run the import again and WordPress skips already-imported content, continuing from where it stopped. According to the WordPress documentation, the WXR format preserves post meta, comment meta, and all taxonomy relationships, making it suitable for complete content migrations between WordPress installations regardless of the hosting environment of either the source or destination site.
Migrating a Full Site Including Theme and Plugin Settings
A complete site migration via WordPress import export requires more than the built-in XML tools configuration — theme settings, plugin configurations, widget placements, and the WordPress database’s wp_options table are not exported. A complete site migration requires either a dedicated migration plugin or a database-plus-files approach.
All-in-One WP Migration handles complete WordPress import export including database and settings including the database, media files, theme settings, and plugin configurations in a single export file. Export: Plugins → All-in-One WP Migration → Export → Export to File → downloads a .wpress archive containing the complete site. Import on the destination: install WordPress → install All-in-One WP Migration → Import → select the .wpress file → the plugin overwrites the destination WordPress installation with the complete source site. After import, update the site URL in Settings → General to the new domain if the domain changed, and clear all caches.
Duplicator Pro and WP Migrate DB Pro are more advanced alternatives for developers who need precise control over the migration process: selective content migration, database find-and-replace for URL updates, staging-to-production push workflows, and migration profiles that can be reused for repeated deployments. For WordPress import export in agency workflows where sites move from staging to production regularly, WP Migrate DB Pro’s push/pull functionality synchronises content between environments without a full site migration each time — only the changed database rows transfer, making frequent content syncs fast regardless of site size. Our guide on setting up WordPress backups covers UpdraftPlus as an alternative migration vehicle — creating a backup on the source and restoring on the destination achieves a complete site migration as a by-product of the normal backup and restore process.
Importing Content From Other Platforms
Migrating from non-WordPress platforms uses the WordPress import export system’s platform-specific importers. WordPress’s WordPress import export system includes built-in importers for several common platforms, accessible at Tools → Import.
Built-in WordPress import export importers available: Blogger (posts, categories, comments, and authors from Google’s Blogger platform), LiveJournal (imports posts and comments), Movable Type and TypePad (imports posts, pages, and comments), Tumblr (imports posts using the Tumblr API), RSS (imports any content from an RSS feed into posts). For each: install the importer plugin → follow the authentication steps → WordPress fetches and imports the content. The quality of imported content depends on the source platform’s export format — some platforms export clean HTML while others export platform-specific markup that requires cleanup after import.
Migrating from Squarespace to WordPress for WordPress import export purposes: Squarespace’s export feature generates an XML file in WordPress WXR format — import it directly using the standard WordPress XML importer. The migration captures blog posts and pages but not Squarespace’s commerce products, member areas, or custom template sections. Wix does not provide a direct export; use a third-party service like CMS2CMS or manually copy content. Ghost CMS exports in its own JSON format — use the Ghost-to-WordPress importer plugin available from WordPress.org to convert Ghost JSON exports to WordPress posts. For each platform migration, verify content formatting after import — some character encodings, embedded media, and code blocks require manual cleanup after the automated import completes. Our guide on creating WordPress custom post types covers the post type configuration that may be needed after platform migrations where the source platform had content types that do not map directly to WordPress’s default post types.
Exporting Specific Content Types and Data
WordPress import export for specific data types — WooCommerce products, user lists, custom post type records, or form submission data — requires type-specific export tools rather than the general WXR exporter.
WooCommerce product export: WooCommerce → Products → All Products → Export → select which fields to include → Generate CSV. The exported CSV contains all product fields including SKU, price, stock, and attributes. Import to another WooCommerce site: WooCommerce → Products → Import → upload the CSV → map columns if the import site has different attribute names → Run Importer. This CSV-based WordPress import export for WooCommerce is the standard approach for product catalog migrations between WooCommerce installations and for bulk product updates — edit the CSV in a spreadsheet, then import to apply the changes to the entire product catalog simultaneously.
WordPress user export: Tools → Export → Users does not export user data in the standard WordPress export. Use the Export Users to CSV plugin (free) to export all user data including username, email, role, and registration date. Importing users to a new site requires the Import Users from CSV plugin — it creates WordPress user accounts from the CSV with matching passwords (hashed passwords can be imported directly to preserve passwords without requiring users to reset them). For WordPress import export of user data, be aware of GDPR implications — exporting and importing user personal data transfers that data to a new environment. Ensure the new environment meets the same data protection standards as the source, and check whether the applicable privacy policy covers data processing on the new platform or requires an update to reflect the migration. Our guide on WordPress GDPR compliance covers the data transfer considerations that apply whenever user personal data moves between WordPress installations as part of a site migration or export process.
Automating Export and Import for Content Syndication
Automated WordPress import export for content syndication — publishing content on one WordPress site and automatically distributing it to multiple other WordPress sites — uses either the REST API or WP-CLI to programmatically manage content across the network of sites.
WP-CLI export and import commands: wp export --path=/path/to/export.xml exports all content to a WXR file on the server. wp import /path/to/export.xml --authors=create imports the WXR file on the destination. These commands can be automated in shell scripts and scheduled via server cron for regular content synchronisation between sites. For a publishing hub model (one editorial site exports, multiple regional or topical sites import), a daily WP-CLI export-and-import cron job can distribute new posts from the hub to all syndication sites without manual content management on each individual site.
REST API-based content syndication for WordPress import export automation: the WordPress REST API exposes all public post types at /wp-json/wp/v2/{post-type}/. A custom script (PHP, Python, or Node.js) fetches new posts from the source site’s REST API and creates matching posts on destination sites using the destination’s REST API with application password authentication. This API-to-API approach handles the content transfer programmatically without generating or parsing XML files, and enables real-time or near-real-time content syndication rather than the batch approach of WXR export/import. For content networks managing dozens of WordPress sites, REST API-based syndication scales more efficiently than file-based WordPress import export approaches — it eliminates the file storage requirement, handles pagination for large content libraries automatically, and can be monitored and retried programmatically when individual syndication events fail. Reviews from the WordPress REST API developer community confirm that the REST API’s /wp/v2/posts endpoint supports full CRUD operations for all standard post types, making it suitable as the transport layer for automated content syndication workflows that replace manual WordPress import export processes. Our guide on WordPress hooks and filters covers the publish_post and save_post hooks that can trigger automated REST API syndication calls immediately when content is published, eliminating the batch delay of scheduled cron-based export/import.
Troubleshooting failed WordPress import export operations requires understanding the specific error type: “Failed to open stream” during import means the WXR file could not be read — the file may be too large for the upload limit (increase upload_max_filesize and post_max_size) or the server temp directory is full. “Post with ID already exists” during import is a duplicate detection message, not an error — WordPress skips posts that already exist on the destination, which is correct behaviour for incremental imports. “Media import failed” during content import means the importer could not download attachment files from the source URL — check whether the source site is accessible and the attachment URLs in the WXR file match the current source site’s media library URLs. For large imports that time out, split the WXR file using WXR Split (a command-line tool) into smaller chunks, then import each chunk separately. The chunked import approach eliminates timeout failures on large content libraries by breaking the import into manageable batches that complete within PHP’s max_execution_time limit.
The WordPress import export process and search engine indexation interact in ways that require attention during site migrations. After importing content to a new domain, search engines maintain their index of the old domain’s URLs until they are redirected or the old domain expires. Set up 301 redirects from the old domain to the new domain immediately after migration — either via .htaccess on the old server or through the domain registrar’s redirect settings if the old server is being decommissioned. Submit the new domain’s sitemap to Google Search Console and use the Change of Address tool (Search Console → Settings → Change of Address) to formally notify Google of the domain change. Without these steps, the migration creates a period of duplicate content across both domains and potential loss of accumulated link equity and search rankings from the old domain. Our guide on creating a WordPress XML sitemap covers the sitemap submission that should follow every WordPress site migration to ensure the new domain’s content is discovered and indexed as quickly as possible after the WordPress import export migration is complete.
Content staging workflows using WordPress import export allow editorial teams to prepare content batches on a staging environment and then import them to production — bypassing the need for editorial staff to have production admin access. The workflow: editors create and publish posts on the staging site → the staging site’s content is exported as WXR → a production administrator imports the WXR → new posts appear on production. This workflow separates content creation from production deployment, allowing editorial quality control on staging before content reaches the live site. The limitation: this workflow duplicates posts rather than syncing updates to existing posts — editing a post on staging does not update it on production without a second import. For teams with ongoing content update workflows, WP Migrate DB Pro’s database synchronisation is more appropriate than repeated WXR WordPress import export cycles, as it syncs database changes rather than creating duplicate posts.
Encoding issues in WordPress import export XML files cause garbled characters in imported content when the source and destination sites use different character encodings. WXR files are UTF-8 encoded — if the source WordPress site used a different encoding (rare in modern WordPress but possible in very old installations), non-Latin characters may appear as replacement characters after import. Verify the WXR file encoding before importing: open the file in a text editor that shows encoding (VS Code, Notepad++) → confirm UTF-8 encoding. If the file is incorrectly encoded, convert it to UTF-8 using iconv: iconv -f ISO-8859-1 -t UTF-8 source.xml -o converted.xml. After conversion, test-import a small subset of the content before running the full import to confirm the character encoding issue is resolved and special characters (accented Latin characters, quotes, dashes, symbols) import correctly. Most modern WordPress installations and WXR export tools produce correctly encoded UTF-8 files, making encoding issues an edge case rather than a common WordPress import export concern.







