TL;DR
CMS migrations change URL structures in ways that break more than you planned for. Drupal uses node/123 patterns, WordPress uses /category/post-title/, and both might add or remove trailing slashes, change category paths, or handle special characters differently. The pages you “migrated” now live at completely different URLs, and all your backlinks point to 404 errors. A plugin showing active redirects doesn’t mean those redirects actually fire when servers receive requests.
The Conversation
Daniel, marketing manager at a nonprofit, migrated from Drupal to WordPress last week, 400 pages, basic SEO knowledge, traffic dropped 70% immediately after launch: We launched our new WordPress site last week and traffic dropped from 20,000 monthly visitors to about 6,000. The content is the same. Design is actually better. Our web developer said everything migrated correctly. What happened?
SDC SEO Brain: Traffic drops after CMS migration almost always mean URL changes weren’t handled properly. When you switched from Drupal to WordPress, did your URLs stay exactly the same?
Daniel: They’re similar. We used the same page titles and categories. The structure should be mostly the same.
SDC SEO Brain: Similar isn’t the same. Give me an example of what a Drupal URL looked like versus the WordPress version.
Daniel: On Drupal it was like /programs/youth-mentorship. On WordPress it’s /programs/youth-mentorship too. We kept the structure.
SDC SEO Brain: What about trailing slashes? Does one have a slash at the end and the other doesn’t?
Daniel: I’m not sure. Does that matter?
SDC SEO Brain: To Google, /programs/youth-mentorship and /programs/youth-mentorship/ are different URLs. If your old site had trailing slashes and the new one doesn’t, or vice versa, every single page changed. All your backlinks now point to 404 errors.
Daniel: That seems crazy. It’s just a slash.
SDC SEO Brain: HTTP treats them as distinct URLs. Google indexes them separately. A slash difference means all your indexed URLs are now wrong. But let’s check more. What about your Drupal node URLs? The /node/123 pattern?
Daniel: We had those. Ugly URLs. That’s part of why we switched. We set up pretty URLs in WordPress.
SDC SEO Brain: Did you redirect the node URLs to the new pretty URLs? Every /node/123 needs a redirect to /programs/youth-mentorship.
Daniel: I think the developer mentioned redirects. Let me check the plugin.
Daniel: There’s a Redirection plugin. It shows 400 redirects are active.
SDC SEO Brain: Active in the plugin doesn’t mean working in practice. Test one. Open an incognito window and go to an old Drupal URL. Does it redirect to the WordPress version or show a 404?
Daniel: It’s showing 404. But the plugin says redirects are active. I don’t understand.
SDC SEO Brain: Several things can prevent redirects from executing even when a plugin thinks they’re set up. Your server configuration might intercept the request before WordPress handles it. Or the plugin might not be loading for some requests. Or there’s a conflict with another plugin or caching.
Daniel: How do I figure out which one?
SDC SEO Brain: Test directly in the browser with developer tools open, watching the Network tab. When you request an old URL, look at the HTTP response code. Is it a 404, a 500, or a 301? If it’s anything other than 301 redirecting to the correct page, something’s broken in the redirect chain.
Daniel: It says 404. The redirect isn’t firing at all.
SDC SEO Brain: Is your WordPress site using nginx or Apache as the web server? Different servers handle redirect plugins differently.
Daniel: I have no idea. I’d have to ask the hosting company.
SDC SEO Brain: Ask them, but also check if you have an .htaccess file in your WordPress root. If you’re on Apache, redirects can be set there independent of any plugin. If you’re on nginx, you need server configuration that’s different from .htaccess.
Daniel: The developer said he handles all that. I trusted him.
SDC SEO Brain: Trust but verify. Your traffic dropped 70%. Something is objectively not working. The developer may have configured redirects in WordPress but not realized the hosting environment doesn’t support them. This is a common mistake when migrating sites.
Daniel: What do I do right now? We can’t wait weeks to debug this.
SDC SEO Brain: Emergency triage. First, export your list of old URLs from Google Search Console, all the pages that were indexed. Second, compare those against your new site URLs. Third, implement redirects at the server level, not plugin level, for any mismatches. If you can’t do server-level redirects, consider a Cloudflare free plan where you can set up redirect rules at the CDN layer.
Daniel: How do I export URLs from Search Console?
SDC SEO Brain: Go to Search Console, then Performance report, filter for Pages, and export. That gives you URLs that had impressions. Then go to Indexing, Pages, and look at indexed URLs. Export both. These are the URLs Google knew about that now likely 404.
Daniel: There are 400 pages. That’s a lot of redirects to set up manually.
SDC SEO Brain: For a site your size, you need a redirect map CSV. First column is old URL, second column is new URL. Then use a tool that can import that CSV into redirect rules. Yoast Premium has this feature. So does Rank Math. Or you can generate .htaccess rules from the CSV.
Daniel: What if some pages don’t exist in WordPress? We dropped some old content during the migration.
SDC SEO Brain: Redirect those to the most relevant remaining page. An old program page that no longer exists should redirect to your programs hub or homepage. Never redirect to a 404. The redirect itself tells Google “this content moved here” even if it’s not an exact match.
Daniel: What about the backlinks we had? Are those lost forever?
SDC SEO Brain: Not lost, just disconnected. Backlinks to old URLs still exist on other sites. Once your redirects work, those backlinks flow through the redirect to your new URLs. Google follows redirects when evaluating backlinks. You haven’t lost the links; you’ve temporarily broken the path.
Daniel: How long until rankings recover after we fix redirects?
SDC SEO Brain: Once redirects work, Google needs to recrawl the old URLs, follow the redirects, and update its index. For a nonprofit site with 400 pages, expect 2-4 weeks for most pages to be recrawled. Rankings typically recover within 4-8 weeks if redirects are comprehensive and correct.
Daniel: 4-8 weeks of 70% less traffic. That’s going to hurt our donations.
SDC SEO Brain: Focus on your highest-value pages first. What generates the most traffic and donations? Prioritize fixing redirects for those URLs. Use Search Console to identify which old URLs had the most clicks. Fix those first while you work through the full redirect map.
Daniel: Is there any way to check if redirects are working without testing every single one?
SDC SEO Brain: Screaming Frog can crawl a list of URLs and report response codes. Feed it your old URL list and see which return 301 (redirect) versus 404 (broken). That shows you which redirects are working and which aren’t at scale.
FAQ
Q: Why do CMS migrations break URLs?
A: Different CMSs use different URL structures by default. Drupal uses /node/123, WordPress uses /category/post-title/. Even if you try to match structures, trailing slashes, category paths, and special character handling often differ.
Q: My redirect plugin shows active redirects but they don’t work. Why?
A: Server configuration can prevent WordPress from handling requests. On nginx servers, plugins may not control redirects. Caching layers may serve 404s before redirects fire. Test actual URL requests, not plugin settings.
Q: Are my backlinks lost after a migration breaks URLs?
A: No. Backlinks still exist on external sites. Once redirects work, link equity flows through the redirect to new URLs. Google follows redirects when evaluating backlinks. Fix redirects to reconnect the links.
Q: How long does SEO recovery take after fixing redirects?
A: Expect 2-4 weeks for Google to recrawl and process redirects for most pages. Rankings typically recover within 4-8 weeks. Prioritize high-traffic pages for fastest recovery of critical traffic.
Q: Should I use plugin redirects or server-level redirects?
A: Server-level redirects are more reliable because they execute before WordPress loads. But plugin redirects work on many hosts. Test that your chosen method actually fires redirects for real requests.
Summary
CMS migrations change URL structures in ways beyond what you planned. Trailing slashes, category paths, and special characters often differ between platforms even when you try to preserve URLs.
Plugin redirects may not fire if server configuration intercepts requests first. Test actual URLs in browser, not plugin settings. Use Screaming Frog to test redirect status at scale.
Export old URLs from Search Console and create a comprehensive redirect map. Every old URL needs a redirect to the appropriate new URL or closest equivalent.
Backlinks aren’t lost, just disconnected. Once redirects work, link equity flows to new URLs. Google follows redirects when evaluating backlink value.
Prioritize high-traffic pages for fastest recovery. Use Search Console to identify which old URLs generated the most clicks and fix those redirects first.
Sources
- Google Search Central: Site moves with URL changes
- Google Search Central: Redirects and SEO
- WordPress Developer Resources: URL rewriting