diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index ae36aa0..a4937f7 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -492,8 +492,7 @@ function hook_node_links_alter(array &$links, NodeInterface $entity, array &$con
     '#links' => array(
       'node-report' => array(
         'title' => t('Report'),
-        'href' => "node/{$entity->id()}/report",
-        'query' => array('token' => \Drupal::getContainer()->get('csrf_token')->get("node/{$entity->id()}/report")),
+        'url' => Url::fromRoute('node_test.report', ['node' => $entity->id()], ['query' => ['token' => \Drupal::getContainer()->get('csrf_token')->get("node/{$entity->id()}/report")]]),
       ),
     ),
   );
diff --git a/core/modules/node/tests/modules/node_test/node_test.routing.yml b/core/modules/node/tests/modules/node_test/node_test.routing.yml
new file mode 100644
index 0000000..f794260
--- /dev/null
+++ b/core/modules/node/tests/modules/node_test/node_test.routing.yml
@@ -0,0 +1,8 @@
+node_test.report:
+  path: '/node/{node}/report'
+  defaults:
+    _title: 'Report'
+    _controller: '\Drupal\node_test\Controller\NodeTestController::nodeReport'
+  requirements:
+    _access: 'TRUE'
+    _csrf_token: 'TRUE'
diff --git a/core/modules/node/tests/modules/node_test/src/Controller/NodeTestController.php b/core/modules/node/tests/modules/node_test/src/Controller/NodeTestController.php
new file mode 100644
index 0000000..6a91edb
--- /dev/null
+++ b/core/modules/node/tests/modules/node_test/src/Controller/NodeTestController.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace Drupal\node_test\Controller;
+
+use Drupal\node\NodeInterface;
+use Drupal\Core\Controller\ControllerBase;
+
+/**
+ * Controller for the comment_test.module.
+ */
+class NodeTestController extends ControllerBase {
+
+  /**
+   * Provides a comment report.
+   */
+  public function nodeReport(NodeInterface $node) {
+    return ['#markup' => $this->t('Report for a node')];
+  }
+
+}
