diff --git a/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
index 3ea5727..78e72c4 100644
--- a/core/modules/migrate/src/Plugin/MigrationPluginManager.php
+++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
@@ -9,10 +9,14 @@
 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.
@@ -62,6 +66,40 @@ public function __construct(ModuleHandlerInterface $module_handler, CacheBackend
   /**
    * {@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' => [],
+      ];
+      $configuration_classes = [
+        EntityConfigBase::class,
+        Config::class,
+        UserData::class,
+        ComponentEntityDisplayBase::class,
+      ];
+      if ($this->classInArray($destination['class'], $configuration_classes)
+        && !in_array('Content', $definition['migration_tags'])
+        && !in_array('Configuration', $definition['migration_tags'])
+      ) {
+        $definition['migration_tags'][] = 'Configuration';
+      }
+      // Default to content.
+      elseif (!in_array('Content', $definition['migration_tags'])
+        && !in_array('Configuration', $definition['migration_tags'])) {
+        $definition['migration_tags'][] = 'Content';
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   protected function getDiscovery() {
     if (!isset($this->discovery)) {
       $directories = array_map(function($directory) {
@@ -258,4 +296,24 @@ protected function findDefinitions() {
     });
   }
 
+  /**
+   * Determine if a class is in list of class names.
+   *
+   * @param $plugin_class
+   *   Class name of plugin.
+   * @param array $classes
+   *
+   * @return bool
+   *   TRUE if it is a class in the list or else FALSE.
+   */
+  protected function classInArray($plugin_class, array $classes) {
+    foreach ($classes as $class) {
+      if (is_a($plugin_class, $class, TRUE)) {
+        return TRUE;
+      }
+    }
+
+    return FALSE;
+  }
+
 }
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);
+      }
+    }
+  }
+
+}
