Drupal to WordPress Content Migration
The content migration phase is one of the most complex parts of moving a Drupal site to WordPress. This stage involves transferring your site’s content assets—blog posts, pages, media assets, metadata, and more—to WordPress.
Let’s see how you can approach this Drupal to WordPress content migration.
1. Understanding Drupal’s content architecture
Before migrating content, it is essential to understand how content is modeled in Drupal. Drupal’s flexible content architecture relies heavily on content types, fields, taxonomies, and relationships.
- Content Types: These are the primary structures used to organize content in Drupal. Each content type defines a set of fields (e.g., text, images, file uploads). For example, a “Blog Post” content type may include fields like “Title,” “Body,” “Author,” and “Image.”
- Taxonomies: Drupal taxonomies are used for categorizing content. This can be hierarchical (e.g., a “Product Category” taxonomy) or flat (e.g., tags). Taxonomies help structure content relationships, which are key to organizing and filtering content.
- Fields: Fields in Drupal define specific data types (e.g., text, number, image, file). These fields are highly customizable and can include custom fields like image galleries, file attachments, and related content references.
- Content relationships: Often, Drupal sites use Entity Reference fields to establish relationships between content types (e.g., linking a “Product” content type to “Review” content). These relationships need to be carefully mapped to WordPress during the migration.
- Views: The Views module allows Drupal users to define custom lists of content based on specific criteria. Migrating these custom views requires setting up corresponding filters and queries in WordPress.
- Media: In Drupal, media handling is typically managed using the File Entity module (or the Media module in newer versions) and the file system. In Drupal, media assets such as images, documents, and videos are stored in the file system, usually within the sites/default/files directory. Drupal uses file fields or media fields in content types to reference media assets.
- SEO meta content: In Drupal, SEO is typically managed using modules such as Metatag. This module allows users to define meta tags (e.g., title, description, keywords) for pages, content types, and taxonomies, helping with SEO optimization across the site.
2. Mapping Drupal’s Content to WordPress’s ecosystem
Once you have a comprehensive understanding of your Drupal site’s content structure, the next step is to map this structure to WordPress’s equivalent components. WordPress uses Post Types, Taxonomies, and Custom Fields to organize content.
- Content Types to Post Types: In WordPress, Posts and Pages are the default content types. However, for custom content types, WordPress allows you to create Custom Post Types. For instance, a Case Study content type in Drupal can be mapped to a Custom Post Type in WordPress. You’ll have to set these up in your WordPress before you can initiate the content migration.
- Taxonomies to Categories and Tags: Drupal’s taxonomies can map directly to Categories and Tags in WordPress. If a Drupal site uses custom taxonomies (e.g., Product Category), these can be replicated as Custom Taxonomies in WordPress.
- Fields to Custom Fields/ACF: Drupal’s flexible field system allows for custom data types (e.g., images, file fields, text fields). WordPress has built-in Custom Fields, but for more advanced field types, the Advanced Custom Fields (ACF) plugin is commonly used. A Price Field in Drupal, for example, could map to a Custom Field or an ACF field in WordPress.
- In WordPress, content relationships are typically mapped using Custom Post Types (CPTs) and Custom Taxonomies, combined with Advanced Custom Fields (ACF) or similar plugins for more complex relationships.
- In WordPress, Views in Drupal (which typically generate custom queries to display filtered, sorted, and paged content) would map to Custom Queries or WP_Query in WordPress. WP_Query is the primary tool in WordPress for creating custom queries to display specific content. You can use WP_Query to replicate the functionality of Drupal Views by filtering, sorting, and paginating content. It allows you to fetch specific posts, pages, or custom post types based on custom parameters (like category, tags, meta fields, etc.).
- Media handling: In WordPress, media handling is managed through the Media Library, which is part of the core system. Media assets like images, documents, and videos are uploaded and stored in the /wp-content/uploads/ directory, organized by year and month. WordPress uses the Attachment post type to manage media, where each media file is treated as an individual post. These files can be referenced directly in posts, pages, or custom post types using the Add Media button or through custom fields. Unlike Drupal’s file fields, WordPress allows users to easily insert media into content through the block editor (Gutenberg) or the classic editor.
- SEO metadata: In WordPress, SEO metadata is commonly handled by plugins such as Yoast SEO or Rank Math, which provide tools for preserving metadata like meta titles, descriptions, and focus keywords.
Here’s a quick table summarizing how the Drupal content/data features map to WordPress:
Drupal Component | Equivalent in WordPress | Notes |
Content Types | Post Types (Posts, Pages, Custom Post Types – CPTs) | Drupal’s Content Types map to WordPress Post Types. Custom content types (e.g., Case Studies) must be registered as Custom Post Types (CPTs) in WordPress. |
Taxonomies | Categories, Tags, Custom Taxonomies | Drupal’s Taxonomies can map to Categories and Tags. Custom Taxonomies (e.g., Product Category) must be registered separately in WordPress. |
Fields | Custom Fields / ACF (Advanced Custom Fields) | Drupal’s flexible field system maps to WordPress Custom Fields. For complex field types, ACF or similar plugins are required. |
Nodes | Posts / Pages / Custom Post Types | In Drupal, all content is a Node, while in WordPress, Nodes map to Posts, Pages, or CPTs depending on their purpose. |
Blocks | Widgets / Gutenberg Blocks / Full Site Editing (FSE) Blocks | Drupal Blocks are comparable to Widgets in classic themes and Gutenberg Blocks (or Full Site Editing Blocks) in modern WordPress. |
Views | WP_Query / Custom Queries / Page Builders | Drupal Views create custom content lists. In WordPress, WP_Query and Custom Queries achieve similar results. Some use page builders (like Elementor) to recreate Views’ flexibility. |
Menus | Navigation Menus | Both platforms support hierarchical Navigation Menus, but WordPress provides a more user-friendly UI for menu management. |
User Roles & Permissions | WordPress User Roles & Capabilities | Drupal’s granular role-based access maps to WordPress User Roles & Capabilities. Additional roles and permissions require custom code or plugins. |
Media Handling | Media Library (Attachments, Media post type) | WordPress manages media via the Media Library, storing files in /wp-content/uploads/. In Drupal, File Fields need to be mapped to Attachment post types or referenced through Custom Fields. |
3. Exporting your Drupal content
Drupal to WordPress content migration starts with exporting content from Drupal, which can be done manually or in an automated way, depending on the site’s complexity.
- Database export: For small to medium-sized sites, exporting content via an SQL dump can be effective. Export tables such as node, taxonomy_term_data, and field_data_*, and convert the data into a suitable format like CSV, XML, or JSON for later processing.
- Drupal’s built-in export tools: The Migrate module can export content in XML, CSV, or JSON formats. These modules allow you to export content types and fields while retaining their relationships.
- Custom exports: For more complex scenarios, you may need to write custom scripts to export data in the appropriate format for migration.
You may also use third-party export tools like Drupal Backup and Migrate that can automate the process of exporting content, creating backups, and ensuring that large volumes of content are prepared for migration.
4. Transforming the content for importing into WordPress
Once content is exported from Drupal, it must be transformed into a format suitable for WordPress import. This stage involves:
- Data format conversion: Depending on the export format (CSV, XML, or JSON), you may need to convert the data into a format that WordPress can accept. For example, if you have a CSV export, you might need to reformat the data to match the WP All Import plugin’s requirements (if you’re using this particular plugin for the import).
- Field mapping: Custom fields in Drupal need to be mapped to Custom Fields or ACF fields in WordPress. For example, a Date field in Drupal should be mapped to a corresponding field in WordPress that uses the correct date format.
- Handling relationships: For content relationships (e.g., related posts or product reviews), custom taxonomies and entity references in Drupal need to be transferred as relationships or custom taxonomy terms in WordPress.
- URL and slug conversion: If the URL structure changes between Drupal and WordPress, slugs must be converted to match the new structure while preserving SEO.
5. Importing content into WordPress
Once content has been exported and transformed, it’s time to import it into WordPress. There are multiple ways to do this:
1. Using the WordPress importer tool: WordPress includes a built-in WordPress Importer tool, which is capable of importing content from XML files. This option is suitable for simpler migrations, especially when the content structure is straightforward, such as basic posts and pages. The WordPress Importer is limited when dealing with complex custom post types, fields, and large datasets.
How to use:
- Export your content from Drupal into an XML file.
- Go to your WordPress admin panel, navigate to Tools > Import, and select the WordPress Importer.
- Upload your XML file and follow the instructions to map content to appropriate WordPress post types and taxonomies.
This method is best for small-scale migrations or straightforward content structures.
2. Using custom migration scripts: For highly customized or complex migrations, creating custom PHP scripts or using WP CLI (WordPress Command Line Interface) might be necessary. These scripts allow you to automate the migration of content from Drupal to WordPress by directly interacting with WordPress’s database and APIs.
How to use:
- Write PHP scripts to extract and process data from your exported file or directly from the Drupal database.
- Use the wp_insert_post() function to import posts, or utilize WP CLI commands for bulk data insertion.
- Handle relationships between content, such as linking custom taxonomies and meta fields, by including custom logic in your scripts.
Custom scripts are the most flexible method but also the most technically challenging. They are best suited for developers with experience in both Drupal and WordPress systems.
3. Using a plugin like FG Drupal to WordPress: The FG Drupal to WordPress plugin is a specialized migration plugin that helps streamline the process of moving content from a Drupal site to WordPress site.
Key features of FG Drupal to WordPress plugin:
- Content import: The plugin supports importing content types from Drupal, such as Articles, Blog Posts, or any custom content types used in Drupal. However, you’ll still need to map custom Drupal fields to WordPress custom fields and post types, which may require additional customization. Also, while the plugin has basic support for ACF fields, custom configuration may be needed to ensure proper mapping to WordPress’s ACF plugin if your Drupal site uses advanced custom fields.
- Media import: It’s capable of importing images, videos, and documents from Drupal’s media library to WordPress. The plugin ensures media is placed in the WordPress media library correctly, and it handles internal image and media links to ensure that they’re redirected properly in the new system.
- Taxonomy mapping: The plugin allows for taxonomies in Drupal to be mapped to WordPress categories and tags. This ensures that content organization, like blog post categories and tags, is preserved. For custom taxonomies, you can map them to WordPress custom taxonomies to ensure continuity of the categorization structure.
- Preserving SEO: SEO metadata from Drupal (like meta titles, meta descriptions, URL structure) can be migrated using the plugin, but you may need additional configuration or third-party plugins (like Yoast SEO or Rank Math) to fine-tune SEO elements once in WordPress.
- Post-import redirection: The plugin can help set up redirections for URLs from the old Drupal site to the new WordPress site. This is critical to ensure that SEO equity is maintained and users are redirected properly, avoiding broken links.
Step 6: Setting up redirects (The final step)
Once your content is successfully migrated from Drupal to WordPress, setting up redirects is the final crucial step. Redirects ensure that both users and search engines are sent to the correct pages on your new WordPress site. Without proper redirects, visitors will encounter 404 errors, and search engines will struggle to index your new site correctly. Here are a few ways to set up redirects.
- Via .htaccess: One of the most common methods for setting up redirects is through the .htaccess file on your server (if you’re using Apache). This method allows for 301 permanent redirects, which pass along SEO authority from the old URL to the new one. For this, you need to add each URL redirection rule in the .htaccess file, ensuring the old URL is correctly mapped to its new WordPress equivalent.
- Redirection plugin (WordPress): If you’re looking for a user-friendly, less code-intensive method, the Redirection plugin is an excellent choice. This plugin allows you to manage redirects from the WordPress admin dashboard without needing to manually edit the .htaccess file. It also keeps track of 404 errors, helping you ensure all pages are correctly redirected and none are missed.
- SEO plugins: If you’re using SEO plugins like Yoast SEO or Rank Math, these often come with built-in tools for setting up redirects. For example, Yoast SEO Premium allows you to easily create and manage redirects directly within the plugin interface. After setting up your redirects, these plugins can also help monitor how well the redirects are working and whether any pages need further adjustments.
- Server-side redirects (Nginx servers): If your site is hosted on a server running Nginx, you’ll need to configure redirects via the server configuration files. The process is similar to .htaccess redirects but requires editing the Nginx config files.
- Using a migration plugin (FG Drupal to WordPress): Some migration plugins, like FG Drupal to WordPress, offer an integrated redirect feature. This plugin can automatically create redirects based on your old Drupal URLs and their corresponding new WordPress URLs, simplifying the migration process.
Wrapping it up…
This wraps up the drupal to wordpress data migration phase, the next step will be testing and validation—which we’ll dive deeper into later. This will ensure that all migrated content is properly integrated, functional, and performing optimally in its new WordPress environment.