diff --git a/metatag.module b/metatag.module
index da1d1bf..79c0c82 100644
--- a/metatag.module
+++ b/metatag.module
@@ -5,12 +5,18 @@
  * Contains metatag.module.
  */
 
+use Drupal\Core\Database\Query\SelectInterface;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
+use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
+use Drupal\migrate\Plugin\migrate\source\SqlBase;
+use Drupal\migrate\Plugin\MigrateSourceInterface;
+use Drupal\migrate\Plugin\MigrationInterface;
+use Drupal\migrate\Row;
 
 /**
  * Implements hook_help().
@@ -308,3 +314,65 @@ function metatag_get_default_tags() {
 
   return $metatags->get('tags');
 }
+
+/**
+ * Implement hook_migrate_prepare_row().
+ *
+ * @param Row $row
+ * @param MigrateSourceInterface $source
+ * @param MigrationInterface $migration
+ * @return bool
+ */
+function metatag_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
+  // @todo Write a more general version rather than hard-coded.
+  $source_can_have_metatags = in_array($source->getPluginId(), [
+    'd7_node',
+    'd7_node_revision',
+    'taxonomy_term',
+    'd7_user'
+  ]);
+  if ($source_can_have_metatags && $migration->getDestinationPlugin() instanceof EntityContentBase) {
+    $entity_type = NULL;
+    $entity_id = NULL;
+    $revision_id = NULL;
+
+    // @todo Write a more general version rather than switch statement.
+    switch ($source->getPluginId()) {
+      case 'd7_node':
+      case 'd7_node_revision':
+        $entity_type = 'node';
+        $entity_id = $row->getSourceProperty('nid');
+        $revision_id = $row->getSourceProperty('vid');
+        break;
+
+      case 'taxonomy_term':
+        $entity_type = 'taxonomy_term';
+        $entity_id = $row->getSourceProperty('tid');
+        break;
+
+      case 'd7_user':
+        $entity_type = 'user';
+        $entity_id = $row->getSourceProperty('uid');
+        break;
+
+    }
+
+    /** @var SqlBase $source */
+    $db = $source->getDatabase();
+    /** @var SelectInterface $query */
+    $query = $db->select('metatag', 'm')
+      ->fields('m', ['data'])
+      ->condition('entity_type', $entity_type)
+      ->condition('entity_id', $entity_id);
+    if (!is_null($revision_id)) {
+      $query->condition('revision_id', $revision_id);
+    }
+    $metatag_value = [];
+    foreach ($query->execute() as $metatag_row) {
+      $metatag_value[]['value'] = $metatag_row->data;
+    }
+    $row->setSourceProperty('field_metatag', $metatag_value);
+  }
+
+  return TRUE;
+}
diff --git a/metatag.services.yml b/metatag.services.yml
index ab98d77..a2a8770 100644
--- a/metatag.services.yml
+++ b/metatag.services.yml
@@ -14,3 +14,8 @@ services:
   metatag.manager:
     class: Drupal\metatag\MetatagManager
     arguments: ['@plugin.manager.metatag.group', '@plugin.manager.metatag.tag', '@metatag.token', '@logger.factory']
