19+ Guides to nail your Drupal 9 migration
Whether you're in the middle of a Drupal upgrade or you're thinking about starting an upgrade next year, we've pulled together 19 resources—largely written by members of the Evolving Web team!—to help you succeed.
When upgrading from Drupal 7 or 8, the fact is that the content migration will probably go smoothly, but you may your customizations will require more work. If you find that you're halfway through what seemed an easy upgrade and suddenly you're having a hard time, don't worry. That's what these guides are for. :)
Pro tip: Since Drupal 9 is more of a continuation of Drupal 8 than a completely new version, the vast majority of information you’ll come across about migrating to Drupal 8 still applies to Drupal 9, too.
Migrating straight from Drupal 7 to Drupal 9
Most Drupal sites are still running on Drupal 7, but that’s starting to change. With the release of Drupal 9.0 and 9.1 earlier this year—and the announcement that Drupal 10 is planned for 2022—one of the most common questions we’ve been hearing from the community is “Do I need to upgrade from Drupal 7 to 8 before moving on to Drupal 9?”.
The answer, in most cases, is no. Since Drupal 9.0 is more a continuation of Drupal 8 than as a whole new beast, it's usually not needed.
So what is needed? 3 simple steps:
The Plan: Preparing for a Drupal migration
Choose your migration approach
Measure once, cut twice. When it comes to something as critical as your website, never skip the planning stage.
As Drupal.org puts it,
While the content of your previous Drupal site can most probably be migrated without issues, the configuration of your Drupal 8 site will most probably need some manual tasks. For example, Views module doesn’t have an automatic upgrade path in core at the moment which means you will need to manually create the views on your Drupal 8 site. The most suitable approach needs to be considered for each site. (source)
If any of this is news to you, we recommend reading through Drupal.org’s guide to choosing an upgrade approach before you dive in.
Get your site ready for Drupal 9
Once you have a high-level idea of how you’ll approach your migration, read Things to know before moving from Drupal 6 or 7 to Drupal 8.
This post covers how to prep your site for a successful migration: what needs to be refactored or rewritten, what risks might get introduced by legacy contrib modules, and how to take advantage of the pre-migration stage to work on your site’s fundamentals.
Another good page for your bookmarks is How to prepare your Drupal 7 or 8 site for Drupal 9 from Drupal.org. It contains a list of available deprecation checking tools and offers guidance on how to get ready to use Twig 2 with Drupal 9, among other handy advice.
The Migration: Moving different data types to Drupal 9
These articles have all been reviewed in late 2020 for accuracy and feature practical code snippets to kickstart your project setup.
The specifics of the data migration will vary based on the data types that you're using in your Drupal install and how much custom work you've put into your site. That said, these guides are all based on scores or hundreds of hours that our core team has put into migrating sites, so they should help you work through the process.
- Drupal 8 Migration: Migrating Basic Data (Part 1)
- Drupal 8 Migration: Migrating Taxonomy Term References (Part 2)
- Drupal 8 Migration: Migrating Files / Images (Part 3)
- Migrating Aliases and Redirects to Drupal 8
- Migrating hierarchical taxonomy terms
- Migrating media items and their relationships
A special case: Migrate translated content to Drupal 8 or 9
As Drupal 8 and 9 offer a standardized way of managing translations, many sites running multilingual Drupal 7 are making the switch to a later version and discovering that they should change how they're managing translated content. In Drupal 7 there are two ways to translate content:
- Using the content_translation module. The D7 core way of translating content, where every translation is a separate node.
- Using the entity_translation module. Maintains one node with a unique nid, while translations take place at the field level.
We put together step-by-step instructions for migrating content that was translated according to each of the above scenarios:
- Migrating Content Translated with "Content Translation" from Drupal 7 to Drupal 8 or 9
- Migrating Content Translated with "Entity Translation" from Drupal 7 to Drupal 8 or 9
➡️ If you’re migrating translated content to Drupal 8 or Drupal 9 from a non-Drupal source, read: Migrate Translations from CSV, JSON or XML to Drupal 8.
Optimizations & Tweaks: Customize your Drupal migration
If your migration project requires a more bespoke solution, check out these advanced guides written by Evolving Web developers. Note that you likely don't need to worry about many of the steps covered here unless your site has a lot of customization in how you're using Drupal. That said, if you've read the above guides and don't see an answer to questions that you have, read these next.
- Profiling and Optimizing Drupal Migrations with Blackfire
- Writing a Custom Migration Source Plugin in Drupal 8
Another good resource is the Drupal.org page Customize migrations when upgrading to Drupal 8.
Need a hand?
Evolving Web has a Drupal training program that’s designed to help developers and site managers quickly build valuable Drupal skills. Our role-based learning tracks include Drupal Site Builder, Front-end Developer, Content Creator, and more.
If you’re stuck on a project and looking for a fun, straightforward way to grow your skillset, take a look at our course catalogue.