diff --git a/core/modules/migrate/src/Plugin/MigrationPluginManager.php b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
index 3ea5727..f269a64 100644
--- a/core/modules/migrate/src/Plugin/MigrationPluginManager.php
+++ b/core/modules/migrate/src/Plugin/MigrationPluginManager.php
@@ -9,10 +9,13 @@
 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;
 
 /**
  * Plugin manager for migration plugins.
@@ -62,6 +65,35 @@ 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' => [],
+      ];
+      $tags = ['Configuration', 'Content'];
+      if ((is_a($destination['class'], EntityConfigBase::class, TRUE)
+          || is_a($destination['class'], Config::class, TRUE)
+          || is_a($destination['class'], ComponentEntityDisplayBase::class, TRUE))
+        && !in_array($tags, $definition['migration_tags'])
+      ) {
+        $definition['migration_tags'][] = 'Configuration';
+      }
+      // Default to content.
+      elseif (!in_array($tags, $definition['migration_tags'])) {
+        $definition['migration_tags'][] = 'Content';
+      }
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   protected function getDiscovery() {
     if (!isset($this->discovery)) {
       $directories = array_map(function($directory) {
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..02ef75b
--- /dev/null
+++ b/core/modules/migrate/tests/src/Kernel/Plugin/DestinationCategoryTest.php
@@ -0,0 +1,131 @@
+<?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 = ['migrate', 'migrate_drupal', 'user', 'system', 'node', 'taxonomy', 'block', 'block_content', 'field', 'options', 'file', 'path', 'migrate_tagging_test'];
+
+  /**
+   * {@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',
+      'block_content_body_field',
+      'block_content_type',
+      'd6_block',
+      'd6_date_formats',
+      'd6_field',
+      'd6_field_formatter_settings',
+      'd6_field_instance',
+      'd6_field_instance_widget_settings',
+      'd6_node_setting_promote',
+      'd6_node_setting_status',
+      'd6_node_setting_sticky',
+      'd6_node_settings',
+      'd6_node_type',
+      '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_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_block',
+      'd7_field',
+      'd7_field_formatter_settings',
+      'd7_field_instance',
+      'd7_field_instance_widget_settings',
+      'd7_node_settings',
+      'd7_node_title_label',
+      'd7_node_type',
+      'd7_system_authorize',
+      'd7_system_cron',
+      'd7_system_date',
+      'd7_system_file',
+      'd7_system_mail',
+      'd7_system_performance',
+      'd7_taxonomy_vocabulary',
+      'd7_user_flood',
+      'd7_user_mail',
+      'd7_user_role',
+      'd7_view_modes',
+      'file_settings',
+      'menu',
+      'system_image',
+      'system_image_gd',
+      'system_logging',
+      'system_maintenance',
+      'system_rss',
+      'system_site',
+      'taxonomy_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_custom_block',
+      'd6_file',
+      'd6_profile_values',
+      'd6_upload',
+      'd6_user',
+      'd6_url_alias',
+      'd6_user_contact_settings',
+      'd6_user_picture_file',
+      'd7_custom_block',
+      'd7_file',
+      'd7_taxonomy_term',
+      'd7_user',
+      'd7_url_alias',
+    ];
+
+    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);
+      }
+    }
+  }
+
+}
