diff --git a/config/schema/search_api.datasource.schema.yml b/config/schema/search_api.datasource.schema.yml
index 895f5b3..42590ed 100644
--- a/config/schema/search_api.datasource.schema.yml
+++ b/config/schema/search_api.datasource.schema.yml
@@ -12,6 +12,7 @@
         selected:
           type: sequence
           label: 'The selected bundles'
+          orderby: value
           sequence:
             type: string
             label: 'A bundle machine name'
@@ -25,6 +26,7 @@
         selected:
           type: sequence
           label: 'The selected languages'
+          orderby: value
           sequence:
             type: string
             label: 'A language code'
diff --git a/config/schema/search_api.index.schema.yml b/config/schema/search_api.index.schema.yml
index 60e879a..25bbb10 100644
--- a/config/schema/search_api.index.schema.yml
+++ b/config/schema/search_api.index.schema.yml
@@ -20,6 +20,7 @@ search_api.index.*:
     field_settings:
       type: sequence
       label: 'Indexed fields'
+      orderby: key
       sequence:
         type: mapping
         label: field
@@ -56,12 +57,14 @@ search_api.index.*:
     datasource_settings:
       type: sequence
       label: 'Datasource settings'
+      orderby: value
       sequence:
         type: plugin.plugin_configuration.search_api_datasource.[%key]
         label: 'The configuration for a single datasource'
     processor_settings:
       type: sequence
       label: 'Processor settings'
+      orderby: key
       sequence:
         type: plugin.plugin_configuration.search_api_processor.[%key]
         label: 'The configuration for a single processor'
diff --git a/config/schema/search_api.processor.schema.yml b/config/schema/search_api.processor.schema.yml
index 92f5224..bc55db2 100644
--- a/config/schema/search_api.processor.schema.yml
+++ b/config/schema/search_api.processor.schema.yml
@@ -7,6 +7,7 @@ search_api.default_processor_configuration:
     weights:
       type: sequence
       label: 'The processor''s weights for the different processing stages'
+      orderby: value
       sequence:
         type: integer
         label: 'The processor''s weight for this stage'
@@ -18,6 +19,7 @@ search_api.fields_processor_configuration:
     fields:
       type: sequence
       label: 'The selected fields'
+      orderby: value
       sequence:
         type: string
         label: 'Selected field'
@@ -35,6 +37,7 @@ plugin.plugin_configuration.search_api_processor.hierarchy:
     fields:
       type: sequence
       label: 'Fields for which to add the hierarchy'
+      orderby: value
       sequence:
         type: string
         label: 'Field ID'
@@ -58,6 +61,7 @@ plugin.plugin_configuration.search_api_processor.highlight:
     exclude_fields:
       type: sequence
       label: 'Fields excluded from excerpt'
+      orderby: value
       sequence:
         type: string
         label: 'An excluded field''s ID'
@@ -81,6 +85,7 @@ plugin.plugin_configuration.search_api_processor.html_filter:
     tags:
       type: sequence
       label: 'Tag boosts'
+      orderby: value
       sequence:
         type: integer
         label: Boost
@@ -103,6 +108,7 @@ plugin.plugin_configuration.search_api_processor.ignore_character:
         character_sets:
           type: sequence
           label: 'Configuration of the character sets'
+          orderby: value
           sequence:
             type: ignore
             label: 'Character set'
@@ -114,6 +120,7 @@ plugin.plugin_configuration.search_api_processor.stemmer:
     exceptions:
       type: sequence
       label: 'Stemming exceptions'
+      orderby: value
       sequence:
         type: string
         label: Exception
@@ -128,6 +135,7 @@ plugin.plugin_configuration.search_api_processor.role_filter:
     roles:
       type: sequence
       label: 'The selected roles'
+      orderby: value
       sequence:
         type: string
         label: 'The role name'
@@ -139,6 +147,7 @@ plugin.plugin_configuration.search_api_processor.stopwords:
     stopwords:
       type: sequence
       label: 'entered stopwords'
+      orderby: value
       sequence:
         type: string
         label: Stopword
@@ -181,6 +190,7 @@ search_api.property_configuration.aggregated_field:
     fields:
       type: sequence
       label: 'The properties to be aggregated'
+      orderby: value
       sequence:
         type: string
         label: 'A property that should be part of the aggregation'
