diff --git a/core/modules/comment/comment.services.yml b/core/modules/comment/comment.services.yml
index 3595854ceb..ca12fa699c 100644
--- a/core/modules/comment/comment.services.yml
+++ b/core/modules/comment/comment.services.yml
@@ -17,7 +17,7 @@ services:
 
   comment.lazy_builders:
     class: Drupal\comment\CommentLazyBuilders
-    arguments: ['@entity_type.manager', '@entity.form_builder', '@current_user', '@comment.manager', '@module_handler', '@renderer']
+    arguments: ['@entity_type.manager', '@entity.form_builder', '@current_user', '@comment.manager', '@module_handler', '@renderer', '@current_route_match']
 
   comment.link_builder:
     class: Drupal\comment\CommentLinkBuilder
diff --git a/core/modules/comment/src/CommentForm.php b/core/modules/comment/src/CommentForm.php
index e2b88f71e5..85e88382cb 100644
--- a/core/modules/comment/src/CommentForm.php
+++ b/core/modules/comment/src/CommentForm.php
@@ -7,6 +7,7 @@
 use Drupal\Component\Utility\Html;
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Datetime\DrupalDateTime;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\ContentEntityForm;
 use Drupal\Core\Entity\EntityConstraintViolationListInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
@@ -15,6 +16,7 @@
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Link;
 use Drupal\Core\Render\RendererInterface;
+use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -47,6 +49,27 @@ class CommentForm extends ContentEntityForm {
    */
   protected $entityFieldManager;
 
+  /**
+   * The commented entity..
+   *
+   * @var \Drupal\Core\Entity\ContentEntityBase
+   */
+  protected $commentedEntity;
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * Route match interface.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $routeMatch;
+
   /**
    * {@inheritdoc}
    */
@@ -57,7 +80,9 @@ public static function create(ContainerInterface $container) {
       $container->get('renderer'),
       $container->get('entity_type.bundle.info'),
       $container->get('datetime.time'),
-      $container->get('entity_field.manager')
+      $container->get('entity_field.manager'),
+      $container->get('current_route_match'),
+      $container->get('entity_type.manager')
     );
   }
 
