Rankings survive the move when every old URL gets a one-to-one 301 redirect to its closest new page. Titles and content stay the same on launch day. Then you watch Search Console every day for 30 days. Most losses come from missing redirects and changed URLs. WordPress itself rarely causes them. If you would rather hand the job over, see how Toimi approaches moving a site off a legacy CMS.
Everything below follows Google's own site-move documentation, checked as of September 30, 2026. Links go to the primary pages, so you can verify each rule yourself.
Short answer
The whole job fits in three phases, and each has a short list of checks. The full checklist with a "how to verify" column sits in the launch section below.
- Before the move: collect every URL the old site has ever exposed, then map each one to a new URL.
- Launch day: switch redirects on in the same release as the new site, remove staging blocks, submit the new sitemap.
- First 30 days: read the Page indexing and Crawl stats reports daily, fix every 404 that had traffic or links, keep the old sitemap submitted.
Expect some movement anyway. Google's site move guide warns of ranking fluctuations while pages are recrawled. For a medium-sized site, it says the switch to new URLs can take a few weeks or more (as of September 30, 2026). Fluctuation is normal, while a steady slide for weeks is a sign that something in the map is wrong.
What actually loses rankings in a CMS migration
Five mistakes cause most of the damage. None of them is specific to WordPress.
Missing redirects. An old URL that returns 404 loses whatever links and history it carried. The usual culprits are pages nobody remembered: Drupal node paths, old paginated archives, PDF files, image URLs that other sites hotlink. A crawl of the old navigation will not find them, but server logs will.
Redirect chains. Old sites carry old redirects. Drupal may send /node/123 to an alias, and the alias then points to the new WordPress page. That is two hops. Google recommends redirecting straight to the final destination and, if a chain is unavoidable, keeping it ideally to no more than 3 hops and fewer than 5 (Google Search Central, as of September 30, 2026). Flatten the chain in your map.
Redirects to the home page. Sending hundreds of dead URLs to / feels tidy. Google says this can confuse users and might be treated as a soft 404. Redirect to the closest equivalent. If there is none, return 410 on purpose.
Changed titles, headings and content on launch day. A migration already changes templates, internal links and page weight. Rewriting titles and H1s at the same time mixes two experiments. When traffic drops, you cannot tell which change caused it. Keep them identical for launch. Rewrite later, in batches.
Staging settings left on. Development sites are usually blocked with noindex or a robots.txt disallow rule. Google's guide lists forgotten noindex and robots.txt blocks as a common site-move mistake. The same goes for canonical tags that still point at the staging host.
Lost internal links belong on this list too. Menus get rebuilt by hand. Footer links and related-content blocks from Drupal Views simply vanish. Pages that lose their internal links lose crawl priority, even with a perfect redirect in place.
Before the move: inventory and redirect map
The redirect map is the most important file in the project. Build it before a single piece of content moves. Keep it in a spreadsheet, since it will be edited by several people.
Collect every URL
Google's guide suggests starting with your sitemaps, server logs, analytics and the Links report in Search Console. Use all four sources. Each one misses something.
- XML sitemap. Fast to parse, it lists what the CMS thinks is public, which is rarely everything.
- Full crawl of the live site with any desktop crawler. It finds linked pages, including parameters and pagination.
- Server access logs for as many months as the server keeps, filtered to 200 responses and to Googlebot requests. This is the source most teams skip. It surfaces old campaign pages, orphaned PDFs and URLs that only exist in someone else's backlinks.
- Search Console export from the Performance report (pages with clicks or impressions) and from the Links report (top linked pages).
Merge the lists and deduplicate. Decide the fate of each URL: kept at the same path, redirected with a 301, or retired with a 410. No fourth option.
Redirect map template
Copy these columns into your sheet. The rows below show typical Drupal and Bitrix paths.
| Old URL | New URL | Status | Canonical on new page | Title kept? | Notes |
/node/123 | /services/audit/ | 301 | self | yes | Drupal system path; the alias /services/audit also exists — redirect both, no chain |
/taxonomy/term/45 | /category/industry-news/ | 301 | self | yes | Term page becomes a WordPress category; check paged versions |
/blog/2019/05/spring-update | /blog/spring-update/ | 301 | self | yes | Pathauto alias with date; WordPress permalink drops the date |
/catalog/detail.php?ID=482 | /products/steel-valve-dn50/ | 301 | self | yes | Bitrix element by ID; map by the ID, since the name may repeat |
/news/index.php?PAGEN_1=2 | /news/page/2/ | 301 | self | n/a | Bitrix pagination; each page keeps its own URL |
/catalog/valves/ | /product-category/valves/ | 301 | self | yes | Bitrix SEF section URL mapped to a WooCommerce or taxonomy archive |
Use 301 or 308 for permanent moves. Google treats both as permanent and as a strong signal that the target should be canonical (Redirects and Google Search, as of September 30, 2026). Implement redirects on the server or in a WordPress redirect plugin that answers with a real 3xx status. JavaScript redirects are Google's last-resort option.
Each new page needs a self-referencing rel="canonical", per the site move guide. Keep the map after launch. You will need it to update internal links and to read the Search Console reports.
Drupal specifics
Drupal 7 reached end of life on January 5, 2025, when security support ended (Drupal.org, as of September 30, 2026). That date pushes many owners toward a move. It also means the old site may already be fragile, so take a full database and file backup before the export.
Nodes and aliases. Every Drupal node has a system path like /node/123, and usually a Pathauto alias as well. Both may be indexed. Your map needs a row for each. Pull the url_alias table (Drupal 7) or path_alias (Drupal 8 and later) straight from the database. It gives you the full list in one query.
Taxonomy terms. Term pages at /taxonomy/term/45 often have aliases too. Decide whether each vocabulary becomes a WordPress category, a tag or a custom taxonomy. Paged term listings need their own rows.
Views pages. Listing pages built with Views have no node behind them. Exporters skip them. Search your logs for their paths and rebuild each one as a WordPress archive or a page with a query block.
Multilingual sites. Drupal stores translations as linked entities with language prefixes such as /de/. WordPress handles languages through a plugin, and each plugin has its own URL scheme. Pick the scheme first. Then map every language prefix. If the old site used hreflang, Google's guide says to update those annotations to the new URLs.
Content export. WordPress documentation lists third-party importers for Drupal, including FG Drupal to WordPress, compatible with Drupal 4 through 9 (WordPress Developer Resources, Importing Content, as of September 30, 2026). An importer moves content. It does not build your redirect map. Check field mapping on 20–30 sample pages before trusting the full run.
Bitrix specifics
1C-Bitrix sites put more SEO value in query strings than most platforms. That makes the inventory harder.
Element and section pages. Older Bitrix templates serve items through detail.php?ID= or ?ELEMENT_ID= and lists through index.php?SECTION_ID=. Many sites later switched on SEF (search-engine-friendly) URLs but never redirected the old parameter versions. Both may still be indexed, so map both.
Pagination. Bitrix appends PAGEN_1, PAGEN_2 and so on, one number per component on the page. Google recommends a unique URL for each page in a sequence and advises against using the first page as the canonical for the rest (Google Search Central, pagination, as of September 30, 2026). Map ?PAGEN_1=2 to /page/2/ and keep self-canonicals.
Infoblocks. Content lives in infoblocks. In WordPress, each infoblock becomes a post type or taxonomy, and each property becomes a custom field. Flatten properties into plain text and you lose filtering and structured data. That step is hard to undo later.
Smart filter. The Bitrix faceted filter has no direct equivalent in WordPress. You rebuild it with a plugin or custom code. Decide which filter combinations deserve indexable URLs. Most do not. Leave those out of the sitemap and keep them uncrawlable.
Integrations. Exchange with 1C, CRM forms and delivery modules all need a new home. They do not affect rankings directly, though they do move the launch date. Toimi's page on the subject calls the split between content, URLs and integrations "the difference between a two-week job and a three-month one," and ties it to countable inputs: infoblocks, custom components, integrations. For the detailed order of work, see a Bitrix-specific migration plan.
Launch day and the first 30 days
This is the working checklist. Run it in order; every item has a check you can do in minutes.
Before the move
| # | Task | How to verify |
| 1 | Export URLs from sitemap, crawl, server logs and Search Console | One merged sheet; count of unique URLs noted |
| 2 | Assign kept / 301 / 410 to every URL | No empty "New URL" or "Status" cells |
| 3 | Flatten existing redirect chains in the map | Every old URL reaches a 200 page in one hop |
| 4 | Freeze titles, H1s, meta descriptions for launch | Crawl diff old vs. staging: zero title changes on mapped pages |
| 5 | Carry over structured data and Open Graph tags | Rich Results Test on 10 templates matches the old site |
| 6 | Rebuild menus, footer and related-content links | Internal link count per key page close to the old site |
| 7 | Keep image and PDF URLs, or map them | Sample of 50 media URLs returns 200 or 301 |
| 8 | Set self-referencing canonicals and hreflang to new URLs | Crawl shows zero canonicals pointing to staging or old paths |
| 9 | Prepare two sitemaps: old URLs and new URLs | Both files validate and open in a browser |
| 10 | Record baseline: clicks, impressions, indexed pages | Screenshot of Performance and Page indexing reports |
Launch day
| # | Task | How to verify |
| 1 | Ship redirects in the same release as the new site | curl -I on 20 old URLs returns 301 with the right Location |
| 2 | Remove noindex and staging robots.txt rules | View source on 5 templates; fetch /robots.txt |
| 3 | Run a full crawl of the old URL list | Zero 404s, zero chains, zero 302s |
| 4 | Submit both sitemaps in Search Console | Sitemaps report shows "Success" for each |
| 5 | Test forms, search and checkout | Test submissions arrive in the inbox and the CRM |
| 6 | Check server capacity | Response times stay stable while Googlebot recrawls |
First 30 days
| # | Task | How to verify |
| 1 | Read the Page indexing report daily | "Not found (404)" count flat or falling |
| 2 | Watch Crawl stats | Share of 3xx rises, then falls; host status stays green |
| 3 | Fix 404s from logs and Search Console | Each fixed URL added to the map and re-tested |
| 4 | Compare clicks per mapped page with baseline | Any page with a clear drop gets a manual review |
| 5 | Update high-value external links | Top linking sites contacted with new URLs |
| 6 | Keep redirects live | No redirect rule removed; plan for at least one year |
Two Search Console reports do most of the work. The Page indexing report shows which URLs are indexed and why others are not. The Crawl Stats report shows how Googlebot is fetching the site, broken down by response code. Google's guide adds that the sitemap of old URLs should gradually drop to zero indexed pages while the new one rises. Warnings about redirects in the old sitemap are expected.
How long do redirects stay? Google says to keep them as long as possible, generally at least one year, so it can transfer all signals to the new URLs (as of September 30, 2026). Treat that as the minimum for a CMS move as well.
The Change of Address tool applies only when the domain changes. Its help page says not to use it for URL changes within the same site; redirects and updated sitemaps handle that. If you do move to a new domain at the same time, the tool works at domain level, and Google asks you to keep redirects for at least 180 days (as of September 30, 2026). Changing the CMS and the domain together doubles the risk. Split them if the schedule allows.
FAQ
Should I migrate Drupal 7 straight to WordPress or upgrade Drupal first?
Go straight to WordPress if the decision is already made. Upgrading Drupal 7 to a newer Drupal first means a second content migration, with no benefit to the WordPress build. Export from the Drupal 7 database directly. Keep a full backup of the old site and its files until the 30-day monitoring window is over.
Can I change URL structure and design at the same time?
Yes, provided every changed URL has a 301 in the map. URL changes are safe when redirected properly. Design changes carry less search risk than content changes. The real risk is rewriting titles and copy on the same day, because a traffic drop then has several possible causes. Keep text identical for launch and rewrite in later batches.
Is a WordPress redirect plugin enough for thousands of URLs?
Usually yes, if it answers with a real 301 or 308 status. For very large maps, server-level rules in Nginx or Apache respond faster and do not load WordPress at all. Pattern rules help with Bitrix parameter URLs. Whatever you use, test a random sample of old URLs with curl -I after launch.
What should happen to pages I delete during the move?
Return 410 for pages with no replacement, and 301 for pages with a close equivalent. Never send them all to the home page. Before deleting, check logs and Search Console links. A thin page with strong external links deserves a redirect to the nearest relevant page, even if its content goes away.
When is the migration safe to call finished?
Call it finished when the old-URL sitemap shows almost no indexed pages and clicks match your baseline. For a medium-sized site, Google says that shift takes a few weeks or more. Keep monitoring weekly after day 30. Leave the redirects in place for at least a year, whatever the charts show.