diff --git a/core/lib/Drupal/Core/Field/WidgetBase.php b/core/lib/Drupal/Core/Field/WidgetBase.php
index e333df3..f5751d9 100644
--- a/core/lib/Drupal/Core/Field/WidgetBase.php
+++ b/core/lib/Drupal/Core/Field/WidgetBase.php
@@ -176,10 +176,21 @@ protected function formMultipleElements(FieldItemListInterface $items, array &$f
 
       // For multiple fields, title and description are handled by the wrapping
       // table.
-      $element = array(
-        '#title' => $is_multiple ? '' : $title,
-        '#description' => $is_multiple ? '' : $description,
-      );
+      if ($is_multiple) {
+        $element = array(
+          '#title' => $title . ' ' . t('(value @number)', array('@number' => $delta + 1)),
+          '#title_display' => 'invisible',
+          '#description' => '',
+        );
+      }
+      else {
+        $element = array(
+          '#title' => $title,
+          '#title_display' => 'before',
+          '#description' => $description,
+        );
+      }
+
       $element = $this->formSingleElement($items, $delta, $element, $form, $form_state);
 
       if ($element) {
diff --git a/core/modules/field/src/Tests/FormTest.php b/core/modules/field/src/Tests/FormTest.php
index dc2d7a9..dca0da4 100644
--- a/core/modules/field/src/Tests/FormTest.php
+++ b/core/modules/field/src/Tests/FormTest.php
@@ -317,6 +317,31 @@ function testFieldFormUnlimited() {
   }
 
   /**
+   * Tests the position of the required label.
+   */
+  function testFieldFormUnlimitedRequired() {
+    $field_storage = $this->fieldStorageUnlimited;
+    $field_name = $field_storage['field_name'];
+    $this->field['field_name'] = $field_name;
+    $this->field['required'] = TRUE;
+    entity_create('field_storage_config', $field_storage)->save();
+    entity_create('field_config', $this->field)->save();
+    entity_get_form_display($this->field['entity_type'], $this->field['bundle'], 'default')
+      ->setComponent($field_name)
+      ->save();
+
+    // Display creation form -> 1 widget.
+    $this->drupalGet('entity_test/add');
+    // Check that the Required symbol is present for the multifield label.
+    $this->assertRaw(SafeMarkup::format('<h4 class="label form-required">@label</h4>', array('@label' => $this->field['label'])),
+        'Required symbol added field label.');
+    // Check that the label of the field input is visually hidden and contains
+    // the field title and an indication of the delta for a11y.
+    $this->assertRaw(SafeMarkup::format('<label for="edit-field-unlimited-0-value" class="visually-hidden form-required">@label (value 1)</label>', array('@label' => $this->field['label'])),
+        'Required symbol not added for field input.');
+  }
+
+  /**
    * Tests widget handling of multiple required radios.
    */
   function testFieldFormMultivalueWithRequiredRadio() {
