diff --git a/src/Form/IndexFieldsForm.php b/src/Form/IndexFieldsForm.php
index 26910b29..44102427 100644
--- a/src/Form/IndexFieldsForm.php
+++ b/src/Form/IndexFieldsForm.php
@@ -11,6 +11,7 @@
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Url;
 use Drupal\search_api\DataType\DataTypePluginManager;
+use Drupal\search_api\Item\FieldInterface;
 use Drupal\search_api\Processor\ConfigurablePropertyInterface;
 use Drupal\search_api\SearchApiException;
 use Drupal\search_api\UnsavedConfigurationInterface;
@@ -260,6 +261,7 @@ protected function buildFieldsTable(array $fields) {
       ),
     );
 
+    uasort($fields, [static::class, 'compareFields']);
     foreach ($fields as $key => $field) {
       $build['fields'][$key]['#access'] = !$field->isHidden();
 
@@ -352,6 +354,22 @@ protected function buildFieldsTable(array $fields) {
   }
 
   /**
+   * Compares two fields for alphabetic sorting according to their labels.
+   *
+   * @param \Drupal\search_api\Item\FieldInterface $a
+   *   The first field.
+   * @param \Drupal\search_api\Item\FieldInterface $b
+   *   The second field.
+   *
+   * @return int
+   *   -1, 0 or 1 if the first field should, respectively, be considered less
+   *   than, equal to or greater than the second.
+   */
+  public static function compareFields(FieldInterface $a, FieldInterface $b) {
+    return strnatcasecmp($a->getLabel(), $b->getLabel());
+  }
+
+  /**
    * {@inheritdoc}
    */
   protected function actions(array $form, FormStateInterface $form_state) {
