Title: Siternet Website Migration
Author: Siternet
Published: <strong>August 30, 2026</strong>
Last modified: September 24, 2026

---

Search plugins

![](https://ps.w.org/siternet-website-migration/assets/banner-772x250.png?rev=3673016)

![](https://ps.w.org/siternet-website-migration/assets/icon-256x256.png?rev=3673047)

# Siternet Website Migration

 By [Siternet](https://profiles.wordpress.org/siternet/)

[Download](https://downloads.wordpress.org/plugin/siternet-website-migration.1.2.23.zip)

 * [Details](https://pcm.wordpress.org/plugins/siternet-website-migration/#description)
 * [Reviews](https://pcm.wordpress.org/plugins/siternet-website-migration/#reviews)
 *  [Installation](https://pcm.wordpress.org/plugins/siternet-website-migration/#installation)
 * [Development](https://pcm.wordpress.org/plugins/siternet-website-migration/#developers)

 [Support](https://wordpress.org/support/plugin/siternet-website-migration/)

## Description

Siternet Website Migration makes moving a WordPress site simple. Create a full .
zip backup of your files and database, restore it on another host with drag-and-
drop import, and have links, media, and settings update to the new domain automatically.
Or use the Demos tab to export and import only what you need — images, menus, pages,
posts, WooCommerce, users, or a full theme demo — without replacing the whole site.

#### What it does

 * Export themes, plugins, uploads, and the database into a standard .zip backup
 * Import by drag-and-drop (uploads are chunked so typical PHP upload limits are
   less of a problem)
 * Rewrite links and media URLs to the destination domain after import
 * Keep a list of backups on the host for restore, download, or delete
 * Export/import selective Demos packs without wiping the whole site

#### Good to know

 * Backups created by this plugin use its own .zip format
 * Multisite is not supported in this version
 * Import/restore replaces the current site files and database — use carefully

Plugin URI: https://www.siternet.com/themes-plugins/

## Screenshots

[⌊Import — drag-and-drop a .zip backup; URLs rewrite to the destination domain.⌉⌊
Import — drag-and-drop a .zip backup; URLs rewrite to the destination domain.⌉[

Import — drag-and-drop a .zip backup; URLs rewrite to the destination domain.

[⌊Export — create a full-site .zip backup (files + database) on the host.⌉⌊Export—
create a full-site .zip backup (files + database) on the host.⌉[

Export — create a full-site .zip backup (files + database) on the host.

[⌊Backups — restore, download, or delete host-side backup archives.⌉⌊Backups — restore,
download, or delete host-side backup archives.⌉[

Backups — restore, download, or delete host-side backup archives.

## Installation

 1. Upload the plugin folder to `wp-content/plugins`, or install from the WordPress
    admin
 2. Activate **Siternet Website Migration**
 3. Open **Website Backup** in the WordPress admin menu

## FAQ

### Does this work on shared hosting?

Yes, as long as the PHP ZipArchive extension is available and the site can write
to `wp-content`.

### Will import replace my current site?

Yes. Import and restore replace files and the database on the destination site. 
Create a backup first if you need a rollback.

### Are backups compatible with other migration plugins?

No. Use a .zip exported by this plugin.

### Is multisite supported?

Not in this version.

### Can my theme ship ready-made demos?

Yes. Export a demo pack from the Demos tab and put the .zip in a `theme-demos` folder
inside the theme (or its parent theme). The Demos tab then lists it with an Import
button. Add `demo.jpg` next to `demo.zip` for a screenshot, or a `theme-demos/demos.
json` file:

    ```
    [{"file":"agency.zip","title":"Agency","description":"One-page agency site","screenshot":"agency.jpg","preview":"https://example.com/agency"}]
    ```

### Which login do I use after an import?

The users come from the exported site, so log in with a username and password from
that site. Then open Settings > Permalinks and click Save Changes twice.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Siternet Website Migration” is open source software. The following people have 
contributed to this plugin.

Contributors

 *   [ Siternet ](https://profiles.wordpress.org/siternet/)

[Translate “Siternet Website Migration” into your language.](https://translate.wordpress.org/projects/wp-plugins/siternet-website-migration)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/siternet-website-migration/),
check out the [SVN repository](https://plugins.svn.wordpress.org/siternet-website-migration/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/siternet-website-migration/)
by [RSS](https://plugins.trac.wordpress.org/log/siternet-website-migration/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.2.23

 * After an import to a new domain, redirects are sent as not cacheable, so a redirect
   stored by a browser or page cache can no longer replay an old loop (ERR_TOO_MANY_REDIRECTS
   on the first visit of a page).
 * Page caches of common cache plugins and Elementor’s cache are cleared once on
   the first normal request after an import or a plugin update.

#### 1.2.22

 * Fix ERR_TOO_MANY_REDIRECTS on the front end after an import when another plugin
   forces www on the site’s domain. The www / non-www form of this site’s own address
   is now only changed in the links of the finished page, not in the address WordPress
   uses to decide redirects.
 * A redirect is no longer rewritten when the new address is the page being requested,
   also behind an HTTPS proxy.

#### 1.2.21

 * Fix imports stopping with “Connection dropped, retrying… — Request failed (500)”
   while files are restored. The import writes the exported site’s plugin and theme
   files over the ones installed here, and a step request could load a half-copied
   plugin and crash. During an import, its own step requests now load only this 
   plugin and no theme. A temporary must-use loader does this; it is removed when
   the import ends and expires after two hours.

#### 1.2.20

 * After an import, links to this site follow its own address: when the site has
   no www, links with www added are changed to the address without www (and the 
   other way round).

#### 1.2.19

 * After an import to a new domain, links to the exported site are also rewritten
   in the finished page (links printed as fixed text by themes and plugins), in 
   REST and JSON responses, and in redirects sent without wp_redirect().
 * Elementor’s generated CSS copied from the exported site is removed after an import,
   so Elementor rebuilds it with this site’s URLs.

#### 1.2.18

 * After an import to a new domain, links, login and wp-admin redirects that a theme
   or plugin still builds for the exported site’s domain in code are sent to this
   site instead. The domains come from the backup and this site’s own settings. 
   Nothing is set up for an import onto the same domain.
 * The destination address is read from this site’s own settings, so another plugin’s
   URL filters can no longer change it during an import.

#### 1.2.17

 * Demos tab: when the active theme (or its parent) has a theme-demos folder with
   demo packs, they are listed as ready-made demos with an Import button, screenshot,
   description, and optional preview link. The files stay in the theme and are imported
   in place.

#### 1.2.16

 * The demo packs table now looks like the Backups table: left-aligned columns, 
   a Created by column, and the same Download and Delete buttons with icons.

#### 1.2.15

 * Backup and demo times now show in your computer’s own time zone, with the zone
   name.

#### 1.2.14

 * Fix “%” being exported as a long code, which showed up as “100{…}” in counters
   and broke permalinks and URL-encoded links. Backups made with earlier versions
   are repaired while they are imported, so they do not need to be exported again.
 * Fix tables from MariaDB servers that use long unique keys (“USING HASH”) not 
   being created on MySQL. Such a table is now created on InnoDB, so its rows are
   no longer lost.
 * Replace the old domain in columns that hold only a host name, such as domain 
   mapping tables.
 * Delete cached transients after an import, so no cached menus or domain lists 
   from the exported site remain.

#### 1.2.13

 * Import runs in these steps: restore files into wp-content, restore mu-plugins,
   restore the database, then activate the exported site’s plugins and theme.
 * Files are restored straight from the .zip into wp-content, without a temporary
   copy. This plugin’s own folder, drop-ins (such as object-cache.php and db.php)
   and host-specific mu-plugins are skipped.
 * While the database is restored only this plugin is active. At the end the exported
   plugins are added when their files exist, and the theme options are set without
   switching themes, so widgets and menus stay as exported.
 * After each database batch this site’s home and siteurl are set again. Plugins
   that break login or force SSL are turned off, as before.
 * The users, passwords and roles from the exported site are no longer changed. 
   Log in with an account from the exported site after an import.
 * Removed the runtime URL filters, wp-config and .htaccess changes, and the automatic
   login link. URLs are replaced only in the database while it is restored.
 * Exports no longer include the root .htaccess and robots.txt, which belong to 
   the server.
 * Export reads each table in primary-key order, so rows are not skipped or repeated
   between batches, and repairs a table the server reports as crashed.

#### 1.2.12

 * Fix imports stalling at “Restoring database” with “Previous step still running”
   and “One or more database tables are unavailable”. Each restore request now commits
   its own transaction, so rows, the step lock and progress are no longer lost when
   a request ends.
 * Restore the options table into a side table and swap it in with one rename, so
   siteurl is always readable while the database is restored.
 * Use a file lock for import steps, released automatically if a request dies. Read
   progress from the job file.
 * Run database restore by time instead of a few statements per request, which makes
   large sites much faster.
 * Fix URL replacement for values that end in a backslash, which could break the
   whole row.
 * Map MySQL 8 collations when the destination server does not support them.
 * Do not add the operator account while the users table is being restored.

#### 1.2.11

 * Release the import fix that keeps siteurl in place between restore steps.

#### 1.2.10

 * Keep siteurl in the database before an import request ends, so WordPress can 
   load the next restore step. Hold the step lock while that request is still working.

#### 1.2.9

 * Export the database as one SQL statement per line, with the table prefix replaced
   in table names, option names, and user meta keys, and commit every 1000 rows.
   Import reads those statements the same way. The backup file stays a .zip.

#### 1.2.8

 * Use the same URL replacement list during SQL import (site and home, www, schemes,
   encoded forms, domain/path pairs, email domains, and the content folder). Turn
   off the same redirect plugins afterward. Copy files unchanged and leave wp-config,
   the root htaccess, and permalinks as restored.

#### 1.2.7

 * Rewrite URLs, domain and path pairs, email domains, and the content folder path
   inside each SQL statement (plain, encoded, and JSON-escaped). Then set home and
   siteurl and activate the theme and plugins. Stop the later content pass that 
   changed the homepage.

#### 1.2.6

 * Rewrite URLs inside each SQL statement during import (plain, www, http/https,
   and JSON-escaped), then set home/siteurl to this site. Stop the extra text pass
   that broke homepage builder data.

#### 1.2.5

 * Rewrite footer and homepage builder JSON (Elementor) by decoding it first, so
   those links use the new site and the homepage JSON is not broken. Keep login 
   on this site when home/siteurl still point at the export URL.

#### 1.2.4

 * Rewrite exported URLs to the destination site inside SQL and again on pages, 
   excerpts, GUIDs, and menus so links and login stay on the new site.

#### 1.2.3

 * Keep URL/redirect guards active until content is swept; paginate the final URL
   sweep (no 300-row cap); sync wp-config URL constants at finish; fall back to 
   destination theme if the manifest lacks one.

#### 1.2.2

 * Fix post-import redirects to the old site and missing CSS: keep destination home/
   siteurl during SQL restore, always rewrite URLs even when serialized data cannot
   be unserialized, replace content filesystem paths, and force a full destination
   URL + rewrite-rules repair at finish.

#### 1.2.1

 * Fix export “Unknown export step” caused by overlapping finish retries; restore
   the previous export step loop.
 * User-facing copy: say “exported” instead of “dumped”.

#### 1.2.0

 * More reliable export/import: rewrite URLs inside SQL with safe mysql escape (
   strtr), omit active_plugins/theme from the SQL export (apply from manifest at
   finish), unlimited PHP time limit per step, and a 3s status poll so the UI keeps
   updating if a request drops.

#### 1.1.9

 * Fix restore “Connection dropped” loops: stop extracting into live wp-content 
   during AJAX (that broke the next request), build the copy map while extracting,
   and never client-abort import requests.

#### 1.1.5

 * Restore/import overhaul: extract files straight into WordPress (no temp extractcopy
   pass), shorter DB steps, and a longer client timeout so restores stop stalling
   on “Connection dropped”.
 * Export unchanged — still fast; host-side backup folders stay excluded from new
   archives.

#### 1.1.4

 * Shorter SQL/file steps, step lock so retries do not overlap, 35s client abort
   + auto-retry, and no heavy URL repair mid-database restore.
 * Split “prepare file list” into its own step; cap SQL statements per request; 
   commit each query so killed requests do not roll back progress.
 * Exclude host-side backup storage (`uploads/Siternet Backup/`, etc.) from new 
   exports so old .zip archives are not nested inside the next backup.

#### 1.1.3

 * Stop inserting WP_HOME / WP_SITEURL into wp-config.php (only update those constants
   if they already exist).
 * Fix bare host replace that turned www.example.com into www.www.example.com and
   broke admin CSS/images.
 * On load, automatically strip corrupted www.www.* URL constants from wp-config
   and override them for the current request.

#### 1.1.2

 * Add Demos tab: selectively export/import images, menus, pages, posts, WooCommerce(
   products, settings, orders), users, or a full theme demo pack — without wiping
   the whole site.
 * Speed up export: store files in the zip without Deflate (much faster packing),
   larger DB/file batches, resume the file list by byte offset, and keep exporting
   multiple tables per AJAX step.
 * Keep you logged in during export: short per-request windows (avoids host gateway
   timeouts), job-secret step auth if the cookie flickers, session heartbeat, durable
   auto-retry for huge sites, and refresh admin cookies + nonce on every step.
 * Scale to multi‑GB backups: steal stale step locks after timeouts, reserve time
   for zip close, use system `zip -0 -g` when available for faster appends, and 
   check free disk space.
 * Faster large-site import: exclude theme/plugins from SQL (restore from manifest),
   prioritized post-SQL URL sweep, leaner finish, and drop runtime URL filters once
   home/siteurl are permanently correct.

#### 1.0.30

 * Improve import reliability: rewrite oldnew URLs during SQL import (serialized-
   safe), restore destination home/siteurl after every DB chunk, store internal 
   site/home URLs in the export manifest, and stop re-running full URL repair on
   every import AJAX step.

#### 1.0.29

 * Fix WordPress.org theme/plugin directory broken after import (do not rewrite 
   api.wordpress.org URLs).

#### 1.0.28

 * Preserve all imported user passwords and profile data (no longer overwrite the
   admin password after migrate).
 * Fix Log Out and other login links still pointing at the old domain (filter logout_url/
   lostpassword_url / register_url / set_url_scheme).

#### 1.0.27

 * Fix Add Plugin / Add Theme and other admin links still pointing at the old domain:
   always rewrite site/home/admin URLs to the current browser host and permanently
   correct home/siteurl (and wp-config) on admin load when they disagree.

#### 1.0.26

 * Fix admin/plugin/theme install redirects to the old domain after migration: capture
   destination home/siteurl before DB import, force-write them with update_option
   after restore, deactivate SSL/hide-login plugins that redirect away, harden wp-
   config host rewrites, and keep content/plugins URL filters on the destination
   host.

#### 1.0.25

 * Make the review banner yellow styling reliable across hosts (inline critical 
   CSS + stronger selectors so it is not lost to cache or conflicts).

#### 1.0.24

 * After import/restore, show an Open Permalinks button and tip to click Save Changes(
   helps fix 404s after migration).

#### 1.0.23

 * Add WordPress.org star-rating / review prompts (Document tab, footer link, and
   a dismissible banner after successful export or import).

#### 1.0.22

 * Speed up export/import with larger batches, longer per-request work time, and
   adaptive pacing (faster on healthy hosts, smaller batches after timeouts).
 * Stop running heavy URL repair sweeps during migration AJAX requests (that was
   slowing every step).

#### 1.0.21

 * Fix redirects to the old domain after import (login, plugin install, admin links)
   by pinning the destination URL and overriding home/siteurl the same way major
   migration tools do.
 * Remove the View site button from the post-import success panel (it could still
   open the old domain).

#### 1.0.20

 * Show a clear success panel after import/restore with Open dashboard, View site,
   and Refresh this page buttons instead of auto-redirecting silently.

#### 1.0.19

 * Fix wp-login.php and wp-admin redirecting to the old domain when WP_HOME or the
   database still reference the source host.
 * Prefer the current request host for URL repair after migration instead of trusting
   imported wp-config constants.

#### 1.0.18

 * Fix permalink structure being corrupted to random hash strings after import (
   e.g. `/%postname%/` becoming `/{hash}postname{hash}/`).
 * Store permalink settings in the export manifest and restore them after all URL
   updates finish.
 * Repair percent placeholders in permalink options and skip URL replacement on 
   permalink tag strings.

#### 1.0.17

 * Keep the operator logged in after restore: refresh auth cookies during import
   and issue a one-time secure dashboard login link when import finishes.
 * Redirect to wp-admin automatically after import/restore instead of requiring 
   a manual login.

#### 1.0.16

 * Fix fatal infinite loop in login_url filter that could crash PHP and make wp-
   login.php return 502.
 * Sweep posts and postmeta for leftover old-domain image and content URLs after
   import.
 * Remove absolute upload_url_path values that point at the old site.

#### 1.0.15

 * Fix post-login redirects when the login form still submits an old redirect_to
   URL from the imported site.
 * Sanitize redirect_to on login POST before WordPress handles authentication.

## Meta

 *  Version **1.2.23**
 *  Last updated **5 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 5.8 or higher **
 *  Tested up to **7.1.2**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/siternet-website-migration/)
 * Tags
 * [backup](https://pcm.wordpress.org/plugins/tags/backup/)[clone](https://pcm.wordpress.org/plugins/tags/clone/)
   [export](https://pcm.wordpress.org/plugins/tags/export/)[import](https://pcm.wordpress.org/plugins/tags/import/)
   [migration](https://pcm.wordpress.org/plugins/tags/migration/)
 *  [Advanced View](https://pcm.wordpress.org/plugins/siternet-website-migration/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/siternet-website-migration/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/siternet-website-migration/reviews/)

## Contributors

 *   [ Siternet ](https://profiles.wordpress.org/siternet/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/siternet-website-migration/)