Drupal 7 to Drupal 8 Migration - 101 and Observations

So, Drupal 8 has been out. And Migrate framework is now part of core! I haven’t had a chance to try out a D7->D8 migration so far. Knowing that this would be something I might do probably a hundred times in the coming couple of years, I thought of giving it a try.

I will now attempt to migrate this current Drupal 7 website (www.tanay.co.in) to Drupal 8. I shall be taking the MigrateUpgrade-UI path (than the drush path) as described on https://www.drupal.org/node/2257723 . I don’t expect a full-replica of my current site on D8 at the end of this attempt, but we shall take a look at what worked, what didn’t work.

I used 8.0.2 version of Drupal core, and 8.x-1.x-dev release of Migrate Upgrade module.

These observations might probably NOT reflect the current state of the Migrate Upgrade module. It is highly likely that the module performs better than what is observed below - ie, Some issues noticed in this attempt might have already been fixed in the Migrate Upgrade Module.  Chances are also high that I missed some steps or screwed up something.

  1. Download and enable the migrate_upgrade module

  2. Navigate to the /upgrade path on your website

  3. Populate the Source SQL details and the site url to fetch files from

  4. This will show you a list of available and missing upgrade paths.

  5. Hit the “Perform Upgrade” button. Fingers Crossed!

  6. Still running after 5 mins.. Drupal seems to be doing some serious loads of stuff here..

  7. While I was waiting, I thought of checking out the sites/default/files folder on my Drupal 8 site. As I assumed nodes are now being migrated, probably the assets are being fetched. In which case, the sites/default/files should be filling up. Yep, it indeed is being populated..

  8. Let’s check out what is up with the Drupal 8 Database. Yay! It is being populated as well!

    Well, interesting to see that the node table on D8 doesn’t have the title column. I wonder where the titles sit now in D8. There doesn’t seem to be any node_title, node_field_title tables.. Well there seems to be a new table here though. It is node_field_data which seems to hold the titles of the nodes!

    Hello there node_field_data table! Good to see you. I am sure we are going to bump into each other many times in the coming days!

  9. Cool. Let’s switch back to the browser tab where the upgrade was running and see how things are going.

    Wow,. here we go! The upgrade is now complete.

First Look at the website:

The migration has definitely surprised me. I was expecting a lot of broken stuff. But it already looks good. The site seems to have all the content that I care about. I was surprises to see that some of the blocks of static markup, disqus comments that I had at various positions on the D7 site were migrated as-is into almost similar positions on the D8 site. I never expected that to be the case! I was expecting just the nodes and terms being moved around. THIS IS AMAZING so far...


Blocks were auto-migrated!

URL Aliases also seem to have come through fine!

Let’s edit a node and see how it looks…

Term References look good!

Although I am not sure if this was the case with only the default “tags” vocabulary. Probably even custom term reference fields added to custom types also get migrated just fine. Unfortunately, I don’t have such custom term reference field on my site to verify this.

All the content types look good!

This is amazing that all the content  types were just re-created by D8 using their structures from D7, at the click of a button!

Let’s open a content type, both in D7 and D8 and see how they compare. I am taking the most used content type on my site - The Article content type that I have got, which I use to post blog posts like this one.



Discounting Meta Tags field (that came from a contrib module), all fields look good.


The Image Field Attachments are broken :-(

The content type “article” had an image field and a file field. The file field rarely had any files attached but the image field had an image for every blog post. So, what happened to these image attachments:

The Image field was created on the D8 content type automatically by Drupal

The files were fetched and copied from the source site into the D8 sites/default/files folder

An entry was created for each file in the D8 site files table and these files can be managed from “admin/content/files” on the D8 site.

But the images were NOT attached by the migration to the relevant nodes

Let’s see how good things are. Before we check out how things are on the new D8 site with the old content from D7, here are a few things I am interested in:

  1. The content (nodes) obviously

  2. The term references (I don’t have any node references. So I am not bothered about it right now)

  3. Meta Tags (from the D7 Metatags module). This has 2 items of importance

    1. Checking if these tags themselves are migrated. AFAIR, I haven’t used the metatags module to store any per-node keywords on the module’s storage but the meta-tags are made to appear on the node pages using terms from a term reference field attached. So, irrespective of the migration path of metatags module the terms themselves would probably have been migrated into the D8 site if term reference migration worked on #b above

    2. The display of the metatags in the markup - I am not much bothered about them at this point of time. I don’t expect the upgrade to have ported the contrib metatag module configuration as well. Should be good as long as I have the tags available somewhere on the D8 site. I will probably configure the module afresh on the D8 site using tokens similar to those used on the D7 site

      Considering the use of taxonomy for metatags, I could probably discount metatags in defining if the migration was any useful.


  4. Images (Each blog post has an image attached to it on an image field). Also, each blog post has a large number of images embedded in the markup (Usually pasted into the WYSIWIG and retrieved automatically by Drupal 7 using https://www.drupal.org/project/get_image module)

  5. URL Aliases / Clean Urls

As such these would be the items I would care about in the migration and see how Drupal 8 at its current state, using the migrate_upgrade path of migration has fared on these items - Content, Term References, Images, Url Aliases


Was well-migrated. Content types were auto-created on D8 by migration. All nodes were migrated without skipping any. Most of the field and content type display configuration was replicated on the D8 site.


Looks good. There was only one vocabulary. It was replicated on D8 and all terms were auto-migrated.


The Image field was created on the D8 content type automatically by Drupal

The files were fetched and copied from the source site into the D8 sites/default/files folder

An entry was created for each file in the D8 site files table and these files can be managed from “admin/content/files” on the D8 site.

But the images were NOT attached by the migration to the relevant nodes

Clean Urls / Aliases


NOTE: I am not referring to the pathauto settings. But the existing (generated) aliases for existing nodes were migrated.

Site Configuration

This was the item where I was surprised the most. Blocks, Block Configuration, Content type Configuration (Comments etc), Site-wide configuration (Image Styles) were migrated from the source D7 site to D8 without any effect.

Overall, the migration has surprised me. The only significant issue that stood out for me was that the images were not attached to the nodes. There were a couple of smaller issues that I could stumble upon - Like, some of the migrated image styles had the labels missing. I am pretty sure the issue with the image field attachments is logged somewhere on the Issue queue of core or migrate_upgrade module, wherever it fits best. I haven’t verified that. I will probably check that out later.

Thumbnail Image used on Listing - D7 to D8 - is courtesy of Drupalize.me