diff --git a/core/config/schema/core.menu.schema.yml b/core/config/schema/core.menu.schema.yml
index 1a6c268..eda023a 100644
--- a/core/config/schema/core.menu.schema.yml
+++ b/core/config/schema/core.menu.schema.yml
@@ -24,3 +24,6 @@ core.menu.static_menu_link_overrides:
           enabled:
             type: boolean
             label: 'Enabled'
+          promoted:
+            type: boolean
+            label: 'Promoted'
diff --git a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
index 7eefd12..894f7e3 100644
--- a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
+++ b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
@@ -242,6 +242,31 @@ public function generateIndexAndSort(array $tree) {
   }
 
   /**
+   * Separate the links into promoted vs non-promoted ones.
+   *
+   * Will only affect the first-level of the tree.
+   *
+   * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree
+   *   The menu link tree to manipulate.
+   *
+   * @return \Drupal\Core\Menu\MenuLinkTreeElement[]
+   *   The manipulated menu link tree.
+   */
+  public function bubbleUpPromotedItems(array $tree) {
+    $promoted = [];
+    $regular = [];
+    foreach ($tree as $key => $v) {
+      if ($v->link->isPromoted()) {
+        $promoted['1' . $key] = $tree[$key];
+      }
+      else {
+        $regular[$key] = $tree[$key];
+      }
+    }
+    return $promoted + $regular;
+  }
+
+  /**
    * Flattens the tree to a single level.
    *
    * @param \Drupal\Core\Menu\MenuLinkTreeElement[] $tree
diff --git a/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php b/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
index 1703119..5a1916e 100644
--- a/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
+++ b/core/lib/Drupal/Core/Menu/Form/MenuLinkDefaultForm.php
@@ -134,6 +134,13 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#default_value' => $this->menuLink->isExpanded(),
     ];
 
+    $form['promoted'] = [
+      '#type' => 'checkbox',
+      '#title' => t('Show as promoted'),
+      '#description' => $this->t('If selected, menu handlers may use this information to show this link more prominently.'),
+      '#default_value' => $this->menuLink->isPromoted(),
+    ];
+
     $menu_parent = $this->menuLink->getMenuName() . ':' . $this->menuLink->getParent();
     $form['menu_parent'] = $this->menuParentSelector->parentSelectElement($menu_parent, $this->menuLink->getPluginId());
     $form['menu_parent']['#title'] = $this->t('Parent link');
@@ -165,6 +172,7 @@ public function extractFormValues(array &$form, FormStateInterface $form_state)
     $new_definition['enabled'] = $form_state->getValue('enabled') ? 1 : 0;
     $new_definition['weight'] = (int) $form_state->getValue('weight');
     $new_definition['expanded'] = $form_state->getValue('expanded') ? 1 : 0;
+    $new_definition['promoted'] = $form_state->getValue('promoted') ? 1 : 0;
     list($menu_name, $parent) = explode(':', $form_state->getValue('menu_parent'), 2);
     if (!empty($menu_name)) {
       $new_definition['menu_name'] = $menu_name;
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkBase.php b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
index c61b5db..171bf21 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkBase.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
@@ -188,4 +188,14 @@ public function getCacheTags() {
     return [];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function isPromoted() {
+    if (!isset($this->pluginDefinition['promoted'])) {
+      $this->pluginDefinition['promoted'] = FALSE;
+    }
+    return $this->pluginDefinition['promoted'];
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkDefault.php b/core/lib/Drupal/Core/Menu/MenuLinkDefault.php
index 80a02cd..d395e84 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkDefault.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkDefault.php
@@ -19,6 +19,7 @@ class MenuLinkDefault extends MenuLinkBase implements ContainerFactoryPluginInte
     'weight' => 1,
     'expanded' => 1,
     'enabled' => 1,
+    'promoted' => 1,
   ];
 
   /**
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkInterface.php b/core/lib/Drupal/Core/Menu/MenuLinkInterface.php
index 37e7e39..7fafbfd 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkInterface.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkInterface.php
@@ -228,4 +228,15 @@ public function getEditRoute();
    */
   public function getTranslateRoute();
 
