How to Move Your Short Links to a New WordPress Site (Without Losing Click History)
Site migrations have a familiar shape. You move the theme. You move the plugins. You move the content. And then, a week later, someone notices that the links in last quarter's newsletter are dead, and that the click data you were using to justify the campaign budget is gone.
Short links are easy to forget during a migration precisely because they usually just work. They live in their own tables, quietly redirecting, until the day the database underneath them changes.
If you have ever tried to move them by hand, you know why it is unpleasant. Exporting a CSV of links gets you the URLs, but not the groups, the tags, the UTM presets, the tracking pixels, or a single click. Copying database tables gets you everything — as long as the two sites happen to have identical auto-increment IDs, which they almost never do. Get that wrong and links end up attached to the wrong group, or pointing at a custom domain that belongs to a completely different record.
URL Shortify PRO now has a proper answer: one-click Export / Import, under URL Shortify → Tools.
One file, everything in it
The export produces a single file containing everything the plugin stores:
- every link, with its target URL, redirect type, expiry, password, nofollow and tracking flags
- the rules inside each link — custom domain, UTM parameters, dynamic redirection, link rotation, tracking pixels
- groups and tags, and which links belong to which
- custom domains, UTM presets and tracking pixels themselves
- auto link keywords
- your click history, if you want it
- your URL Shortify settings
You pick the scope before you start: Everything, Without click statistics, or a custom selection where you tick exactly what you need and see how many rows each one holds.
Click statistics are the reason that choice exists. A site with a few hundred links might have hundreds of thousands of clicks, and clicks are the bulk of the file. Leaving them out turns a large export into a small one. Bringing them along keeps the reporting continuity that made you care about migrating properly in the first place.
The file is gzipped by default, which typically shrinks it by a factor of ten or more. When the export finishes you get the row count, the file size and a SHA256 checksum, so you can confirm the file downloaded intact.
Nothing is written until you have seen what will happen
The import is deliberately a two-step process.
Upload the file and URL Shortify reads it end to end without writing anything. What you get back is a preview:
- how many rows of each type the file contains
- how many of them already exist on this site, with a few examples so you can see exactly which slugs or group names clash
- warnings worth knowing about — for instance if the two sites use a different link prefix
- an integrity check
That last one matters more than it sounds. Every export carries a digest of its own contents. If the file was truncated during download, or edited afterwards, the import tells you before you commit rather than silently bringing in three quarters of your links and leaving you to discover the gap later.
Only once you have read the preview do you choose how to proceed.
Merging versus replacing
Two situations come up, and they want different behaviour.
The destination is a fresh site. This is the straightforward migration: staging to production, old host to new host. Because the tables start out empty, URL Shortify keeps the original IDs, and the result is an exact copy of the source. Nothing is remapped because nothing needs to be.
The destination already has links. Now you have to decide what happens when something clashes. You get three choices:
- Keep what is already here. The existing entry wins and the imported one is skipped. This is the default, because it never destroys anything.
- Update it with the imported version. The existing entry is overwritten.
- Import as a new link with a new slug. The colliding link comes in as a brand new link with a freshly generated slug, and nothing existing is touched.
In this second case the imported records get new IDs, and every relationship is rewritten to match — including the ones that are not obvious. A link's custom domain and tracking pixels are stored inside its rules rather than in a plain column, and the default domain lives in your settings. All of those get repointed too, so you do not end up with a link quietly attached to whatever record happens to occupy ID 1 on the new site.
Replacing everything, safely
If you want the destination to become an exact mirror of the source, tick Delete all existing URL Shortify data first.
Before a single row is removed, URL Shortify runs a full export of your current data and hands you the download link in the results. If the import was a mistake, that file is your way back.
It is a small thing, but it changes how the option feels. "Delete everything and import" is a sentence that should make you hesitate. "Delete everything and import, with a backup taken first and offered to you" is a decision you can actually make on a Tuesday afternoon.
Built for sites that are not small
Both directions run in batches. The export walks each table by primary key rather than paging with OFFSET, so a table with a million clicks exports at the same steady rate as one with ten links. The import streams the file a line at a time, so memory usage stays flat no matter how large the package is.
In practice this means the progress bar keeps moving and neither operation hits a PHP timeout, which is the usual failure mode for anything that tries to move a lot of rows through WordPress in one request.
A few things worth knowing
Slugs travel unchanged. Your short links keep working on the new site, provided the domain is the same. If the two sites use different link prefixes the preview warns you — existing links still resolve, but new ones will use the destination's prefix.
API keys are excluded by default. They are in the file, but importing them is an explicit opt-in, because they would let the other site's integrations write to this one.
Upload limits are real. A big export can exceed what your server accepts. The Import section shows your limit; exporting without click statistics is usually enough to get under it.
Favourites are per user. They only line up if both sites share the same WordPress user IDs.
Getting started
The feature lives at URL Shortify → Tools → Export / Import, and it needs administrator access on both sites.
For a typical staging-to-production move: export Everything from staging, download the file, upload it on production, read the preview, and — if production is a clean install — run it as is. You will end up with an identical copy, click history included.
Full details, including every import option and what to do when a file fails its integrity check, are in the Export & Import documentation.