@@ -192,15 +202,18 @@ search_api.property_configuration.rendered_item:
     roles:
       type: sequence
       label: 'The selected roles'
+      orderby: value
       sequence:
         type: string
         label: 'The user roles which will be active when the entity is rendered'
     view_mode:
       type: sequence
       label: 'The selected view modes for each datasource, by bundle'
+      orderby: value
       sequence:
         type: sequence
         label: 'The selected view modes for the datasource, by bundle'
+        orderby: value
         sequence:
           type: string
           label: 'The view mode used to render the entity for the specified bundle'
diff --git a/config/schema/search_api.tracker.schema.yml b/config/schema/search_api.tracker.schema.yml
index 1cb3518..602f0d3 100644
--- a/config/schema/search_api.tracker.schema.yml
+++ b/config/schema/search_api.tracker.schema.yml
@@ -1,6 +1,7 @@
 plugin.plugin_configuration.search_api_tracker.default:
   type: sequence
   label: 'Entity tracker configuration'
+  orderby: value
   sequence:
     type: string
     label: 'An entity bundle'
diff --git a/config/schema/search_api.views.schema.yml b/config/schema/search_api.views.schema.yml
index b4e21ef..82096f0 100644
--- a/config/schema/search_api.views.schema.yml
+++ b/config/schema/search_api.views.schema.yml
@@ -16,9 +16,11 @@ views.row.search_api:
     view_modes:
       type: sequence
       label: View modes for each datasource
+      orderby: value
       sequence:
         type: sequence
         label: A list of all the bundles and their configured view mode
+        orderby: value
         sequence:
           type: string
           label: View mode for the specific bundle
@@ -70,6 +72,7 @@ views.argument.search_api_fulltext:
     fields:
       type: sequence
       label: 'Fields'
+      orderby: value
       sequence:
         type: string
         label: 'Field'
@@ -81,6 +84,7 @@ views.argument.search_api_more_like_this:
     fields:
       type: sequence
       label: 'Fields'
+      orderby: value
       sequence:
         type: string
         label: 'Field'
@@ -134,6 +138,7 @@ views.field.search_api_entity:
     display_methods:
       type: sequence
       label: 'Display settings'
+      orderby: key
       sequence:
         type: mapping
         label: 'Display settings for bundle'
@@ -175,6 +180,7 @@ views.field.search_api_numeric:
     format_plural_values:
       type: sequence
       label: 'Pluralized strings'
+      orderby: value
       sequence:
         type: string
         label: 'Singular/Plural string'
@@ -200,6 +206,7 @@ views.filter.search_api_fulltext:
     fields:
       type: sequence
       label: Fields to search on
+      orderby: value
       sequence:
         type: string
         label: Field name
@@ -249,6 +256,7 @@ views.filter_value.search_api_numeric:
 
 views.filter_value.search_api_options:
   type: sequence
+  orderby: value
   sequence:
     type: string
     label: 'Value'
diff --git a/src/Form/IndexFieldsForm.php b/src/Form/IndexFieldsForm.php
index b0574b1..d3a9b4d 100644
--- a/src/Form/IndexFieldsForm.php
+++ b/src/Form/IndexFieldsForm.php
@@ -10,6 +10,7 @@ use Drupal\Core\Form\FormStateInterface;
 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\UnsavedConfigurationInterface;
 use Drupal\search_api\Utility\DataTypeHelperInterface;
@@ -245,6 +246,7 @@ class IndexFieldsForm extends EntityForm {
       ),
     );
 
+    uasort($fields, [static::class, 'compareFields']);
     foreach ($fields as $key => $field) {
       $build['fields'][$key]['#access'] = !$field->isHidden();
 
@@ -319,6 +321,22 @@ class IndexFieldsForm extends EntityForm {
   }
 
   /**
+   * 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) {
diff --git a/tests/search_api_test/config/schema/search_api_test.schema.yml b/tests/search_api_test/config/schema/search_api_test.schema.yml
index 56c1c91..3fb5fcb 100644
--- a/tests/search_api_test/config/schema/search_api_test.schema.yml
+++ b/tests/search_api_test/config/schema/search_api_test.schema.yml
@@ -19,6 +19,7 @@ plugin.plugin_configuration.search_api_processor.search_api_test:
     weights:
       type: sequence
       label: 'The processor''s weights for the different processing stages'
+      orderby: value
       sequence:
         type: integer
         label: 'The processor''s weight for this stage'
