diff --git a/core/modules/block_place/src/Plugin/DisplayVariant/PlaceBlockPageVariant.php b/core/modules/block_place/src/Plugin/DisplayVariant/PlaceBlockPageVariant.php
index d05c7f1..7587f83 100644
--- a/core/modules/block_place/src/Plugin/DisplayVariant/PlaceBlockPageVariant.php
+++ b/core/modules/block_place/src/Plugin/DisplayVariant/PlaceBlockPageVariant.php
@@ -99,6 +99,13 @@ public function build() {
       if ($destination) {
         $query['destination'] = $destination;
       }
+      // If there are blocks in the region, we want a weight one less so the
+      // newly placed block is on top.
+      if (!empty($build[$region])) {
+        $first_block_render_array = reset($build[$region]);
+        $lowest_weight = isset($first_block_render_array['#weight']) ? $first_block_render_array['#weight'] : 0;
+        $query['weight'] = $lowest_weight - 1;
+      }
       $title = $this->t('<span class="visually-hidden">Place block in the %region region</span>', ['%region' => $region_name]);
       $operations['block_description'] = [
         '#type' => 'inline_template',
diff --git a/core/modules/block_place/tests/src/Functional/BlockPlaceTest.php b/core/modules/block_place/tests/src/Functional/BlockPlaceTest.php
index 8e89048..6338049 100644
--- a/core/modules/block_place/tests/src/Functional/BlockPlaceTest.php
+++ b/core/modules/block_place/tests/src/Functional/BlockPlaceTest.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\Tests\block_place\Functional;
 
+use Drupal\block\Entity\Block;
 use Drupal\Core\Url;
+use Drupal\simpletest\BlockCreationTrait;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -12,6 +14,8 @@
  */
 class BlockPlaceTest extends BrowserTestBase {
 
+  use BlockCreationTrait;
+
   /**
    * Modules to install.
    *
@@ -69,8 +73,54 @@ public function testPlacingBlocksUnprivileged() {
     $links = $this->xpath('//a[text()=:label]', [':label' => 'Place block']);
     $this->assertEmpty($links);
 
-    $this->drupalGet(Url::fromRoute('block.admin_library', ['theme' => 'classy']));
+    $default_theme = $this->config('system.theme')->get('default');
+    $this->drupalGet(Url::fromRoute('block.admin_library', ['theme' => $default_theme]));
     $this->assertSession()->statusCodeEquals(403);
   }
 
+  /**
+   * Tests placing blocks as an admin in a region with existing blocks.
+   */
+  public function testPlacedBlocksPosition() {
+    // Create administrative user.
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'access toolbar',
+      'administer blocks',
+      'view the administration theme',
+    ]));
+
+    $block_plugin_id = 'system_powered_by_block';
+    // Enable a standard block in first and second sidebars with set weights.
+    $this->placeBlock($block_plugin_id, ['region' => 'sidebar_first', 'weight' => -5]);
+    $this->placeBlock($block_plugin_id, ['region' => 'sidebar_second', 'weight' => 3]);
+
+    $default_theme = $this->config('system.theme')->get('default');
+    $block_library_url = Url::fromRoute('block.admin_library', ['theme' => $default_theme]);
+    $block_add_url = Url::fromRoute('block.admin_add', ['plugin_id' => $block_plugin_id, 'theme' => $default_theme]);
+    // The expected weights are one less than the weights of the blocks added
+    // above.
+    foreach (['sidebar_first' => -6, 'sidebar_second' => 2] as $region => $expected_weight) {
+      $this->drupalGet(Url::fromRoute('<front>'));
+      $this->clickLink('Place block');
+      $block_library_url->setOption('query', ['region' => $region]);
+      $links = $this->xpath('//a[contains(@href, :href)]', [':href' => $block_library_url->toString()]);
+      $this->assertEquals(1, count($links));
+      $this->drupalGet($this->getAbsoluteUrl($links[0]->getAttribute('href')));
+      $links = $this->xpath('//a[contains(@href, :href)]', [':href' => $block_add_url->toString()]);
+      $this->assertEquals(1, count($links));
+      $this->drupalGet($this->getAbsoluteUrl($links[0]->getAttribute('href')));
+      $title = $this->randomMachineName(8);
+      $block_id = strtolower($this->randomMachineName(8));
+      $edit = [
+        'id' => $block_id,
+        'settings[label]' => $title,
+      ];
+      $this->drupalPostForm(NULL, $edit, t('Save block'));
+      /** @var \Drupal\block\BlockInterface $block */
+      $block = Block::load($edit['id']);
+      $this->assertEquals($expected_weight, $block->getWeight(), 'Found the block with expected weight.');
+    }
+  }
+
 }
