diff --git a/src/Display/DisplayInterface.php b/src/Display/DisplayInterface.php
index 2b6d8c52..99af31db 100644
--- a/src/Display/DisplayInterface.php
+++ b/src/Display/DisplayInterface.php
@@ -46,10 +46,23 @@ public function getIndex();
    *
    * @return \Drupal\Core\Url|null
    *   The URL of the display, or NULL if there is no specific URL for it.
+   *
+   * @deprecated in favor of getPath(). Creating an URL object from a path needs
+   *   a lot of Core's API which might lead to errors when used in certain
+   *   situations. This method will be removed in a future version of the Search
+   *   API module.
    */
   public function getUrl();
 
   /**
+   * Returns the base path used by this display.
+   *
+   * @return string|null
+   *   The base path for this display, or NULL if there is none.
+   */
+  public function getPath();
+
+  /**
    * Returns true if the display is being rendered in the current request.
    *
    * @return bool
diff --git a/src/Display/DisplayPluginBase.php b/src/Display/DisplayPluginBase.php
index f9553c46..a8f451bc 100644
--- a/src/Display/DisplayPluginBase.php
+++ b/src/Display/DisplayPluginBase.php
@@ -135,9 +135,19 @@ public function getIndex() {
    * {@inheritdoc}
    */
   public function getUrl() {
+    if ($path = $this->getPath()) {
+      return Url::fromUserInput($path);
+    }
+    return NULL;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPath() {
     $plugin_definition = $this->getPluginDefinition();
     if (!empty($plugin_definition['path'])) {
-      return Url::fromUserInput($plugin_definition['path']);
+      return $plugin_definition['path'];
     }
     return NULL;
   }
@@ -146,10 +156,9 @@ public function getUrl() {
    * {@inheritdoc}
    */
   public function isRenderedInCurrentRequest() {
-    $plugin_definition = $this->getPluginDefinition();
-    if (!empty($plugin_definition['path'])) {
+    if ($path = $this->getPath()) {
       $current_path = $this->getCurrentPath()->getPath();
-      return $current_path == $plugin_definition['path'];
+      return $current_path == $path;
     }
     return FALSE;
   }
diff --git a/src/Plugin/search_api/display/ViewsBlock.php b/src/Plugin/search_api/display/ViewsBlock.php
index 06493e70..1a1f0b6b 100644
--- a/src/Plugin/search_api/display/ViewsBlock.php
+++ b/src/Plugin/search_api/display/ViewsBlock.php
@@ -16,14 +16,6 @@ class ViewsBlock extends ViewsDisplayBase {
   /**
    * {@inheritdoc}
    */
-  public function getUrl() {
-    // Blocks don't have a path, so don't return one.
-    return NULL;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function isRenderedInCurrentRequest() {
     // There can be more than one block rendering the display. If any block is
     // rendered, we return TRUE.
diff --git a/src/Plugin/search_api/display/ViewsDisplayDeriver.php b/src/Plugin/search_api/display/ViewsDisplayDeriver.php
index 54edd247..36ae8326 100644
--- a/src/Plugin/search_api/display/ViewsDisplayDeriver.php
+++ b/src/Plugin/search_api/display/ViewsDisplayDeriver.php
@@ -110,7 +110,7 @@ protected function getDisplaysForView(array $base_plugin_definition, ViewEntityI
         ) + $base_plugin_definition;
 
         // Add the path information to the definition.
-        if ($display->getPath()) {
+        if ($display->hasPath()) {
           $plugin_derivatives[$machine_name]['path'] = '/' . $display->getPath();
         }
       }
diff --git a/tests/src/Functional/ViewsTest.php b/tests/src/Functional/ViewsTest.php
index 73f32282..5bcddde5 100644
--- a/tests/src/Functional/ViewsTest.php
+++ b/tests/src/Functional/ViewsTest.php
@@ -13,8 +13,8 @@
 use Drupal\Core\Url;
 use Drupal\entity_test\Entity\EntityTestMulRevChanged;
 use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\search_api\Display\DisplayInterface;
 use Drupal\search_api\Entity\Index;
-use Drupal\search_api\SearchApiException;
 use Drupal\search_api\Utility\Utility;
 
 /**
@@ -283,19 +283,21 @@ public function testView() {
     $this->checkResults($query, [], 'Search for results of no available datasource');
 
     // Make sure there was a display plugin created for this view.
-    $displays = \Drupal::getContainer()->get('plugin.manager.search_api.display')
+    /** @var \Drupal\search_api\Display\DisplayInterface[] $displays */
+    $displays = \Drupal::getContainer()
+      ->get('plugin.manager.search_api.display')
       ->getInstances();
 
-    if ($displays === []) {
-      throw new SearchApiException("No displays are loaded, tests will fail.");
-    }
-
     $display_id = 'views_page:search_api_test_view__page_1';
-    $this->assertTrue(array_key_exists($display_id, $displays), 'A display plugin was created for the test view page display.');
-    $this->assertTrue(array_key_exists('views_block:search_api_test_view__block_1', $displays), 'A display plugin was created for the test view block display.');
-    $this->assertTrue(array_key_exists('views_rest:search_api_test_view__rest_export_1', $displays), 'A display plugin was created for the test view block display.');
+    $this->assertArrayHasKey($display_id, $displays, 'A display plugin was created for the test view page display.');
+    $this->assertArrayHasKey('views_block:search_api_test_view__block_1', $displays, 'A display plugin was created for the test view block display.');
+    $this->assertArrayHasKey('views_rest:search_api_test_view__rest_export_1', $displays, 'A display plugin was created for the test view block display.');
+    $this->assertEquals('/search-api-test', $displays[$display_id]->getPath(), 'Display returns the correct path.');
     $view_url = Url::fromUserInput('/search-api-test')->toString();
-    $this->assertEquals($view_url, $displays[$display_id]->getUrl()->toString(), 'Display returns the correct path.');
+    $this->assertEquals($view_url, $displays[$display_id]->getUrl()->toString(), 'Display returns the correct URL.');
+    $this->assertNull($displays['views_block:search_api_test_view__block_1']->getPath(), 'Block display returns the correct path.');
+    $this->assertEquals('/search-api-rest-test', $displays['views_rest:search_api_test_view__rest_export_1']->getPath(), 'REST display returns the correct path.');
+
     $this->assertEquals('database_search_index', $displays[$display_id]->getIndex()->id(), 'Display returns the correct search index.');
 
     $admin_user = $this->drupalCreateUser([
@@ -312,11 +314,12 @@ public function testView() {
 
     drupal_flush_all_caches();
 
-    $displays = \Drupal::getContainer()->get('plugin.manager.search_api.display')
+    $displays = \Drupal::getContainer()
+      ->get('plugin.manager.search_api.display')
       ->getInstances();
-    $this->assertFalse(array_key_exists('views_page:search_api_test_view__page_1', $displays), 'A display plugin was created for the test view page display.');
-    $this->assertTrue(array_key_exists('views_block:search_api_test_view__block_1', $displays), 'A display plugin was created for the test view block display.');
-    $this->assertTrue(array_key_exists('views_rest:search_api_test_view__rest_export_1', $displays), 'A display plugin was created for the test view block display.');
+    $this->assertArrayNotHasKey('views_page:search_api_test_view__page_1', $displays, 'No display plugin was created for the test view page display.');
+    $this->assertArrayHasKey('views_block:search_api_test_view__block_1', $displays, 'A display plugin was created for the test view block display.');
+    $this->assertArrayHasKey('views_rest:search_api_test_view__rest_export_1', $displays, 'A display plugin was created for the test view block display.');
   }
 
   /**
