diff --git a/core/lib/Drupal/Core/Menu/LocalActionDefault.php b/core/lib/Drupal/Core/Menu/LocalActionDefault.php
index f3c0962306..1b8c33d4d9 100644
--- a/core/lib/Drupal/Core/Menu/LocalActionDefault.php
+++ b/core/lib/Drupal/Core/Menu/LocalActionDefault.php
@@ -26,6 +26,13 @@ class LocalActionDefault extends PluginBase implements LocalActionInterface, Con
    */
   protected $routeProvider;
 
+  /**
+   * The current request.
+   *
+   * @var \Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
+
   /**
    * Constructs a LocalActionDefault object.
    *
@@ -37,11 +44,14 @@ class LocalActionDefault extends PluginBase implements LocalActionInterface, Con
    *   The plugin implementation definition.
    * @param \Drupal\Core\Routing\RouteProviderInterface $route_provider
    *   The route provider to load routes by name.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, Request $request) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
     $this->routeProvider = $route_provider;
+    $this->request = $request;
   }
 
   /**
@@ -52,7 +62,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $configuration,
       $plugin_id,
       $plugin_definition,
-      $container->get('router.route_provider')
+      $container->get('router.route_provider'),
+      $container->get('request_stack')->getCurrentRequest(),
     );
   }
 
diff --git a/core/modules/block/src/Controller/BlockLibraryController.php b/core/modules/block/src/Controller/BlockLibraryController.php
index cf5f20a0ba..438771267a 100644
--- a/core/modules/block/src/Controller/BlockLibraryController.php
+++ b/core/modules/block/src/Controller/BlockLibraryController.php
@@ -104,6 +104,14 @@ public function listBlocks(Request $request, $theme) {
     $region = $request->query->get('region');
     $weight = $request->query->get('weight');
 
+    // Add url route parameters to provide correct region setting
+    // after creation.
+    $add_action_url = $build['local_actions']['block_content_add_action']['#link']['url'] ?? NULL;
+    if ($add_action_url instanceof Url) {
+      $add_action_url->setRouteParameter('region', $region);
+      $build['local_actions']['block_content_add_action']['#link']['url'] = $add_action_url;
+    }
+
     // Only add blocks which work without any available context.
     $definitions = $this->blockManager->getFilteredDefinitions('block_ui', $this->contextRepository->getAvailableContexts(), [
       'theme' => $theme,
diff --git a/core/modules/block_content/src/BlockContentForm.php b/core/modules/block_content/src/BlockContentForm.php
index f9ae31821c..8db132bfc7 100644
--- a/core/modules/block_content/src/BlockContentForm.php
+++ b/core/modules/block_content/src/BlockContentForm.php
@@ -72,6 +72,7 @@ public function save(array $form, FormStateInterface $form_state) {
           [
             'plugin_id' => 'block_content:' . $block->uuid(),
             'theme' => $theme,
+            'region' => $this->getRequest()->query->get('region'),
           ]
         );
       }
diff --git a/core/modules/block_content/src/Plugin/Menu/LocalAction/BlockContentAddLocalAction.php b/core/modules/block_content/src/Plugin/Menu/LocalAction/BlockContentAddLocalAction.php
index 9b1e220796..424fc37569 100644
--- a/core/modules/block_content/src/Plugin/Menu/LocalAction/BlockContentAddLocalAction.php
+++ b/core/modules/block_content/src/Plugin/Menu/LocalAction/BlockContentAddLocalAction.php
@@ -20,6 +20,12 @@ public function getOptions(RouteMatchInterface $route_match) {
     if ($theme = $route_match->getParameter('theme')) {
       $options['query']['theme'] = $theme;
     }
+
+    // If the current request has a region query parameter.
+    if ($region = $this->request->query->get('region')) {
+      $options['query']['region'] = $region;
+    }
+
     // Adds a destination on content block listing.
     if ($route_match->getRouteName() == 'entity.block_content.collection') {
       $options['query']['destination'] = Url::fromRoute('<current>')->toString();
diff --git a/core/modules/block_content/tests/src/Functional/BlockContentListTest.php b/core/modules/block_content/tests/src/Functional/BlockContentListTest.php
index 347b037b68..7d75c07cc9 100644
--- a/core/modules/block_content/tests/src/Functional/BlockContentListTest.php
+++ b/core/modules/block_content/tests/src/Functional/BlockContentListTest.php
@@ -69,6 +69,22 @@ protected function setUp(): void {
     ]);
   }
 
+  /**
+   * Tests that region value is retained when we create new block.
+   */
+  public function testBlockRegionPlacement() {
+    $this->drupalLogin($this->drupalCreateUser($this->permissions));
+    $this->drupalGet("admin/structure/block/library/stark", ['query' => ['region' => 'help']]);
+
+    $this->clickLink('Add content block');
+    $this->assertSession()->statusCodeEquals(200);
+    $edit = [
+      'info[0][value]' => $this->randomString(),
+    ];
+    $this->submitForm($edit, 'Save');
+    $this->assertSession()->fieldValueEquals('region', 'help');
+  }
+
   /**
    * Tests the content block listing page with different permissions.
    */