+  /**
+   * Returns whether this link should be considered "Promoted".
+   *
+   * Listings that differentiate promoted links from normal ones can use this
+   * information to sort or style them differently.
+   *
+   * @return bool
+   *   TRUE if this link is to be considered "Promoted", FALSE otherwise.
+   */
+  public function isPromoted();
+
 }
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkManager.php b/core/lib/Drupal/Core/Menu/MenuLinkManager.php
index d6a6094..a05f03a 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkManager.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkManager.php
@@ -48,6 +48,7 @@ class MenuLinkManager implements MenuLinkManagerInterface {
     'options' => [],
     'expanded' => 0,
     'enabled' => 1,
+    'promoted' => 0,
     // The name of the module providing this link.
     'provider' => '',
     'metadata' => [],
diff --git a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
index f6578fe..ff2be47 100644
--- a/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
+++ b/core/lib/Drupal/Core/Menu/MenuTreeStorage.php
@@ -95,6 +95,7 @@ class MenuTreeStorage implements MenuTreeStorageInterface {
     'options',
     'expanded',
     'enabled',
+    'promoted',
     'provider',
     'metadata',
     'class',
@@ -406,6 +407,7 @@ protected function preSave(array &$link, array $original) {
     // Cast Booleans to int, if needed.
     $fields['enabled'] = (int) $fields['enabled'];
     $fields['expanded'] = (int) $fields['expanded'];
+    $fields['promoted'] = (int) $fields['promoted'];
     return $fields;
   }
 
@@ -1328,6 +1330,13 @@ protected static function schemaDefinition() {
           'default' => 0,
           'size' => 'small',
         ],
+        'promoted' => [
+          'description' => 'Flag for whether this link should be rendered as promoted in menus (1 = promoted, 0 = not promoted)',
+          'type' => 'int',
+          'not null' => TRUE,
+          'default' => 0,
+          'size' => 'small',
+        ],
         'weight' => [
           'description' => 'Link weight among links in the same menu at the same depth.',
           'type' => 'int',
diff --git a/core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php b/core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php
index 07b7526..ca32d57 100644
--- a/core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php
+++ b/core/lib/Drupal/Core/Menu/StaticMenuLinkOverrides.php
@@ -130,6 +130,7 @@ public function saveOverride($id, array $definition) {
       'weight' => 0,
       'expanded' => FALSE,
       'enabled' => FALSE,
+      'promoted' => FALSE,
     ];
     // Filter the overrides to only those that are expected.
     $definition = array_intersect_key($definition, $expected);
@@ -142,6 +143,7 @@ public function saveOverride($id, array $definition) {
       $definition['weight'] = (int) $definition['weight'];
       $definition['expanded'] = (bool) $definition['expanded'];
       $definition['enabled'] = (bool) $definition['enabled'];
+      $definition['promoted'] = (bool) $definition['promoted'];
 
       $id = static::encodeId($id);
       $all_overrides = $this->getConfig()->get('definitions');
diff --git a/core/modules/media/media.links.menu.yml b/core/modules/media/media.links.menu.yml
index 33dd679..dee6b32 100644
--- a/core/modules/media/media.links.menu.yml
+++ b/core/modules/media/media.links.menu.yml
@@ -3,4 +3,5 @@ entity.media_type.collection:
   parent: system.admin_structure
   description: 'Manage media types.'
   route_name: entity.media_type.collection
+  promoted: 1
 
diff --git a/core/modules/menu_ui/menu_ui.links.menu.yml b/core/modules/menu_ui/menu_ui.links.menu.yml
index 9131309..60ca1eb 100644
--- a/core/modules/menu_ui/menu_ui.links.menu.yml
+++ b/core/modules/menu_ui/menu_ui.links.menu.yml
@@ -3,3 +3,4 @@ entity.menu.collection:
   description: 'Manage menus and menu links.'
   route_name: entity.menu.collection
   parent: system.admin_structure
+  promoted: 1
diff --git a/core/modules/node/node.links.menu.yml b/core/modules/node/node.links.menu.yml
index ae7a9af..896e88b 100644
--- a/core/modules/node/node.links.menu.yml
+++ b/core/modules/node/node.links.menu.yml
@@ -3,6 +3,7 @@ entity.node_type.collection:
   parent: system.admin_structure
   description: 'Create and manage fields, forms, and display settings for your content.'
   route_name: entity.node_type.collection
+  promoted: 1
 node.add_page:
   title: 'Add content'
   route_name: node.add_page
diff --git a/core/modules/system/src/SystemManager.php b/core/modules/system/src/SystemManager.php
index 3fc4182..cc8adb5 100644
--- a/core/modules/system/src/SystemManager.php
+++ b/core/modules/system/src/SystemManager.php
@@ -191,6 +191,7 @@ public function getAdminBlock(MenuLinkInterface $instance) {
     $manipulators = [
       ['callable' => 'menu.default_tree_manipulators:checkAccess'],
       ['callable' => 'menu.default_tree_manipulators:generateIndexAndSort'],
+      ['callable' => 'menu.default_tree_manipulators:bubbleUpPromotedItems'],
     ];
     $tree = $this->menuTree->transform($tree, $manipulators);
     foreach ($tree as $key => $element) {
@@ -208,6 +209,7 @@ public function getAdminBlock(MenuLinkInterface $instance) {
       $content[$key]['options'] = $link->getOptions();
       $content[$key]['description'] = $link->getDescription();
       $content[$key]['url'] = $link->getUrlObject();
+      $content[$key]['promoted'] = $link->isPromoted();
     }
     ksort($content);
     return $content;
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 799869b..7beff93 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -24,7 +24,13 @@
 function template_preprocess_admin_block_content(&$variables) {
   if (!empty($variables['content'])) {
     $variables['compact'] = system_admin_compact_mode();
+    $previous_promoted = FALSE;
     foreach ($variables['content'] as $key => $item) {
+      if ($previous_promoted && empty($item['promoted'])) {
+        // This is the first non-promoted item from the list. Add a flag to
+        // indicate that.
+        $variables['content'][$key]['first_non_promoted'] = TRUE;
+      }
       $variables['content'][$key]['link'] = \Drupal::l($item['title'], $item['url']);
       if (!$variables['compact'] && isset($item['description'])) {
         $variables['content'][$key]['description'] = ['#markup' => $item['description']];
@@ -32,6 +38,7 @@ function template_preprocess_admin_block_content(&$variables) {
       else {
         $variables['content'][$key]['description'] = FALSE;
       }
+      $previous_promoted = !empty($item['promoted']);
     }
   }
 }
diff --git a/core/modules/taxonomy/taxonomy.links.menu.yml b/core/modules/taxonomy/taxonomy.links.menu.yml
index 7626a2c..b103526 100644
--- a/core/modules/taxonomy/taxonomy.links.menu.yml
+++ b/core/modules/taxonomy/taxonomy.links.menu.yml
@@ -3,3 +3,4 @@ entity.taxonomy_vocabulary.collection:
   parent: system.admin_structure
   description: 'Manage tagging, categorization, and classification of your content.'
   route_name: entity.taxonomy_vocabulary.collection
+  promoted: 1
diff --git a/core/themes/seven/css/components/admin-list.css b/core/themes/seven/css/components/admin-list.css
index 5d0b63d..c960540 100644
--- a/core/themes/seven/css/components/admin-list.css
+++ b/core/themes/seven/css/components/admin-list.css
@@ -16,6 +16,10 @@ ul.admin-list {
 .admin-list.compact li {
   border: none;
 }
+.admin-list li.first-non-promoted {
+  border-top: none;
+  margin-top: 36px;
+}
 .admin-list li a {
   background: url(../../../../misc/icons/bebebe/chevron-disc-right.svg) no-repeat 1px 16px; /* LTR */
   display: block;
@@ -39,6 +43,9 @@ ul.admin-list {
 .admin-list li a .label {
   font-size: 1.0769em;
 }
+.admin-list li.menu-link-promoted a .label {
+  font-size: 1.25em;
+}
 .admin-list li a:hover .label,
 .admin-list li a:focus .label,
 .admin-list li a:active .label {
diff --git a/core/themes/seven/templates/admin-block-content.html.twig b/core/themes/seven/templates/admin-block-content.html.twig
index 5991a1b..04a69fe 100644
--- a/core/themes/seven/templates/admin-block-content.html.twig
+++ b/core/themes/seven/templates/admin-block-content.html.twig
@@ -26,7 +26,11 @@
 {% if content %}
   <ul{{ attributes.addClass(classes) }}>
     {% for item in content %}
-      <li><a href="{{ item.url }}"><span class="label">{{ item.title }}</span><div class="description">{{ item.description }}</div></a></li>
+      {% set item_classes = [
+        item.promoted ? 'menu-link-promoted',
+        item.first_non_promoted ? 'first-non-promoted',
+      ] %}
+      <li{{ create_attribute({'class': item_classes}) }}><a href="{{ item.url }}"><span class="label">{{ item.title }}</span><div class="description">{{ item.description }}</div></a></li>
     {% endfor %}
   </ul>
 {% endif %}
