diff --git a/core/modules/block/src/Plugin/ConfigAction/PlaceBlock.php b/core/modules/block/src/Plugin/ConfigAction/PlaceBlock.php
index 512ad99facb2c4d54d9c4cb8a7c55afacbe413cb..b43b455639b9ba715099ce863b1002ebebe07585 100644
--- a/core/modules/block/src/Plugin/ConfigAction/PlaceBlock.php
+++ b/core/modules/block/src/Plugin/ConfigAction/PlaceBlock.php
@@ -73,15 +73,17 @@ public function apply(string $configName, mixed $value): void {
         'theme' => $theme,
         'region' => $value['region'],
       ]);
-      // Sort the blocks by weight. Don't use \Drupal\block\Entity\Block::sort()
-      // here because it seems to be intended to sort blocks in the UI, where
-      // we really just want to get the weights right in this situation.
-      uasort($blocks, fn (BlockInterface $a, BlockInterface $b) => $a->getWeight() <=> $b->getWeight());
+      if ($blocks) {
+        // Sort the blocks by weight. Don't use \Drupal\block\Entity\Block::sort()
+        // here because it seems to be intended to sort blocks in the UI, where
+        // we really just want to get the weights right in this situation.
+        uasort($blocks, fn (BlockInterface $a, BlockInterface $b) => $a->getWeight() <=> $b->getWeight());
 
-      $value['weight'] = match ($value['position']) {
-        'first' => reset($blocks)->getWeight() - 1,
-        'last' => end($blocks)->getWeight() + 1,
-      };
+        $value['weight'] = match ($value['position']) {
+          'first' => reset($blocks)->getWeight() - 1,
+          'last' => end($blocks)->getWeight() + 1,
+        };
+      }
     }
     // Remove values that are not valid properties of block entities.
     unset($value['position'], $value['default_region']);
diff --git a/core/modules/block/tests/src/Kernel/ConfigActionsTest.php b/core/modules/block/tests/src/Kernel/ConfigActionsTest.php
index 88bdb8afef8e4bb5ce2029898d35e2960e2dcd86..b12ee0edc94094a0eee8920d87beded1fe9d673e 100644
--- a/core/modules/block/tests/src/Kernel/ConfigActionsTest.php
+++ b/core/modules/block/tests/src/Kernel/ConfigActionsTest.php
@@ -180,4 +180,28 @@ public function testPlaceBlockAtPosition(): void {
     $this->assertSame('last', end($blocks));
   }
 
+  /**
+   * Tests using the PlaceBlock action in an empty region.
+   */
+  public function testPlaceBlockInEmptyRegion(): void {
+    /** @var \Drupal\Core\Entity\Query\QueryInterface $query */
+    $query = $this->container->get(EntityTypeManagerInterface::class)
+      ->getStorage('block')
+      ->getQuery()
+      ->count()
+      ->condition('theme', 'olivero')
+      ->condition('region', 'footer_top');
+    $this->assertSame(0, $query->execute());
+
+    // Place a block in that region.
+    $this->configActionManager->applyAction('placeBlockInDefaultTheme', 'block.block.test', [
+      'plugin' => 'system_powered_by_block',
+      'region' => [
+        'olivero' => 'footer_top',
+      ],
+      'position' => 'first',
+    ]);
+    $this->assertSame(1, $query->execute());
+  }
+
 }