Jul 27, 2026
Migrating Joomla to WordPress without losing rankings
A migration loses rankings for one reason: the old URLs stop answering. Everything else is recoverable. Here is the order I do it in, and the redirect map that does the actual work.
Site migrations have a reputation for destroying search traffic. They do not have to. Rankings are lost for one reason above all others: the old URLs stop answering, and everything Google knew about them is thrown away along with the answer.
I have moved sites off Joomla, OpenCart and DataLife Engine onto WordPress for clients in four countries. The order below is the one that has never cost a client their rankings.
Inventory the old site before you touch the new one
Before anything is built, I want a complete list of what currently exists and what it is worth:
- Every URL the old CMS serves, from a full crawl — not from the sitemap, which is usually incomplete.
- Every URL that has received an organic click in the last twelve months, from Search Console.
- Every URL with an external link pointing at it.
- The current title, meta description and H1 for each.
The union of those lists is the set of pages the migration is responsible for. Anything in it that has no destination on the new site is a decision, made deliberately, and written down.
The redirect map is the project
Old CMSs produce URLs like /index.php?option=com_content&view=article&id=42. WordPress produces /services/roof-repair/. Nothing automatic will map one to the other correctly, and a plugin that redirects everything it cannot match to the homepage is worse than a 404 — Google treats it as a soft 404 and drops the page anyway, having wasted a crawl on it.
So the map is a spreadsheet, built by hand, one row per old URL, checked by a person. The rules I hold to:
- Every old URL redirects to the closest equivalent page, not to the homepage and not to a category.
- One hop. Old URL to final URL, 301, no chain.
- If there is genuinely no equivalent, the URL returns 410 and the decision is recorded.
- Query-string URLs need their parameters preserved in the matching rule, or half of them silently fall through.
Rebuild, do not redesign
The temptation is to migrate and redesign in the same release. Resist it for one reason: if traffic drops afterwards, you will not know which change caused it. Move the content first, on the same structure and the same copy. Redesign after the new site has proved itself in search for a few weeks.
Where a redesign is the whole point of the project — as it was for a dermatology clinic I moved off an ageing Joomla install, where functionality had been broken for years — the migration and the redesign still ship as two separate, measurable steps.
Launch day
- Put the new site live with the redirect map already active. Not afterwards — the map goes live in the same deploy.
- Crawl the old URL list immediately and confirm every single one returns 301 to a 200. This is the check that catches the twenty rows somebody mistyped.
- Submit the new sitemap in Search Console. Leave the old one in place for a few weeks; it is how Google finds the redirects.
- Verify both the
wwwand non-wwwvariants of the new domain, and check that HTTPS is forced. - Keep the old server reachable if the domain changed, because the redirects live there.
The two weeks after
Expect a wobble. Rankings move around for a week or two while Google re-crawls, and the instinct to start changing things in the middle of that is the instinct to resist. What I actually watch:
- Crawl stats — is Google fetching the new URLs at a healthy rate?
- Coverage errors — new 404s are almost always a redirect rule that did not match.
- Impressions per URL, comparing the new page against the old one it replaced.
- Core Web Vitals, which on a WordPress rebuild should be the one metric that is dramatically better.
If traffic is still down after a month, it is nearly always the redirect map. Go back to the inventory, re-crawl the old URL list, and find the rows that are answering with something other than a single 301 to a live page.
Your site
Same problem on your site?
Send the URL. You get back what is slow, why, and what it is worth fixing — free, and yours to keep either way.
0 comments