diff --git a/src/Controller/PageManagerController.php b/src/Controller/PageManagerController.php
new file mode 100644
index 0000000..76b8c17
--- /dev/null
+++ b/src/Controller/PageManagerController.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\page_manager\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\page_manager\PageVariantInterface;
+
+/**
+ * Controllers for Page Manager.
+ */
+class PageManagerController extends ControllerBase {
+
+  /**
+   * Route title callback.
+   *
+   * @param \Drupal\page_manager\PageVariantInterface $page_manager_page_variant
+   *
+   * @return string
+   *   The title for a particular page.
+   */
+  public function pageTitle(PageVariantInterface $page_manager_page_variant) {
+    return $page_manager_page_variant->getPageTitle();
+  }
+
+}
diff --git a/src/Entity/PageVariant.php b/src/Entity/PageVariant.php
index 58ad7f8..2313f1e 100644
--- a/src/Entity/PageVariant.php
+++ b/src/Entity/PageVariant.php
@@ -470,4 +470,15 @@ class PageVariant extends ConfigEntityBase implements PageVariantInterface {
     return $vars;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getPageTitle() {
+    $page_variant = $this->getVariantPlugin();
+    if (is_callable([$page_variant, 'getPageTitle'])) {
+      return $page_variant->getPageTitle();
+    }
+    return $this->getPage()->label();
+  }
+
 }
diff --git a/src/PageVariantInterface.php b/src/PageVariantInterface.php
index d0cd19a..199cf86 100644
--- a/src/PageVariantInterface.php
+++ b/src/PageVariantInterface.php
@@ -181,4 +181,11 @@ interface PageVariantInterface extends ConfigEntityInterface, EntityWithPluginCo
    */
   public function removeStaticContext($name);
 
+  /**
+   * Retrieves the variant page title.
+   *
+   * @return string
+   */
+  public function getPageTitle();
+
 }
diff --git a/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php b/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php
index 4b704d0..cb0de73 100644
--- a/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php
+++ b/src/Plugin/DisplayVariant/PageBlockDisplayVariant.php
@@ -336,4 +336,11 @@ class PageBlockDisplayVariant extends BlockDisplayVariant implements PluginWizar
     return $vars;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getPageTitle() {
+    return $this->renderPageTitle($this->configuration['page_title']);
+  }
+
 }
diff --git a/src/Routing/PageManagerRoutes.php b/src/Routing/PageManagerRoutes.php
index 793d3c8..39f0e06 100644
--- a/src/Routing/PageManagerRoutes.php
+++ b/src/Routing/PageManagerRoutes.php
@@ -96,7 +96,7 @@ class PageManagerRoutes extends RouteSubscriberBase {
           $path,
           [
             '_entity_view' => 'page_manager_page_variant',
-            '_title' => $entity->label(),
+            '_title_callback' => '\Drupal\page_manager\Controller\PageManagerController::pageTitle',
             'page_manager_page_variant' => $variant_id,
             'page_manager_page' => $page_id,
             'page_manager_page_variant_weight' => $variant->getWeight(),
diff --git a/tests/src/Unit/PageManagerRoutesTest.php b/tests/src/Unit/PageManagerRoutesTest.php
index fe6f005..cd95ce6 100644
--- a/tests/src/Unit/PageManagerRoutesTest.php
+++ b/tests/src/Unit/PageManagerRoutesTest.php
@@ -92,9 +92,6 @@ class PageManagerRoutesTest extends UnitTestCase {
     $variant1->getWeight()->willReturn(0);
     $page1->getVariants()
       ->willReturn(['variant1' => $variant1->reveal()]);
-    $page1->label()
-      ->willReturn('Page label')
-      ->shouldBeCalled();
     $page1->usesAdminTheme()
       ->willReturn(TRUE)
       ->shouldBeCalled();
@@ -130,7 +127,7 @@ class PageManagerRoutesTest extends UnitTestCase {
     $route = $collection->get('page_manager.page_view_page1');
     $expected_defaults = [
       '_entity_view' => 'page_manager_page_variant',
-      '_title' => 'Page label',
+      '_title_callback' => '\Drupal\page_manager\Controller\PageManagerController::pageTitle',
       'page_manager_page_variant' => 'variant1',
       'page_manager_page' => 'page1',
       'page_manager_page_variant_weight' => 0,
@@ -203,7 +200,7 @@ class PageManagerRoutesTest extends UnitTestCase {
     $route = $collection->get($route_name);
     $expected_defaults = [
       '_entity_view' => 'page_manager_page_variant',
-      '_title' => NULL,
+      '_title_callback' => '\Drupal\page_manager\Controller\PageManagerController::pageTitle',
       'page_manager_page_variant' => 'variant1',
       'page_manager_page' => 'page1',
       'page_manager_page_variant_weight' => 0,
@@ -276,7 +273,7 @@ class PageManagerRoutesTest extends UnitTestCase {
         'path' => '/test_route1',
         'defaults' => [
           '_entity_view' => 'page_manager_page_variant',
-          '_title' => 'Page 1',
+          '_title_callback' => '\Drupal\page_manager\Controller\PageManagerController::pageTitle',
           'page_manager_page_variant' => 'variant1',
           'page_manager_page' => 'page1',
           'page_manager_page_variant_weight' => 0,
@@ -303,7 +300,7 @@ class PageManagerRoutesTest extends UnitTestCase {
         'path' => '/test_route2',
         'defaults' => [
           '_entity_view' => 'page_manager_page_variant',
-          '_title' => 'Page 2',
+          '_title_callback' => '\Drupal\page_manager\Controller\PageManagerController::pageTitle',
           'page_manager_page_variant' => 'variant2',
           'page_manager_page' => 'page2',
           'page_manager_page_variant_weight' => 0,
@@ -364,7 +361,7 @@ class PageManagerRoutesTest extends UnitTestCase {
 
     $expected_defaults = [
       '_entity_view' => 'page_manager_page_variant',
-      '_title' => NULL,
+      '_title_callback' => '\Drupal\page_manager\Controller\PageManagerController::pageTitle',
       'page_manager_page_variant' => 'variant1',
       'page_manager_page' => 'page1',
       'page_manager_page_variant_weight' => 0,
