Migrating your website to Drupal is not a copy-paste job. It's an ETL process (Extract, Transform, Load) that sets off coordinated work across content, permissions, URLs, and search visibility. Miss a step and you risk broken pages or lost data.
As an experienced Drupal migration services provider, our team at Innoraft has walked dozens of businesses through this. Most start the move before mapping out where they're landing. This guide breaks the work into six phases, built to protect your data while you gain Drupal's flexibility.
Phase 1: What Should You Audit Before You Migrate to Drupal?
In this first phase of Drupal migration guide, take stock of what you have before anything moves. A solid audit shows what content stays, which modules or extensions have a Drupal equivalent, and where old code is likely to break your build.
Here's how experienced Drupal migration services audit each part of your site without missing anything:
| Web Element Category | Specific Items to Audit | What to Assess |
| Content & Data | Pages, blog posts, custom post types, taxonomies | ROT check: is it redundant, outdated, or trivial? Does the old structure map cleanly to Drupal's entity system? |
| Media & Assets | Images, PDFs, videos, audio, documents | Is each file attached to a live page or orphaned? Does it have alt text? Can it be compressed before the move? |
| Modules & Plugins | Third-party extensions, legacy plugins, add-ons | Is there a Drupal equivalent? Is it still in use? Does Drupal core already cover this? |
| Custom Code | Business logic, legacy themes, hardcoded scripts | Does it depend on deprecated PHP or Drupal APIs? Backend logic may need a modern Drupal 11 API; reusable front-end markup is a candidate for a Single Directory Component. |
| Users & Roles | Admin accounts, editors, contributors, customer profiles | Which accounts are inactive? Can permissions be consolidated into cleaner role-based access? |
| SEO & Routing | URL structures, meta titles, descriptions, canonical tags | What are your top 100 pages by traffic? What's the exact URL structure for your 301 redirect map? |
| Third-Party Integrations | CRMs, payment gateways, marketing APIs | How are these connected? Do current endpoints meet Drupal's security standards? |
| Webforms | Contact forms, lead forms, surveys | Do you need historical submission data, or just the form structure rebuilt in Drupal's Webform module? |
Drupal 10 reaches end of life on December 9, 2026, per Drupal.org's release schedule, which makes this audit a crucial part of your Drupal migration strategy. Every outdated module you drop and every deprecated line you catch is one less thing to break after launch.
Phase 2: How Do You Map Content to Drupal's Architecture?
Content mapping when migrating from other CMS to Drupal is critical, especially if you want to establish a multi-lingual and multi-site platform on Drupal. It can help prevent data loss, broken language, translations and misrouted content across various sites. Mapping turns your inventory into a working data model. Build content types, fields, and taxonomies before a single record moves over.
During Drupal website migration, build the empty structure first. Decide whether old WYSIWYG content stays in a formatted-text field or gets broken into components like Paragraphs or Layout Builder blocks, based on your new editorial model, not a fixed rule.
Once the structure is in place, the technical work begins:
- Field mapping: YAML definition files or custom plugins map source fields to their Drupal destinations.
- Complex Fields: Multi-value items such as an image’s URL and alt text need to be specifically targeted to ensure that nothing is lost in transit.
- Relationships process: plugins including migration_lookup process plugin, cross-reference IDs to keep taxonomy terms, comments, and author profiles linked after the move.
- Legacy quirks: mismatched date formats and blank required fields get standardized in the same pass, not fixed later by hand.
Get this Drupal migration process wrong and you get orphaned content or duplicate IDs. Get it right and cleanup happens automatically as data flows in.
Phase 3: How Do You Prepare a Drupal 11 Environment?
If you want well-optimized Drupal site performance, you need to start with the right environment and foundation. Your target environment for Drupal CMS migration needs a fresh foundation built to securely pull in and process legacy data from day one.
Why Does Drupal 11 Make More Sense Than Drupal 10 for a New Migration?
As Drupal 10 comes to its end of life in December 2026, Drupal 11 is generally the better target for Drupal website migration. However, Drupal 11 and its new features have firm platform requirements. which is why as an experienced Drupal migration services provider, we advise businesses to confirm the database server requirements and composer requirements before scaffolding anything.
| Component | Minimum Requirement |
| PHP | 8.3 |
| MySQL / Percona | 8.0 |
| MariaDB | 10.6 |
| PostgreSQL | 16 |
| SQLite | 3.45 |
| Composer | 2.7.0 minimum (2.9.3 latest secure release recommended) |
Once you have confirmed these requirements, you need to:
- Scaffold a fresh codebase: run composer create-project drupal/recommended-project rather than migrating files into an existing directory. Lando or DDEV keeps local development isolated before staging.
- Install the migration stack: enable core's migrate module for every project, adding migrate_drupal only for Drupal-to-Drupal moves. WordPress or another CMS uses Migrate API source plugins instead, extended with Migrate Plus and Migrate Tools for Drush import and rollback.
- Set up a secure source connection: a read-only database link, an API, or a CSV/XML export all work with Migrate API. Pick whichever the source supports, without opening more access than needed.
- Lock in CI/CD and config management: keep Development, Staging, and Production separate. Export content models and views to YAML via Configuration Manager, push through Git, and pull into staging with drush config:import instead of the admin UI.
Phase 4: How Does the Core Drupal Migration Actually Run?
Phase 4 of this guide to Drupal migration process is the actual ETL work, not a single button press. It runs in controlled, repeatable passes from the command line.
- Respect the dependency order: a Media entity references a File entity, not the other way round. Transfer the asset, create the File entity, then link the Media entity before dependent content runs, or the import breaks. Users and taxonomy terms need the same ordering.
- Run it through Drush, not a browser: browser imports risk timeouts and memory crashes at scale. At Innoraft, our developers run YAML scripts via drush migrate:import for fast processing and detailed logs, with rollback (drush migrate:rollback) that still takes real time at scale.
- Baseline first, on staging: the first full pull imports users, taxonomy terms, media, and content nodes, so QA can check Layout Builder components and any broken or missing fields.
- Delta migrations avoid a long content freeze: Drupal's Migrate API can track a high-water mark, usually a timestamp, so a properly configured run only pulls newer records. That's not automatic, it needs a reliable source value plus change tracking for records the timestamp misses. Get that right and your team keeps publishing while updates flow in before launch.
Phase 5: How Do You Preserve SEO During a Drupal Migration?
Drupal website migration can be the riskiest moment for a site's search visibility. Unmapped old URLs can cost you years of ranking equity overnight, so this work happens before launch, not after.
- Map every legacy path: Before triggering the Drupal migration process, you need to guarantee your hard-earned SEO doesn't tank. Start by mapping out every single legacy path. Toss your existing URLs into a spreadsheet and cross-reference them with your new Drupal routes. The goal here is simple: don't let any high-traffic pages slip through the cracks.
- Set clean URL patterns: Next, get your URL patterns in order. Rely on the Pathauto module to automatically spin up stable, readable aliases (something like /blog/6-Phase Guide to Drupal Migration Services) for whatever new content types you've built. Don't stress too much about keyword density right now; focus entirely on clarity and consistency.
- Handle non-standard legacy paths with aliases and redirects: Inevitably, you'll run into weird legacy paths that Pathauto just can't handle. As an experienced Drupal migration services provider, when that happens, our experts stick to manual path aliases or standard redirects rather than writing custom routing code. Reserve RouteSubscriber for when you actually need to alter how Drupal processes routes, not just to keep an old URL alive.
- Enforce 301s: As part of Drupal migration best practices, you have to enforce strict 301s. Keep in mind that the Redirect module won't magically track down your old URLs, you have to actually import them from the map you made in Phase 1. Make absolutely sure they're set to '301 Moved Permanently' to preserve your link equity, and go ahead and turn on auto-redirects to catch any future alias tweaks.
- Migrate the metadata too: Don't forget your metadata, either. The Metatag module will smoothly carry over your page titles, descriptions, canonical tags, and Open Graph data. Just remember that alt text doesn't hitch a ride here; that data comes over with your image fields during the Phase 4 media migration.
- Rebuild and submit your sitemap: Once your architecture is fully locked in, generate a brand-new XML sitemap so you're ready to submit it to Google Search Console on launch day. But before any search bots get a look, run a crawler like Screaming Frog over your staging environment. It's the best way to smoke out rogue 404s, missing canonical tags, and broken links while you still have time to fix them.
Phase 6: What Does Go-Live Look Like for a Drupal Migration?
Launching a massive Drupal CMS migration is stressful enough without unexpected surprises. If you skimp on testing or rely on a messy staging setup, you are essentially guaranteeing data loss and a sharp drop in search rankings the minute the new site goes public.
Keep your hands off the DNS settings until you have cleared two distinct testing phases:
- Data and Functionality QA: Break out your diff scripts to verify that node counts, field mappings, and entity relationships actually match the source database. After the data checks out, trigger your Cypress or Playwright tests to beat up the search bars, webforms, and user logins. You will also need to pull separate performance benchmarks for TTFB and your Core Web Vitals.
- User Acceptance Testing (UAT): Give your content editors access to the staging environment way before launch day.
The cutover follows a fixed sequence:
- Lower your DNS TTL ahead of the cutover, commonly 48 to 72 hours out, so cached records expire fast once you switch.
- Freeze the legacy CMS on launch day. Delta migrations avoided a months-long freeze, but a short one here stops last-minute data loss.
- Run the final delta migration to pull in anything created since the last pass.
- Switch DNS, watch error logs, confirm analytics is firing, and check Search Console for crawl errors.
What's the Best Way to Start Your Own Drupal Migration?
Start with the audit, not the build. Every phase here depends on knowing what you're carrying over before Drupal 11 even exists, and skipping it is the biggest reason migrations run over time and budget.
Want expert help migrating your website to Drupal? Connect with our experts today.
FAQ
Frequently Asked Questions
Didn’t find what you were looking for here?