diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
index a3798419f6..d51dd14fd7 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/DefaultSelection.php
@@ -230,6 +230,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#options' => $this->calculateSortOptions($entity_type_id, array_keys($bundles)),
         '#empty_value' => '_none',
         '#sort_options' => TRUE,
+        '#sort_start' => 2,
         '#limit_validation_errors' => [],
         '#default_value' => $configuration['sort']['field'],
       ];
@@ -511,10 +512,13 @@ protected function calculateSortOptions($entity_type, array $bundles) {
     }
 
     // Process the data in $fields to create an array of options for a select
-    // element. The format is 'Label|… (column) [field_name.column]'. If the
-    // field has the same label for all bundles, then omit '|…'. If the field
-    // has only one column, then omit '(column)' and '.column'.
+    // element. The format is 'Label,… (column) [field_name.column]'. If the
+    // field has the same label for all bundles, then omit ',…'. If the field
+    // has only one column, then omit '(column)' and '.column'. Also, the
+    // fields with multiple labels go into an optgroup.
     $options = [];
+    $group_key = (string) $this->t('Fields with multiple labels:');
+    $options[$group_key] = ['#sort_options' => TRUE];
     foreach ($fields as $field_name => $list) {
       // Sort by count, to put the most-used label at the end of the list.
       usort($list, function ($a, $b) {
@@ -528,16 +532,23 @@ protected function calculateSortOptions($entity_type, array $bundles) {
       // have only 1 or many plural forms, and we really just want these 2
       // alternatives.
       if ($single_column) {
-        $options[$field_name] = $single_label
-          ? $this->t('@label [@field]', $arguments)
-          : $this->t('@label|… [@field]', $arguments);
+        if ($single_label) {
+          $options[$field_name] = $this->t('@label [@field]', $arguments);
+        }
+        else {
+          $options[$group_key][$field_name] = $this->t('@label,… [@field]', $arguments);
+        }
       }
       else {
         foreach ($info['columns'] as $column_name) {
           $arguments['@column'] = $column_name;
-          $options["$field_name.$column_name"] = $single_label
-            ? $this->t('@label (@column) [@field.@column]', $arguments)
-            : $this->t('@label (@column)|… [@field.@column]', $arguments);
+          $column_key = "$field_name.$column_name";
+          if ($single_label) {
+            $options[$column_key] = $this->t('@label (@column) [@field.@column]', $arguments);
+          }
+          else {
+            $options[$group_key][$column_key] = $this->t('@label (@column),… [@field.@column]', $arguments);
+          }
         }
       }
     }
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionLabelTest.php b/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionLabelTest.php
index 6302dfb11a..18539bcfba 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionLabelTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/EntityReferenceSelection/EntityReferenceSelectionLabelTest.php
@@ -116,14 +116,15 @@ public function testLabels() {
     $options = $form['sort']['field']['#options'];
     $expected_result = [
       'field_string1' => 'String Field [field_string1]',
-      'field_string2' => 'String Field|… [field_string2]',
+      'field_string2' => 'String Field,… [field_string2]',
       'field_text1.value' => 'Text Field (value) [field_text1.value]',
-      'field_text2.value' => 'Another Label (value)|… [field_text2.value]',
+      'field_text2.value' => 'Another Label (value),… [field_text2.value]',
     ];
+    $group_key = 'Fields with multiple labels:';
     $this->assertEqual($options['field_string1'], $expected_result['field_string1'], 'The first string field has the expected label.');
-    $this->assertEqual($options['field_string2'], $expected_result['field_string2'], 'The second string field has the expected label.');
+    $this->assertEqual($options[$group_key]['field_string2'], $expected_result['field_string2'], 'The second string field has the expected label.');
     $this->assertEqual($options['field_text1.value'], $expected_result['field_text1.value'], 'The first text field has the expected label.');
-    $this->assertEqual($options['field_text2.value'], $expected_result['field_text2.value'], 'The second text field has the expected label.');
+    $this->assertEqual($options[$group_key]['field_text2.value'], $expected_result['field_text2.value'], 'The second text field has the expected label.');
   }
 
 }