+
+  metatag.migration_subscriber:
+    class: Drupal\metatag\EventSubscriber\MigrationSubscriber
+    tags:
+      - { name: event_subscriber }
diff --git a/migration_templates/d7_metatag_field.yml b/migration_templates/d7_metatag_field.yml
new file mode 100644
index 0000000..db2d65a
--- /dev/null
+++ b/migration_templates/d7_metatag_field.yml
@@ -0,0 +1,19 @@
+id: d7_metatag_field
+label: Metatag field
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_metatag_field
+  constants:
+    status: true
+    langcode: und
+    field_name: field_metatag
+    type: metatag
+process:
+  entity_type: entity_type
+  status: 'constants/status'
+  langcode: 'constants/langcode'
+  field_name: 'constants/field_name'
+  type: 'constants/type'
+destination:
+  plugin: entity:field_storage_config
diff --git a/migration_templates/d7_metatag_field_instance.yml b/migration_templates/d7_metatag_field_instance.yml
new file mode 100644
index 0000000..40ffd17
--- /dev/null
+++ b/migration_templates/d7_metatag_field_instance.yml
@@ -0,0 +1,20 @@
+id: d7_metatag_field_instance
+label: Metatag field instance
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_metatag_field_instance
+  constants:
+    field_name: field_metatag
+    label: Metatags
+process:
+  entity_type: entity_type
+  field_name: 'constants/field_name'
+  bundle: bundle
+  label: 'constants/label'
+destination:
+  plugin: entity:field_config
+migration_dependencies:
+  required:
+    - d7_metatag_field
+    - d7_node_type
diff --git a/migration_templates/d7_metatag_field_instance_widget_settings.yml b/migration_templates/d7_metatag_field_instance_widget_settings.yml
new file mode 100644
index 0000000..e8d78b7
--- /dev/null
+++ b/migration_templates/d7_metatag_field_instance_widget_settings.yml
@@ -0,0 +1,20 @@
+id: d7_metatag_field_instance_widget_settings
+label: Metatag field instance widget settings
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_metatag_field_instance
+  constants:
+    form_mode: default
+    field_name: field_metatag
+    entity_type: node
+process:
+  bundle: bundle
+  form_mode: 'constants/form_mode'
+  field_name: 'constants/field_name'
+  entity_type: 'constants/entity_type'
+destination:
+  plugin: component_entity_form_display
+migration_dependencies:
+  required:
+    - d7_metatag_field_instance
diff --git a/src/EventSubscriber/MigrationSubscriber.php b/src/EventSubscriber/MigrationSubscriber.php
new file mode 100644
index 0000000..cb94ff1
--- /dev/null
+++ b/src/EventSubscriber/MigrationSubscriber.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\metatag\EventSubscriber\MigrationSubscriber.
+ */
+
+namespace Drupal\metatag\EventSubscriber;
+
+use Drupal\migrate\Event\MigrateEvents;
+use Drupal\migrate\Event\MigrateImportEvent;
+use Drupal\migrate\Plugin\migrate\destination\EntityContentBase;
+use Drupal\migrate\Plugin\Migration;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Code to run in conjunction with migrations.
+ */
+class MigrationSubscriber implements EventSubscriberInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events[MigrateEvents::PRE_IMPORT] = 'onMigrationPreImport';
+    return $events;
+  }
+
+  /**
+   * Edits migrations prior to import.
+   *
+   * @param \Drupal\migrate\Event\MigrateImportEvent $event
+   *   The event to process.
+   */
+  public function onMigrationPreImport(MigrateImportEvent $event) {
+    /** @var Migration $migration */
+    $migration = $event->getMigration();
+    if ($migration->getDestinationPlugin() instanceof EntityContentBase) {
+      $process = $migration->getProcess();
+      $process['field_metatag'] = 'field_metatag';
+      $migration->setProcess($process);
+
+      $migration_dependencies = $migration->getMigrationDependencies();
+      $migration_dependencies['required'][] = 'd7_metatag_field_instance';
+      $migration->set('migration_dependencies', $migration_dependencies);
+    }
+  }
+
+}
diff --git a/src/Plugin/migrate/source/d7/MetatagField.php b/src/Plugin/migrate/source/d7/MetatagField.php
new file mode 100644
index 0000000..48fb524
--- /dev/null
+++ b/src/Plugin/migrate/source/d7/MetatagField.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\metatag\Plugin\migrate\source\d7\MetatagField.
+ */
+
+namespace Drupal\metatag\Plugin\migrate\source\d7;
+
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 metatag field.
+ *
+ * @MigrateSource(
+ *   id = "d7_metatag_field"
+ * )
+ */
+class MetatagField extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->select('metatag', 'm')
+      ->fields('m', ['entity_type'])
+      ->groupBy('entity_type');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    $fields = array('entity_type' => $this->t('Entity type'));
+    return $fields;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['entity_type']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/src/Plugin/migrate/source/d7/MetatagFieldInstance.php b/src/Plugin/migrate/source/d7/MetatagFieldInstance.php
new file mode 100644
index 0000000..b41305a
--- /dev/null
+++ b/src/Plugin/migrate/source/d7/MetatagFieldInstance.php
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\metatag\Plugin\migrate\source\d7\MetatagFieldInstance.
+ */
+
+namespace Drupal\metatag\Plugin\migrate\source\d7;
+
+use Drupal\Core\Entity\Entity;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 metatag field instances.
+ *
+ * @MigrateSource(
+ *   id = "d7_metatag_field_instance"
+ * )
+ */
+class MetatagFieldInstance extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    return $this->select('metatag', 'm')
+      ->fields('m', ['entity_type'])
+      ->groupBy('entity_type');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'entity_type' => $this->t('Entity type'),
+      'bundle' => $this->t('Bundle'),
+    );
+  }
+
+  /**
+   * Returns each entity_type/bundle pair.
+   */
+  public function initializeIterator() {
+    $bundles = [];
+    foreach (parent::initializeIterator() as $instance) {
+      $bundle_info = \Drupal::getContainer()
+        ->get('entity_type.bundle.info')
+        ->getBundleInfo($instance['entity_type']);
+      foreach (array_keys($bundle_info) as $bundle) {
+        $bundles[] = [
+          'entity_type' => $instance['entity_type'],
+          'bundle' => $bundle
+        ];
+      }
+    }
+    return new \ArrayIterator($bundles);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['entity_type']['type'] = 'string';
+    $ids['bundle']['type'] = 'string';
+    return $ids;
+  }
+
+}
diff --git a/src/Tests/MetatagNodeTranslationTest.php b/src/Tests/MetatagNodeTranslationTest.php
index 8175966..7ef39a4 100644
--- a/src/Tests/MetatagNodeTranslationTest.php
+++ b/src/Tests/MetatagNodeTranslationTest.php
@@ -28,6 +28,7 @@ class MetatagNodeTranslationTest extends WebTestBase {
     'field_ui',
     'metatag',
     'node',
+    'migrate',
   ];
 
   /**
