 core/lib/Drupal/Core/Menu/MenuActiveTrail.php            |  2 +-
 core/lib/Drupal/Core/Menu/MenuLinkTree.php               |  2 +-
 core/lib/Drupal/Core/Menu/MenuTreeStorage.php            |  8 ++++----
 .../Tests/MenuLinkContentCacheabilityBubblingTest.php    |  2 +-
 core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php     |  2 +-
 .../src/Tests/PageCacheTagsIntegrationTest.php           | 16 ++++++++--------
 core/modules/system/src/Entity/Menu.php                  | 11 +++++++++++
 core/modules/system/src/Plugin/Block/SystemMenuBlock.php |  2 +-
 core/modules/toolbar/toolbar.module                      |  2 +-
 core/tests/Drupal/Tests/Core/Cache/CacheTest.php         |  2 +-
 10 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/core/lib/Drupal/Core/Menu/MenuActiveTrail.php b/core/lib/Drupal/Core/Menu/MenuActiveTrail.php
index 2acb972..41cbdf1 100644
--- a/core/lib/Drupal/Core/Menu/MenuActiveTrail.php
+++ b/core/lib/Drupal/Core/Menu/MenuActiveTrail.php
@@ -74,7 +74,7 @@ protected function getCid() {
    */
   protected function resolveCacheMiss($menu_name) {
     $this->storage[$menu_name] = $this->doGetActiveTrailIds($menu_name);
-    $this->tags[] = 'config:system.menu.' . $menu_name;
+    $this->tags[] = 'menu:' . $menu_name;
     $this->persist($menu_name);
 
     return $this->storage[$menu_name];
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTree.php b/core/lib/Drupal/Core/Menu/MenuLinkTree.php
index 44eed04..650651d 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkTree.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkTree.php
@@ -206,7 +206,7 @@ public function build(array $tree, $level = 0) {
       $build['#theme'] = 'menu__' . strtr($menu_name, '-', '_');
       $build['#items'] = $items;
       // Set cache tag.
-      $build['#cache']['tags'][] = 'config:system.menu.' . $menu_name;
+      $build['#cache']['tags'][] = 'menu:' . $menu_name;
       return $build;
     }
     else {
diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
index 659d6be..6392fde 100644
--- a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
+++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
@@ -191,7 +191,7 @@ public function rebuild(array $definitions) {
     $this->resetDefinitions();
     $affected_menus = $this->getMenuNames() + $before_menus;
     // Invalidate any cache tagged with any menu name.
-    $cache_tags = Cache::buildTags('config:system.menu', $affected_menus, '.');
+    $cache_tags = Cache::buildTags('menu', $affected_menus, ':');
     $this->cacheTagsInvalidator->invalidateTags($cache_tags);
     $this->resetDefinitions();
     // Every item in the cache bin should have one of the menu cache tags but it
@@ -252,7 +252,7 @@ protected function safeExecuteSelect(SelectInterface $query) {
   public function save(array $link) {
     $affected_menus = $this->doSave($link);
     $this->resetDefinitions();
-    $cache_tags = Cache::buildTags('config:system.menu', $affected_menus, '.');
+    $cache_tags = Cache::buildTags('menu', $affected_menus, ':');
     $this->cacheTagsInvalidator->invalidateTags($cache_tags);
     return $affected_menus;
   }
@@ -405,7 +405,7 @@ public function delete($id) {
       $this->updateParentalStatus($item);
       // Many children may have moved.
       $this->resetDefinitions();
-      $this->cacheTagsInvalidator->invalidateTags(['config:system.menu.' . $item['menu_name']]);
+      $this->cacheTagsInvalidator->invalidateTags(['menu:' . $item['menu_name']]);
     }
   }
 
@@ -834,7 +834,7 @@ public function loadTreeData($menu_name, MenuTreeParameters $parameters) {
       $data['tree'] = $this->doBuildTreeData($links, $parameters->activeTrail, $parameters->minDepth);
       $data['definitions'] = array();
       $data['route_names'] = $this->collectRoutesAndDefinitions($data['tree'], $data['definitions']);
-      $this->menuCacheBackend->set($tree_cid, $data, Cache::PERMANENT, ['config:system.menu.' . $menu_name]);
+      $this->menuCacheBackend->set($tree_cid, $data, Cache::PERMANENT, ['menu:' . $menu_name]);
       // The definitions were already added to $this->definitions in
       // $this->doBuildTreeData()
       unset($data['definitions']);
diff --git a/core/modules/menu_link_content/src/Tests/MenuLinkContentCacheabilityBubblingTest.php b/core/modules/menu_link_content/src/Tests/MenuLinkContentCacheabilityBubblingTest.php
index 7980c77..f18e694 100644
--- a/core/modules/menu_link_content/src/Tests/MenuLinkContentCacheabilityBubblingTest.php
+++ b/core/modules/menu_link_content/src/Tests/MenuLinkContentCacheabilityBubblingTest.php
@@ -68,7 +68,7 @@ public function testOutboundPathAndRouteProcessing() {
 
     $default_menu_cacheability = (new CacheableMetadata())
       ->setCacheMaxAge(Cache::PERMANENT)
-      ->setCacheTags(['config:system.menu.tools'])
+      ->setCacheTags(['menu:tools'])
       ->setCacheContexts(['languages:' . LanguageInterface::TYPE_INTERFACE, 'theme']);
 
     User::create(['uid' => 1, 'name' => $this->randomString()])->save();
diff --git a/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php b/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php
index 45a9df7..6416c12 100644
--- a/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuCacheTagsTest.php
@@ -53,7 +53,7 @@ public function testMenuBlock() {
       'block_view',
       'config:block_list',
       'config:block.block.' . $block->id(),
-      'config:system.menu.llama',
+      'menu:llama',
     );
     $this->verifyPageCache($url, 'HIT', $expected_tags);
 
diff --git a/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
index c6af0ac..37ab054 100644
--- a/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
+++ b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
@@ -99,10 +99,10 @@ function testPageCacheTags() {
       'node:' . $node_1->id(),
       'user:' . $author_1->id(),
       'config:filter.format.basic_html',
-      'config:system.menu.account',
-      'config:system.menu.tools',
-      'config:system.menu.footer',
-      'config:system.menu.main',
+      'menu:account',
+      'menu:tools',
+      'menu:footer',
+      'menu:main',
       'config:system.site',
       // FinishResponseSubscriber adds this cache tag to responses that have the
       // 'user.permissions' cache context for anonymous users.
@@ -131,10 +131,10 @@ function testPageCacheTags() {
       'node:' . $node_2->id(),
       'user:' . $author_2->id(),
       'config:filter.format.full_html',
-      'config:system.menu.account',
-      'config:system.menu.tools',
-      'config:system.menu.footer',
-      'config:system.menu.main',
+      'menu:account',
+      'menu:tools',
+      'menu:footer',
+      'menu:main',
       'config:system.site',
       'comment_list',
       'node_list',
diff --git a/core/modules/system/src/Entity/Menu.php b/core/modules/system/src/Entity/Menu.php
index fa738f3..35fac8e 100644
--- a/core/modules/system/src/Entity/Menu.php
+++ b/core/modules/system/src/Entity/Menu.php
@@ -77,4 +77,15 @@ public function isLocked() {
     return (bool) $this->locked;
   }
 
+  /**
+   * {@inheritdoc}
+   *
+   * Override the default cache tags to use the cache tags that are not coupled
+   * to Menu config entities (i.e. this class), to not force other parts of the
+   * menu system to couple themselves to Menu config entities.
+   */
+  public function getCacheTags() {
+    return ['menu:' . $this->id()];
+  }
+
 }
diff --git a/core/modules/system/src/Plugin/Block/SystemMenuBlock.php b/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
index 4a6a2ea..552fb4f 100644
--- a/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
@@ -179,7 +179,7 @@ public function getCacheTags() {
     // menu block must also be re-rendered for that user, because maybe a menu
     // link that is accessible for that user has been added.
     $cache_tags = parent::getCacheTags();
-    $cache_tags[] = 'config:system.menu.' . $this->getDerivativeId();
+    $cache_tags[] = 'menu:' . $this->getDerivativeId();
     return $cache_tags;
   }
 
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index e9808d5..3d34a0d 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -314,7 +314,7 @@ function _toolbar_get_subtrees_hash($langcode) {
     // Clear the cache when the 'locale' tag is deleted. This ensures a fresh
     // subtrees rendering when string translations are made.
     $role_list_cache_tags = \Drupal::entityManager()->getDefinition('user_role')->getListCacheTags();
-    \Drupal::cache('toolbar')->set($cid, $hash, Cache::PERMANENT, Cache::mergeTags(array('user:' . $uid, 'locale', 'config:system.menu.admin'), $role_list_cache_tags));
+    \Drupal::cache('toolbar')->set($cid, $hash, Cache::PERMANENT, Cache::mergeTags(array('user:' . $uid, 'locale', 'menu:admin'), $role_list_cache_tags));
   }
   return $hash;
 }
diff --git a/core/tests/Drupal/Tests/Core/Cache/CacheTest.php b/core/tests/Drupal/Tests/Core/Cache/CacheTest.php
index c2e61a1..74ac273 100644
--- a/core/tests/Drupal/Tests/Core/Cache/CacheTest.php
+++ b/core/tests/Drupal/Tests/Core/Cache/CacheTest.php
@@ -140,7 +140,7 @@ public function buildTagsProvider() {
       ['node', ['a' => NULL], ['node:']],
       ['node', ['a' => TRUE], ['node:1']],
       // Test the $glue parameter.
-      ['config:system.menu', ['menu_name'], ['config:system.menu.menu_name'], '.'],
+      ['menu', ['menu_name'], ['menu:menu_name'], ':'],
     ];
   }
 