@@ -76,12 +101,18 @@ public static function create(ContainerInterface $container) {
    *   The time service.
    * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
    *   The entity field manager service.
+   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
+   *   The current route match.
+   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+   *   The entity type manager.
    */
-  public function __construct(EntityRepositoryInterface $entity_repository, AccountInterface $current_user, RendererInterface $renderer, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, TimeInterface $time = NULL, EntityFieldManagerInterface $entity_field_manager = NULL) {
+  public function __construct(EntityRepositoryInterface $entity_repository, AccountInterface $current_user, RendererInterface $renderer, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, TimeInterface $time = NULL, EntityFieldManagerInterface $entity_field_manager = NULL, RouteMatchInterface $route_match, EntityTypeManagerInterface $entity_type_manager) {
     parent::__construct($entity_repository, $entity_type_bundle_info, $time);
     $this->currentUser = $current_user;
     $this->renderer = $renderer;
     $this->entityFieldManager = $entity_field_manager ?: \Drupal::service('entity_field.manager');
+    $this->entityTypeManager = $entity_type_manager ?: \Drupal::service('entity_type_manager');
+    $this->routeMatch = $route_match;
   }
 
   /**
@@ -119,8 +150,14 @@ public function form(array $form, FormStateInterface $form_state) {
 
     // If not replying to a comment, use our dedicated page callback for new
     // Comments on entities.
-    if (!$comment->id() && !$comment->hasParentComment()) {
-      $form['#action'] = Url::fromRoute('comment.reply', ['entity_type' => $entity->getEntityTypeId(), 'entity' => $entity->id(), 'field_name' => $field_name])->toString();
+    $entity_url = $entity->toUrl();
+    if ($entity_url->getRouteName() === $this->routeMatch->getRouteName() &&
+      $entity_url->getRouteParameters() === $this->routeMatch->getRawParameters()) {
+      $form['#action'] = Url::fromRoute('comment.reply', [
+        'entity_type' => $entity->getEntityTypeId(),
+        'entity' => $entity->id(),
+        'field_name' => $field_name,
+      ])->toString();
     }
 
     $comment_preview = $form_state->get('comment_preview');
@@ -411,7 +448,11 @@ public function save(array $form, FormStateInterface $form_state) {
       $this->messenger()->addError($this->t('Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', ['%subject' => $comment->getSubject()]));
       // Redirect the user to the entity they are commenting on.
     }
-    $form_state->setRedirectUrl($uri);
+    $entity_url = $entity->toUrl();
+    if ($entity_url->getRouteName() === $this->routeMatch->getRouteName() &&
+      $entity_url->getRouteParameters() === $this->routeMatch->getRawParameters()) {
+      $form_state->setRedirectUrl($uri);
+    }
   }
 
 }
diff --git a/core/modules/comment/src/CommentLazyBuilders.php b/core/modules/comment/src/CommentLazyBuilders.php
index 90b2811eb4..d4ac8cc240 100644
--- a/core/modules/comment/src/CommentLazyBuilders.php
+++ b/core/modules/comment/src/CommentLazyBuilders.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Url;
+use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Defines a service for comment #lazy_builder callbacks.
@@ -60,6 +61,13 @@ class CommentLazyBuilders implements TrustedCallbackInterface {
    */
   protected $renderer;
 
+  /**
+   * The current route match.
+   *
+   * @var \Drupal\Core\Routing\RouteMatchInterface
+   */
+  protected $currentRouteMatch;
+
   /**
    * Constructs a new CommentLazyBuilders object.
    *
@@ -75,14 +83,17 @@ class CommentLazyBuilders implements TrustedCallbackInterface {
    *   The module handler service.
    * @param \Drupal\Core\Render\RendererInterface $renderer
    *   The renderer service.
+   * @param \Drupal\Core\Routing\RouteMatchInterface $current_route_match
+   *   The redirect destination.
    */
-  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFormBuilderInterface $entity_form_builder, AccountInterface $current_user, CommentManagerInterface $comment_manager, ModuleHandlerInterface $module_handler, RendererInterface $renderer) {
+  public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFormBuilderInterface $entity_form_builder, AccountInterface $current_user, CommentManagerInterface $comment_manager, ModuleHandlerInterface $module_handler, RendererInterface $renderer, RouteMatchInterface $current_route_match) {
     $this->entityTypeManager = $entity_type_manager;
     $this->entityFormBuilder = $entity_form_builder;
     $this->currentUser = $current_user;
     $this->commentManager = $comment_manager;
     $this->moduleHandler = $module_handler;
     $this->renderer = $renderer;
+    $this->currentRouteMatch = $current_route_match;
   }
 
   /**
@@ -166,13 +177,16 @@ public function renderLinks($comment_entity_id, $view_mode, $langcode, $is_in_pr
   protected function buildLinks(CommentInterface $entity, EntityInterface $commented_entity) {
     $links = [];
     $status = $commented_entity->get($entity->getFieldName())->status;
-
+    $current_route = Url::fromRoute('<current>')->toString();
     if ($status == CommentItemInterface::OPEN) {
       if ($entity->access('delete')) {
         $links['comment-delete'] = [
           'title' => t('Delete'),
           'url' => $entity->toUrl('delete-form'),
         ];
+        if ($current_route) {
+          $links['comment-delete']['url']->setOptions(['query' => ['destination' => $current_route]]);
+        }
       }
 
       if ($entity->access('update')) {
@@ -180,6 +194,9 @@ protected function buildLinks(CommentInterface $entity, EntityInterface $comment
           'title' => t('Edit'),
           'url' => $entity->toUrl('edit-form'),
         ];
+        if ($current_route) {
+          $links['comment-edit']['url']->setOptions(['query' => ['destination' => $current_route]]);
+        }
       }
       if ($entity->access('create')) {
         $links['comment-reply'] = [
@@ -191,12 +208,18 @@ protected function buildLinks(CommentInterface $entity, EntityInterface $comment
             'pid' => $entity->id(),
           ]),
         ];
+        if ($current_route) {
+          $links['comment-reply']['url']->setOptions(['query' => ['destination' => $current_route]]);
+        }
       }
       if (!$entity->isPublished() && $entity->access('approve')) {
         $links['comment-approve'] = [
           'title' => t('Approve'),
           'url' => Url::fromRoute('comment.approve', ['comment' => $entity->id()]),
         ];
+        if ($current_route) {
+          $links['comment-approve']['url']->setOptions(['query' => ['destination' => $current_route]]);
+        }
       }
       if (empty($links) && $this->currentUser->isAnonymous()) {
         $links['comment-forbidden']['title'] = $this->commentManager->forbiddenMessage($commented_entity, $entity->getFieldName());
@@ -209,6 +232,9 @@ protected function buildLinks(CommentInterface $entity, EntityInterface $comment
         'title' => t('Translate'),
         'url' => $entity->toUrl('drupal:content-translation-overview'),
       ];
+      if ($current_route) {
+        $links['comment-translations']['url']->setOptions(['query' => ['destination' => $current_route]]);
+      }
     }
 
     return [
diff --git a/core/modules/comment/tests/src/Functional/CommentBlockTest.php b/core/modules/comment/tests/src/Functional/CommentBlockTest.php
index 29ebe8f9c8..7aea1af5fc 100644
--- a/core/modules/comment/tests/src/Functional/CommentBlockTest.php
+++ b/core/modules/comment/tests/src/Functional/CommentBlockTest.php
@@ -2,6 +2,12 @@
 
 namespace Drupal\Tests\comment\Functional;
 
+use Drupal\block_content\Entity\BlockContent;
+use Drupal\block_content\Entity\BlockContentType;
+use Drupal\comment\CommentInterface;
+use Drupal\comment\Entity\Comment;
+use Drupal\comment\Plugin\Field\FieldType\CommentItemInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\user\RoleInterface;
 
 /**
@@ -16,7 +22,7 @@ class CommentBlockTest extends CommentTestBase {
    *
    * @var array
    */
-  protected static $modules = ['block', 'views'];
+  protected static $modules = ['block', 'views', 'block_content'];
 
   /**
    * {@inheritdoc}
@@ -91,4 +97,55 @@ public function testRecentCommentBlock() {
     }
   }
 
+  /**
+   * Test to ensure that correct destination exists for comment action links.
+   */
+  public function testCommentDestination() {
+    $bundle = BlockContentType::create([
+      'id' => 'basic',
+      'label' => 'basic',
+      'revision' => FALSE,
+    ]);
+    $bundle->save();
+    $block_content = BlockContent::create([
+      'type' => 'basic',
+      'label' => 'Some block title',
+      'info' => 'Test block',
+    ]);
+    $block_content->save();
+
+    // Create comment field on block_content.
+    $this->addDefaultCommentField('block_content', 'basic', 'block_comment', CommentItemInterface::OPEN, 'block_comment');
+    $this->drupalPlaceBlock("block_content:{$block_content->uuid()}", [
+      'region' => 'content',
+      'visibility' => [
+        'request_path' => [
+          'id' => 'request_path',
+          'negate' => FALSE,
+          'pages' => '/user/*',
+        ],
+      ],
+    ]);
+    // Add a comment.
+    /** @var \Drupal\comment\CommentInterface $comment */
+    $comment = Comment::create([
+      'entity_id' => $block_content->id(),
+      'entity_type' => 'block_content',
+      'field_name' => 'block_comment',
+      'uid' => $this->rootUser->id(),
+      'status' => CommentInterface::PUBLISHED,
+      'subject' => $this->randomMachineName(),
+      'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+      'comment_body' => [LanguageInterface::LANGCODE_NOT_SPECIFIED => [$this->randomMachineName()]],
+    ]);
+    $comment->save();
+
+    $this->drupalLogin($this->rootUser);
+    $this->drupalGet("user/{$this->rootUser->id()}");
+    // Test to ensure that destination parameter exist.
+    $this->assertSession()->linkByHrefExists("comment/{$comment->id()}/delete?destination=/user/{$this->rootUser->id()}");
+    $this->assertSession()->linkByHrefExists("comment/{$comment->id()}/edit?destination=/user/{$this->rootUser->id()}");
+    $this->assertSession()->linkByHrefExists("comment/reply/block_content/{$block_content->id()}/block_comment/{$comment->id()}?destination=/user/{$this->rootUser->id()}");
+  }
+
 }
diff --git a/core/modules/comment/tests/src/Functional/CommentTestBase.php b/core/modules/comment/tests/src/Functional/CommentTestBase.php
index 91a7130ce1..23792e1f3e 100644
--- a/core/modules/comment/tests/src/Functional/CommentTestBase.php
+++ b/core/modules/comment/tests/src/Functional/CommentTestBase.php
@@ -183,6 +183,20 @@ public function postComment($entity, $comment, $subject = '', $contact = NULL, $
       \Drupal::entityTypeManager()->getStorage('comment')->resetCache([$match[1]]);
       return Comment::load($match[1]);
     }
+    else {
+      $cids = \Drupal::entityQuery('comment')
+        ->accessCheck(FALSE)
+        ->condition('entity_id', $entity->id())
+        ->condition('field_name', $field_name)
+        ->sort('cid', 'DESC')
+        ->range(0, 1)
+        ->execute();
+      if (!empty($cids)) {
+        $cid = reset($cids);
+        \Drupal::entityTypeManager()->getStorage('comment')->resetCache([$cid]);
+        return Comment::load($cid);
+      }
+    }
   }
 
   /**