Mazahir Abbas Get Started
← Field notes ·Migration Mar 03, 20269 min read

Moving 80k posts from Wix to WordPress without losing a single keyword

A twelve-year-old Wix site, eighty thousand URLs and a client who could not afford a traffic dip. Here is the redirect map, the import script, and the two things I would do differently.

The brief arrived the way these always do: a spreadsheet, a deadline, and a sentence that read "we absolutely cannot lose our organic traffic." Twelve years of recipes, guides and seasonal posts, all living inside a Wix site with URLs nobody had ever audited.

Audit before you export anything

Before a single post moved I pulled every indexed URL from Search Console, the sitemap and a full crawl, then de-duplicated the three lists. That produced 81,400 URLs — about 1,400 more than the client believed existed. Roughly 6,000 of them had never earned a click in three years.

Those 6,000 were the win. Not migrating dead weight cut the import time in half and removed thousands of thin pages the new site would have had to justify.

The numbers
81,400
URLs found
312
Redirect rules
0
Keywords lost

Redirects are patterns, not rows

Eighty thousand redirects would have made the server cry. Wix URL structures are predictable enough that almost everything collapsed into 312 regex rules, with a hand-written list for the two hundred pages that mattered most — the ones driving 80% of the traffic.

wp post list --post_type=post --format=csv \
  --fields=ID,post_name,post_date > live-posts.csv

# dry run first, always
wp rewrite import redirects.csv --dry-run

Every rule was tested against a sample of live URLs on staging before cutover. The dry run caught fourteen rules that would have chained two hops — enough to leak authority on the pages that could least afford it.

A migration is not a content transfer. It is a promise that every old link still lands somewhere useful.

Cutover on a Tuesday morning

Never a Friday. We flipped DNS at 9am with the client on a call, ran the redirect test suite twice, and resubmitted the sitemap within the hour. Traffic dipped 4% for six days, then came back above where it started.

  • Staging built from real content, not lorem ipsum
  • Redirect suite run pre- and post-cutover
  • Analytics and Search Console verified before the announcement
  • A rollback plan nobody needed but everybody wanted

What I would do differently

Two things. First, I would prune the dead 6,000 posts a month earlier, so the client had time to disagree with me calmly. Second, I would build the image pipeline before the import rather than after — recompressing 40,000 images retroactively cost a weekend nobody billed for.

If you are staring down a migration and the phrase "we cannot lose traffic" is in the brief, the honest answer is that you can protect it — but only with an audit first and a redirect map you actually tested.

Written by
Mazahir Abbas

WordPress and Bricks developer. 100+ production builds, five years of migrations, and a stubborn refusal to ship below Lighthouse 90.

Work with me

Keep reading

All notes →
{{ r.cat }}

{{ r.title }}

{{ r.date }}{{ r.read }}