diff --git a/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
index 3ea5727..6209e7d 100644
--- a/core/modules/migrate/src/Plugin/MigrationPluginManager.php
+++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
@@ -9,16 +9,20 @@
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Plugin\DefaultPluginManager;
 use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator;
-use Drupal\migrate\Plugin\Discovery\ProviderFilterDecorator;
 use Drupal\Core\Plugin\Discovery\YamlDirectoryDiscovery;
 use Drupal\Core\Plugin\Factory\ContainerFactory;
 use Drupal\migrate\MigrateBuildDependencyInterface;
+use Drupal\migrate\Plugin\Discovery\ProviderFilterDecorator;
+use Drupal\migrate\Plugin\migrate\destination\ComponentEntityDisplayBase;
+use Drupal\migrate\Plugin\migrate\destination\Config;
+use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
+use Drupal\user\Plugin\migrate\destination\UserData;
 
 /**
  * Plugin manager for migration plugins.
  */
 class MigrationPluginManager extends DefaultPluginManager implements MigrationPluginManagerInterface, MigrateBuildDependencyInterface {
-
+  
   /**
    * Provides default values for migrations.
    *
@@ -27,21 +31,21 @@ class MigrationPluginManager extends DefaultPluginManager implements MigrationPl
   protected $defaults = array(
     'class' => '\Drupal\migrate\Plugin\Migration',
   );
-
+  
   /**
    * The interface the plugins should implement.
    *
    * @var string
    */
   protected $pluginInterface = 'Drupal\migrate\Plugin\MigrationInterface';
-
+  
   /**
    * The module handler.
    *
    * @var \Drupal\Core\Extension\ModuleHandlerInterface
    */
   protected $moduleHandler;
-
+  
   /**
    * Construct a migration plugin manager.
    *
@@ -58,30 +62,70 @@ public function __construct(ModuleHandlerInterface $module_handler, CacheBackend
     $this->setCacheBackend($cache_backend, 'migration_plugins', array('migration_plugins'));
     $this->moduleHandler = $module_handler;
   }
-
+  
+  /**
+   * {@inheritdoc}
+   */
+  public function processDefinition(&$definition, $plugin_id) {
+    parent::processDefinition($definition, $plugin_id);
+    
+    // Loop over each of the definitions and tag it as config or content.
+    /** @var \Drupal\migrate\Plugin\MigratePluginManagerInterface $migrate_plugin_manager */
+    $migrate_plugin_manager = \Drupal::getContainer()
+      ->get('plugin.manager.migrate.destination');
+    $destination = $migrate_plugin_manager->getDefinition($definition['destination']['plugin'], FALSE);
+    if (!empty($destination['class'])) {
+      $definition += [
+        'migration_tags' => [],
+      ];
+      $is_config_class = function ($class) {
+        return is_a($class, EntityConfigBase::class, TRUE)
+        || is_a($class, Config::class, TRUE)
+        || is_a($class, UserData::class, TRUE)
+        || is_a($class, ComponentEntityDisplayBase::class, TRUE);
+      };
+      $is_already_assigned = function ($existing_tags) {
+        return in_array('Configuration', $existing_tags) || in_array('Content', $existing_tags);
+      };
+      if ($is_config_class($destination['class']) && !$is_already_assigned($definition['migration_tags'])) {
+        $definition['migration_tags'][] = 'Configuration';
+      }
+      // Default to content.
+      elseif (!$is_already_assigned($definition['migration_tags'])) {
+        $definition['migration_tags'][] = 'Content';
+      }
+    }
+  }
+  
   /**
    * {@inheritdoc}
    */
   protected function getDiscovery() {
     if (!isset($this->discovery)) {
-      $directories = array_map(function($directory) {
-        return [$directory . '/migration_templates', $directory . '/migrations'];
+      $directories = array_map(function ($directory) {
+        return [
+          $directory . '/migration_templates',
+          $directory . '/migrations'
+        ];
       }, $this->moduleHandler->getModuleDirectories());
-
+      
       $yaml_discovery = new YamlDirectoryDiscovery($directories, 'migrate');
       // This gets rid of migrations which try to use a non-existent source
       // plugin. The common case for this is if the source plugin has, or
       // specifies, a non-existent provider.
-      $only_with_source_discovery  = new NoSourcePluginDecorator($yaml_discovery);
+      $only_with_source_discovery = new NoSourcePluginDecorator($yaml_discovery);
       // This gets rid of migrations with explicit providers set if one of the
       // providers do not exist before we try to use a potentially non-existing
       // deriver. This is a rare case.
-      $filtered_discovery = new ProviderFilterDecorator($only_with_source_discovery, [$this->moduleHandler, 'moduleExists']);
+      $filtered_discovery = new ProviderFilterDecorator($only_with_source_discovery, [
+        $this->moduleHandler,
+        'moduleExists'
+      ]);
       $this->discovery = new ContainerDerivativeDiscoveryDecorator($filtered_discovery);
     }
     return $this->discovery;
   }
-
+  
   /**
    * {@inheritdoc}
    */
@@ -89,7 +133,7 @@ public function createInstance($plugin_id, array $configuration = array()) {
     $instances = $this->createInstances([$plugin_id], [$plugin_id => $configuration]);
     return reset($instances);
   }
-
+  
   /**
    * {@inheritdoc}
    */
@@ -97,24 +141,27 @@ public function createInstances($migration_id, array $configuration = array()) {
     if (empty($migration_id)) {
       $migration_id = array_keys($this->getDefinitions());
     }
-
+    
     $factory = $this->getFactory();
     $migration_ids = (array) $migration_id;
     $plugin_ids = $this->expandPluginIds($migration_ids);
-
+    
     $instances = [];
     foreach ($plugin_ids as $plugin_id) {
       $instances[$plugin_id] = $factory->createInstance($plugin_id, isset($configuration[$plugin_id]) ? $configuration[$plugin_id] : []);
     }
-
+    
     foreach ($instances as $migration) {
-      $migration->set('migration_dependencies', array_map([$this, 'expandPluginIds'], $migration->getMigrationDependencies()));
+      $migration->set('migration_dependencies', array_map([
+        $this,
+        'expandPluginIds'
+      ], $migration->getMigrationDependencies()));
     }
-
+    
     // Sort the migrations based on their dependencies.
     return $this->buildDependencyMigration($instances, []);
   }
-
+  
   /**
    * Create migrations given a tag.
    *
@@ -125,12 +172,12 @@ public function createInstances($migration_id, array $configuration = array()) {
    *   An array of migration objects with the given tag.
    */
   public function createInstancesByTag($tag) {
-    $migrations = array_filter($this->getDefinitions(), function($migration) use ($tag) {
+    $migrations = array_filter($this->getDefinitions(), function ($migration) use ($tag) {
       return !empty($migration['migration_tags']) && in_array($tag, $migration['migration_tags']);
     });
     return $this->createInstances(array_keys($migrations));
   }
-
+  
   /**
    * Expand derivative migration dependencies.
    *
@@ -154,8 +201,8 @@ protected function expandPluginIds(array $migration_ids) {
     }
     return $plugin_ids;
   }
-
-
+  
+  
   /**
    * {@inheritdoc}
    */
@@ -173,7 +220,7 @@ public function buildDependencyMigration(array $migrations, array $dynamic_ids)
       $requirements[$id] = [];
       $dependency_graph[$id]['edges'] = [];
       $migration_dependencies = $migration->getMigrationDependencies();
-
+      
       if (isset($migration_dependencies['required'])) {
         foreach ($migration_dependencies['required'] as $dependency) {
           if (!isset($dynamic_ids[$dependency])) {
@@ -205,10 +252,10 @@ public function buildDependencyMigration(array $migrations, array $dynamic_ids)
       }
     }
     array_multisort($weights, SORT_DESC, SORT_NUMERIC, $migrations);
-
+    
     return $migrations;
   }
-
+  
   /**
    * Add one or more dependencies to a graph.
    *
@@ -228,7 +275,7 @@ protected function addDependency(array &$graph, $id, $dependency, $dynamic_ids)
     }
     $graph[$id]['edges'] += array_combine($dependencies, $dependencies);
   }
-
+  
   /**
    * {@inheritdoc}
    */
@@ -236,7 +283,7 @@ public function createStubMigration(array $definition) {
     $id = isset($definition['id']) ? $definition['id'] : uniqid();
     return Migration::create(\Drupal::getContainer(), [], $id, $definition);
   }
-
+  
   /**
    * Finds plugin definitions.
    *
@@ -257,5 +304,4 @@ protected function findDefinitions() {
       return $this->providerExists($provider);
     });
   }
-
 }
diff --git a/core/modules/migrate/tests/modules/migrate_tagging_test/migrate_tagging_test.info.yml b/core/modules/migrate/tests/modules/migrate_tagging_test/migrate_tagging_test.info.yml
new file mode 100644
index 0000000..d9d1c8a
--- /dev/null
+++ b/core/modules/migrate/tests/modules/migrate_tagging_test/migrate_tagging_test.info.yml
@@ -0,0 +1,5 @@
+name: 'Migrate tagging test'
+type: module
+package: Testing
+version: VERSION
+core: 8.x
diff --git a/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/configuration_url_alias.yml b/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/configuration_url_alias.yml
new file mode 100644
index 0000000..3fa7be5
--- /dev/null
+++ b/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/configuration_url_alias.yml
@@ -0,0 +1,22 @@
+id: configuration_url_alias
+label: Configuration URL aliases
+migration_tags:
+  - Configuration
+source:
+  plugin: d7_url_alias
+  constants:
+    slash: '/'
+process:
+  source:
+    plugin: concat
+    source:
+      - constants/slash
+      - source
+  alias:
+    plugin: concat
+    source:
+      - constants/slash
+      - alias
+  langcode: language
+destination:
+  plugin: url_alias
diff --git a/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/content_date_formats.yml b/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/content_date_formats.yml
new file mode 100644
index 0000000..d9b253a
--- /dev/null
+++ b/core/modules/migrate/tests/modules/migrate_tagging_test/migration_templates/content_date_formats.yml
@@ -0,0 +1,21 @@
+id: content_date_formats
+label: Configuration date format configuration
+migration_tags:
+  - Content
+source:
+  plugin: variable_multirow
+  variables:
+    - date_format_long
+    - date_format_medium
+    - date_format_short
+process:
+  id:
+    plugin: static_map
+    source: name
+    map:
+      date_format_long: long
+      date_format_short: short
+      date_format_medium: medium
+  pattern: value
+destination:
+  plugin: entity:date_format
diff --git a/core/modules/migrate/tests/src/Kernel/Plugin/DestinationCategoryTest.php b/core/modules/migrate/tests/src/Kernel/Plugin/DestinationCategoryTest.php
new file mode 100644
index 0000000..4d9378d
--- /dev/null
+++ b/core/modules/migrate/tests/src/Kernel/Plugin/DestinationCategoryTest.php
@@ -0,0 +1,232 @@
+<?php
+
+namespace Drupal\Tests\migrate\Kernel\Plugin;
+
+use Drupal\migrate\Plugin\MigrationPluginManager;
+use Drupal\Tests\migrate_drupal\Kernel\MigrateDrupalTestBase;
+
+/**
+ * Tests the migration plugin.
+ *
+ * @group migrate
+ */
+class DestinationCategoryTest extends MigrateDrupalTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'action',
+    'aggregator',
+    'ban',
+    'block_content',
+    'block',
+    'book',
+    'comment',
+    'config_translation',
+    'contact',
+    'dblog',
+    'field',
+    'file',
+    'filter',
+    'forum',
+    'image',
+    'language',
+    'locale',
+    'menu_link_content',
+    'menu_ui',
+    'migrate_drupal',
+    'migrate_tagging_test',
+    'migrate',
+    'node',
+    'options',
+    'path',
+    'search',
+    'shortcut',
+    'statistics',
+    'syslog',
+    'system',
+    'taxonomy',
+    'text',
+    'tracker',
+    'user',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installConfig($this->modules);
+  }
+
+  /**
+   * Tests tagging migrations as configuration or content.
+   */
+  public function testTaggedConfigurationContentAlter() {
+    /** @var MigrationPluginManager $migrationManager */
+    $migrationManager = \Drupal::service('plugin.manager.migration');
+    $tags = ['Configuration', 'Content'];
+    $migrations['Configuration'] = [
+      'configuration_url_alias',
+      'action_settings',
+      'block_content_body_field',
+      'block_content_type',
+      'contact_category',
+      'd6_action',
+      'd6_aggregator_settings',
+      'd6_block',
+      'd6_book_settings',
+      'd6_comment_entity_display',
+      'd6_comment_entity_form_display',
+      'd6_comment_entity_form_display_subject',
+      'd6_comment_field',
+      'd6_comment_field_instance',
+      'd6_comment_type',
+      'd6_contact_settings',
+      'd6_date_formats',
+      'd6_dblog_settings',
+      'd6_field',
+      'd6_field_formatter_settings',
+      'd6_field_instance',
+      'd6_field_instance_widget_settings',
+      'd6_filter_format',
+      'd6_forum_settings',
+      'd6_i18n_system_maintenance',
+      'd6_i18n_system_site',
+      'd6_i18n_user_mail',
+      'd6_i18n_user_settings',
+      'd6_imagecache_presets',
+      'd6_language_content_settings',
+      'd6_menu',
+      'd6_node_setting_promote',
+      'd6_node_setting_status',
+      'd6_node_setting_sticky',
+      'd6_node_settings',
+      'd6_node_type',
+      'd6_search_settings',
+      'd6_syslog_settings',
+      'd6_system_cron',
+      'd6_system_date',
+      'd6_system_file',
+      'd6_system_performance',
+      'd6_taxonomy_vocabulary',
+      'd6_upload_entity_display',
+      'd6_upload_entity_form_display',
+      'd6_upload_field',
+      'd6_upload_field_instance',
+      'd6_user_contact_settings',
+      'd6_user_mail',
+      'd6_user_role',
+      'd6_user_settings',
+      'd6_view_modes',
+      'd6_vocabulary_entity_display',
+      'd6_vocabulary_entity_form_display',
+      'd6_vocabulary_field',
+      'd6_vocabulary_field_instance',
+      'd7_action',
+      'd7_aggregator_settings',
+      'd7_block',
+      'd7_comment_entity_display',
+      'd7_comment_entity_form_display',
+      'd7_comment_entity_form_display_subject',
+      'd7_comment_field',
+      'd7_comment_field_instance',
+      'd7_comment_type',
+      'd7_contact_settings',
+      'd7_dblog_settings',
+      'd7_field',
+      'd7_field_formatter_settings',
+      'd7_field_instance',
+      'd7_field_instance_widget_settings',
+      'd7_filter_format',
+      'd7_forum_settings',
+      'd7_image_settings',
+      'd7_image_styles',
+      'd7_language_content_settings',
+      'd7_language_negotiation_settings',
+      'd7_menu',
+      'd7_node_settings',
+      'd7_node_title_label',
+      'd7_node_type',
+      'd7_search_settings',
+      'd7_shortcut_set',
+      'd7_syslog_settings',
+      'd7_system_authorize',
+      'd7_system_cron',
+      'd7_system_date',
+      'd7_system_file',
+      'd7_system_mail',
+      'd7_system_performance',
+      'd7_taxonomy_vocabulary',
+      'd7_tracker_settings',
+      'd7_user_flood',
+      'd7_user_mail',
+      'd7_user_role',
+      'd7_view_modes',
+      'default_language',
+      'file_settings',
+      'language',
+      'locale_settings',
+      'menu_settings',
+      'search_page',
+      'statistics_settings',
+      'system_image',
+      'system_image_gd',
+      'system_logging',
+      'system_maintenance',
+      'system_rss',
+      'system_site',
+      'taxonomy_settings',
+      'text_settings',
+      'user_picture_entity_display',
+      'user_picture_entity_form_display',
+      'user_picture_field',
+      'user_picture_field_instance',
+      'user_profile_entity_display',
+      'user_profile_entity_form_display',
+      'user_profile_field',
+      'user_profile_field_instance',
+    ];
+    $migrations['Content'] = [
+      'content_date_formats',
+      'd6_aggregator_feed',
+      'd6_aggregator_item',
+      'd6_book',
+      'd6_comment',
+      'd6_custom_block',
+      'd6_file',
+      'd6_menu_links',
+      'd6_profile_values',
+      'd6_taxonomy_term',
+      'd6_upload',
+      'd6_url_alias',
+      'd6_user',
+      'd6_user_picture_file',
+      'd7_aggregator_feed',
+      'd7_aggregator_item',
+      'd7_blocked_ips',
+      'd7_comment',
+      'd7_custom_block',
+      'd7_file',
+      'd7_menu_links',
+      'd7_shortcut',
+      'd7_shortcut_set_users',
+      'd7_taxonomy_term',
+      'd7_tracker_node',
+      'd7_tracker_user',
+      'd7_url_alias',
+      'd7_user',
+    ];
+
+    foreach ($tags as $tag) {
+      $instances = array_filter($migrationManager->getDefinitions(), function ($migration) use ($tag) {
+        return !empty($migration['migration_tags']) && in_array($tag, $migration['migration_tags']);
+      });
+      foreach ($migrations[$tag] as $migration) {
+        $this->assertArrayHasKey($migration, $instances);
+      }
+    }
+  }
+
+}