diff --git a/core/modules/menu_ui/src/Plugin/Menu/LocalAction/MenuLinkAdd.php b/core/modules/menu_ui/src/Plugin/Menu/LocalAction/MenuLinkAdd.php
index 6424ff9f9d..f4c1f566d9 100644
--- a/core/modules/menu_ui/src/Plugin/Menu/LocalAction/MenuLinkAdd.php
+++ b/core/modules/menu_ui/src/Plugin/Menu/LocalAction/MenuLinkAdd.php
@@ -6,6 +6,7 @@
 use Drupal\Core\Routing\RedirectDestinationInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
+use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -33,9 +34,11 @@ class MenuLinkAdd extends LocalActionDefault {
    *   The route provider to load routes by name.
    * @param \Drupal\Core\Routing\RedirectDestinationInterface $redirect_destination
    *   The redirect destination.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, RedirectDestinationInterface $redirect_destination) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, RedirectDestinationInterface $redirect_destination, Request $request) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider, $request);
 
     $this->redirectDestination = $redirect_destination;
   }
@@ -49,7 +52,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('router.route_provider'),
-      $container->get('redirect.destination')
+      $container->get('redirect.destination'),
+      $container->get('request_stack')->getCurrentRequest(),
     );
   }
 
diff --git a/core/modules/system/tests/modules/menu_test/src/Plugin/Menu/LocalAction/TestLocalActionWithConfig.php b/core/modules/system/tests/modules/menu_test/src/Plugin/Menu/LocalAction/TestLocalActionWithConfig.php
index 4f56977e86..8b14307a6b 100644
--- a/core/modules/system/tests/modules/menu_test/src/Plugin/Menu/LocalAction/TestLocalActionWithConfig.php
+++ b/core/modules/system/tests/modules/menu_test/src/Plugin/Menu/LocalAction/TestLocalActionWithConfig.php
@@ -38,9 +38,11 @@ public function getTitle(Request $request = NULL) {
    *   The route provider to load routes by name.
    * @param \Drupal\Core\Config\Config $config
    *   The 'menu_test.links.action' config.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, Config $config) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, RouteProviderInterface $route_provider, Config $config, Request $request) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $route_provider, $request);
 
     $this->config = $config;
   }
@@ -54,7 +56,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('router.route_provider'),
-      $container->get('config.factory')->get('menu_test.links.action')
+      $container->get('config.factory')->get('menu_test.links.action'),
+      $container->get('request_stack')->getCurrentRequest()
     );
   }
 
diff --git a/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php b/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php
index de7f2c5c13..2d2b2da809 100644
--- a/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php
+++ b/core/tests/Drupal/Tests/Core/Menu/LocalActionDefaultTest.php
@@ -57,6 +57,13 @@ class LocalActionDefaultTest extends UnitTestCase {
    */
   protected $routeProvider;
 
+  /**
+   * The current request.
+   *
+   * @var \Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
+
   /**
    * {@inheritdoc}
    */
@@ -65,13 +72,14 @@ protected function setUp(): void {
 
     $this->stringTranslation = $this->createMock('Drupal\Core\StringTranslation\TranslationInterface');
     $this->routeProvider = $this->createMock('Drupal\Core\Routing\RouteProviderInterface');
+    $this->request = new Request();
   }
 
   /**
    * Setups the local action default.
    */
   protected function setupLocalActionDefault() {
-    $this->localActionDefault = new LocalActionDefault($this->config, $this->pluginId, $this->pluginDefinition, $this->routeProvider);
+    $this->localActionDefault = new LocalActionDefault($this->config, $this->pluginId, $this->pluginDefinition, $this->routeProvider, $this->request);
   }
 
   /**
