diff --git a/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php b/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
index 651e55e..b93bf6c 100644
--- a/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
+++ b/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSource.php
@@ -101,9 +101,9 @@ class CoreNodeSearchFacetSource extends FacetSourcePluginBase implements CoreSea
     $request = \Drupal::requestStack()->getMasterRequest();
     $search_page = $request->attributes->get('entity');
     if ($search_page instanceof SearchPageInterface) {
-      return 'search/' . $search_page->getPath();
+      return '/search/' . $search_page->getPath();
     }
-    return '';
+    return '/';
   }
 
   /**
diff --git a/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSourceDeriver.php b/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSourceDeriver.php
index 4f3c5ad..2c261d0 100644
--- a/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSourceDeriver.php
+++ b/core_search_facets/src/Plugin/facets/facet_source/CoreNodeSearchFacetSourceDeriver.php
@@ -16,7 +16,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Derives a facet source plugin definition for every Search API view.
  *
- * @see \Drupal\facets\Plugin\facets\facet_source\SearchApiViewsPage
+ * @see \Drupal\facets\Plugin\facets\facet_source\SearchApiViews
  */
 class CoreNodeSearchFacetSourceDeriver extends FacetSourceDeriverBase {
 
diff --git a/src/Form/FacetForm.php b/src/Form/FacetForm.php
index 7d45955..631340c 100644
--- a/src/Form/FacetForm.php
+++ b/src/Form/FacetForm.php
@@ -346,6 +346,8 @@ class FacetForm extends EntityForm {
       $view->setDisplay($display);
       $view->display_handler->overrideOption('cache', ['type' => 'none']);
       $view->save();
+
+      $display_plugin = $view->getDisplay()->getPluginId();
     }
 
     if ($is_new) {
@@ -354,6 +356,10 @@ class FacetForm extends EntityForm {
         drupal_set_message($message);
         $form_state->setRedirect('entity.facets_facet.display_form', ['facets_facet' => $facet->id()]);
       }
+
+      if (isset($view_id) && $display_plugin === 'block') {
+        $facet->setOnlyVisibleWhenFacetSourceIsVisible(FALSE);
+      }
     }
     else {
       drupal_set_message(t('Facet %name has been updated.', ['%name' => $facet->getName()]));
diff --git a/src/Plugin/facets/facet_source/SearchApiViewsPage.php b/src/Plugin/facets/facet_source/SearchApiViews.php
similarity index 68%
rename from src/Plugin/facets/facet_source/SearchApiViewsPage.php
rename to src/Plugin/facets/facet_source/SearchApiViews.php
index 26db1c0..40e2320 100644
--- a/src/Plugin/facets/facet_source/SearchApiViewsPage.php
+++ b/src/Plugin/facets/facet_source/SearchApiViews.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\facets\Plugin\facets\facet_source\SearchApiViewsPage.
+ * Contains \Drupal\facets\Plugin\facets\facet_source\SearchApiViews.
  */
 
 namespace Drupal\facets\Plugin\facets\facet_source;
@@ -11,18 +11,22 @@ use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\facets\FacetSource\SearchApiFacetSourceInterface;
 use Drupal\search_api\Plugin\views\query\SearchApiQuery;
 use Drupal\search_api\Query\ResultSetInterface;
+use Drupal\views\Entity\View;
 use Drupal\views\Views;
 
 
 /**
- * Represents a facet source which represents the Search API views.
+ * A facet source to support search api views.
+ *
+ * This facet source only supports views that have a search api index as a base,
+ * and only those displays that are a block or a page.
  *
  * @FacetsFacetSource(
  *   id = "search_api_views",
- *   deriver = "Drupal\facets\Plugin\facets\facet_source\SearchApiViewsPageDeriver"
+ *   deriver = "Drupal\facets\Plugin\facets\facet_source\SearchApiViewsDeriver"
  * )
  */
-class SearchApiViewsPage extends SearchApiBaseFacetSource implements SearchApiFacetSourceInterface {
+class SearchApiViews extends SearchApiBaseFacetSource implements SearchApiFacetSourceInterface {
 
   use DependencySerializationTrait;
 
@@ -81,9 +85,17 @@ class SearchApiViewsPage extends SearchApiBaseFacetSource implements SearchApiFa
    * {@inheritdoc}
    */
   public function getPath() {
-    $view = Views::getView($this->pluginDefinition['view_id']);
-    $view->setDisplay($this->pluginDefinition['view_display']);
-    return $view->getDisplay()->getPath();
+    $display = View::load($this->pluginDefinition['view_id'])->getDisplay($this->pluginDefinition['view_display']);
+    switch ($display['display_plugin']) {
+      case 'page':
+        $view = Views::getView($this->pluginDefinition['view_id']);
+        $view->setDisplay($this->pluginDefinition['view_display']);
+        return '/' . $view->getDisplay()->getPath();
+
+      case 'block':
+      default:
+        return \Drupal::service('path.current')->getPath();
+    }
   }
 
   /**
@@ -129,13 +141,25 @@ class SearchApiViewsPage extends SearchApiBaseFacetSource implements SearchApiFa
    * {@inheritdoc}
    */
   public function isRenderedInCurrentRequest() {
-    $request = \Drupal::requestStack()->getMasterRequest();
-    if ($request->attributes->get('_controller') === 'Drupal\views\Routing\ViewPageController::handle') {
-      list(, $search_api_view_id, $search_api_view_display) = explode(':', $this->getPluginId());
-
-      if ($request->attributes->get('view_id') == $search_api_view_id && $request->attributes->get('display_id') == $search_api_view_display) {
-        return TRUE;
-      }
+    $display = View::load($this->pluginDefinition['view_id'])->getDisplay($this->pluginDefinition['view_display']);
+    switch ($display['display_plugin']) {
+      case 'page':
+        $request = \Drupal::requestStack()->getMasterRequest();
+        if ($request->attributes->get('_controller') === 'Drupal\views\Routing\ViewPageController::handle') {
+          list(, $search_api_view_id, $search_api_view_display) = explode(':', $this->getPluginId());
+
+          if ($request->attributes->get('view_id') == $search_api_view_id && $request->attributes->get('display_id') == $search_api_view_display) {
+            return TRUE;
+          }
+        }
+        return FALSE;
+
+      case 'block':
+        // There is no way to know if a block is embedded on a page, because
+        // blocks can be rendered in isolation (see big_pipe, esi, ...). To be
+        // sure we're not disclosing information we're not sure about, we always
+        // return false.
+        return FALSE;
     }
     return FALSE;
   }
diff --git a/src/Plugin/facets/facet_source/SearchApiViewsPageDeriver.php b/src/Plugin/facets/facet_source/SearchApiViewsDeriver.php
similarity index 68%
rename from src/Plugin/facets/facet_source/SearchApiViewsPageDeriver.php
rename to src/Plugin/facets/facet_source/SearchApiViewsDeriver.php
index 156d02a..c2053ca 100644
--- a/src/Plugin/facets/facet_source/SearchApiViewsPageDeriver.php
+++ b/src/Plugin/facets/facet_source/SearchApiViewsDeriver.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\facets\Plugin\facets\facet_source\SearchApiViewsPageDeriver.
+ * Contains \Drupal\facets\Plugin\facets\facet_source\SearchApiViewsDeriver.
  */
 
 namespace Drupal\facets\Plugin\facets\facet_source;
@@ -14,9 +14,12 @@ use Drupal\facets\FacetSource\FacetSourceDeriverBase;
 /**
  * Derives a facet source plugin definition for every Search API view.
  *
- * @see \Drupal\facets\Plugin\facets\facet_source\SearchApiViewsPage
+ * This facet source only supports views that have a search api index as a base,
+ * and only those displays that are a block or a page.
+ *
+ * @see \Drupal\facets\Plugin\facets\facet_source\SearchApiViews
  */
-class SearchApiViewsPageDeriver extends FacetSourceDeriverBase {
+class SearchApiViewsDeriver extends FacetSourceDeriverBase {
 
   /**
    * {@inheritdoc}
@@ -41,16 +44,27 @@ class SearchApiViewsPageDeriver extends FacetSourceDeriverBase {
         // Hardcoded usage of Search API views, for now.
         if (strpos($view->get('base_table'), 'search_api_index') !== FALSE) {
           $displays = $view->get('display');
-          foreach ($displays as $name => $display_info) {
-            if ($display_info['display_plugin'] == "page") {
-              $machine_name = $view->id() . PluginBase::DERIVATIVE_SEPARATOR . $name;
+          foreach ($displays as $display_id => $display_info) {
+
+            // We only support pages and blocks because those are the ones that
+            // we've tested. They are also the only ones that support for
+            // ::isRenderedInCurrentRequest() and ::getPath().
+            if (in_array($display_info['display_plugin'], ['page', 'block'])) {
+              $machine_name = $view->id() . PluginBase::DERIVATIVE_SEPARATOR . $display_id;
 
+              $label_arguments = [
+                '%view_name' => $view->label(),
+                '%display_title' => $display_info['display_title'],
+                '%display_type' => $display_info['display_plugin'],
+              ];
               $plugin_derivatives[$machine_name] = [
                 'id' => $base_plugin_id . PluginBase::DERIVATIVE_SEPARATOR . $machine_name,
-                'label' => $this->t('Search API view: %view_name, display: %display_title', ['%view_name' => $view->label(), '%display_title' => $display_info['display_title']]),
+                'label' => $this->t('Search API view: %view_name, display: %display_title (%display_type)',
+                  $label_arguments
+                ),
                 'description' => $this->t('Provides a facet source.'),
                 'view_id' => $view->id(),
-                'view_display' => $name,
+                'view_display' => $display_id,
               ] + $base_plugin_definition;
 
               $sources[] = $this->t(
diff --git a/src/Plugin/facets/url_processor/QueryString.php b/src/Plugin/facets/url_processor/QueryString.php
index d2ac255..19fbb58 100644
--- a/src/Plugin/facets/url_processor/QueryString.php
+++ b/src/Plugin/facets/url_processor/QueryString.php
@@ -68,7 +68,7 @@ class QueryString extends UrlProcessorPluginBase {
 
     $request = $this->request;
     if ($facet->getFacetSource()->getPath()) {
-      $request = Request::create('/' . $facet->getFacetSource()->getPath());
+      $request = Request::create($facet->getFacetSource()->getPath());
     }
     $url = Url::createFromRequest($request);
     $url->setOption('attributes', ['rel' => 'nofollow']);
diff --git a/src/Tests/IntegrationTest.php b/src/Tests/IntegrationTest.php
index aca0486..4fab8b9 100644
--- a/src/Tests/IntegrationTest.php
+++ b/src/Tests/IntegrationTest.php
@@ -93,7 +93,7 @@ class IntegrationTest extends FacetWebTestBase {
     $this->assertFacetBlocksAppear();
 
     // Show the facet only when the facet source is visible.
-    // @TODO Only for SearchApiViewsPage for the moment.
+    // @TODO Only for SearchApiViews for the moment.
     $this->setOptionShowOnlyWhenFacetSourceVisible($facet_name);
     $this->goToDeleteFacetPage($facet_name);
     $this->assertNoText('item');
@@ -123,6 +123,54 @@ class IntegrationTest extends FacetWebTestBase {
   }
 
   /**
+   * Tests that a block view also works.
+   */
+  public function testBlockView() {
+    $facet_name = "Block view facet";
+    $facet_id = 'bvf';
+
+    // Add a new facet.
+    $facet_add_page = '/admin/config/search/facets/add-facet';
+    $this->drupalGet($facet_add_page);
+
+    $form_values = [
+      'id' => $facet_id,
+      'status' => 1,
+      'url_alias' => $facet_id,
+      'name' => $facet_name,
+      'weight' => 2,
+      'facet_source_id' => 'search_api_views:search_api_test_view:block_1',
+      'facet_source_configs[search_api_views:search_api_test_view:block_1][field_identifier]' => 'type',
+    ];
+    $this->drupalPostForm(NULL, ['facet_source_id' => 'search_api_views:search_api_test_view:block_1'], $this->t('Configure facet source'));
+    $this->drupalPostForm(NULL, $form_values, $this->t('Save'));
+
+    // Place the views block in the footer of all pages.
+    $block_settings = [
+      'region' => 'footer',
+      'id' => 'view_block',
+    ];
+    $this->drupalPlaceBlock('views_block:search_api_test_view-block_1', $block_settings);
+
+    // By default, the view should show all entities.
+    $this->drupalGet('<front>');
+    $this->assertText('Displaying 5 search results', 'The search view displays the correct number of results.');
+    $this->assertText('Fulltext test index', 'The search view displays the correct number of results.');
+
+    // Create and place a block for the test facet.
+    $this->createFacetBlock($facet_id);
+
+    // Verify that the facet results are correct displayed.
+    $this->drupalGet('<front>');
+    $this->assertText('item');
+    $this->assertText('article');
+
+    // Click the item link, and test that filtering of results actually works.
+    $this->clickLink('item');
+    $this->assertText('Displaying 3 search results', 'The search view displays the correct number of results.');
+  }
+
+  /**
    * Tests renaming of a facet.
    *
    * @see https://www.drupal.org/node/2629504
@@ -582,6 +630,10 @@ class IntegrationTest extends FacetWebTestBase {
     // The list overview has Field: field_name as description. This tests on the
     // absence of that.
     $this->assertNoText('Field:');
+
+    // Check that the expected facet sources are shown.
+    $this->assertText('search_api_views:search_api_test_view:block_1');
+    $this->assertText('search_api_views:search_api_test_view:page_1');
   }
 
   /**
diff --git a/src/Tests/UrlIntegrationTest.php b/src/Tests/UrlIntegrationTest.php
index 2fc6010..ce085af 100644
--- a/src/Tests/UrlIntegrationTest.php
+++ b/src/Tests/UrlIntegrationTest.php
@@ -93,7 +93,7 @@ class UrlIntegrationTest extends FacetWebTestBase {
 
     // Go to the only enabled facet source's config and change the filter key.
     $this->drupalGet('admin/config/search/facets');
-    $this->clickLink($this->t('Configure'));
+    $this->clickLink($this->t('Configure'), 1);
 
     $edit = [
       'filter_key' => 'y',
@@ -116,7 +116,7 @@ class UrlIntegrationTest extends FacetWebTestBase {
     // Go to the only enabled facet source's config and change the url
     // processor.
     $this->drupalGet('admin/config/search/facets');
-    $this->clickLink($this->t('Configure'));
+    $this->clickLink($this->t('Configure'), 1);
 
     $edit = [
       'filter_key' => 'y',
diff --git a/src/UrlProcessor/UrlProcessorPluginBase.php b/src/UrlProcessor/UrlProcessorPluginBase.php
index f42d235..92f2ab1 100644
--- a/src/UrlProcessor/UrlProcessorPluginBase.php
+++ b/src/UrlProcessor/UrlProcessorPluginBase.php
@@ -73,8 +73,8 @@ abstract class UrlProcessorPluginBase extends ProcessorPluginBase implements Url
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    /** @var Request $request */
-    $request = $container->get('request_stack')->getCurrentRequest();
+    /** @var \Symfony\Component\HttpFoundation\Request $request */
+    $request = $container->get('request_stack')->getMasterRequest();
     return new static($configuration, $plugin_id, $plugin_definition, $request);
   }
 
diff --git a/tests/facets_query_processor/src/Plugin/facets/url_processor/DummyQuery.php b/tests/facets_query_processor/src/Plugin/facets/url_processor/DummyQuery.php
index bc17ce2..35700c5 100644
--- a/tests/facets_query_processor/src/Plugin/facets/url_processor/DummyQuery.php
+++ b/tests/facets_query_processor/src/Plugin/facets/url_processor/DummyQuery.php
@@ -89,7 +89,7 @@ class DummyQuery extends UrlProcessorPluginBase {
       $result_get_params->set($this->filterKey, $filter_params);
       $request = $this->request;
       if ($facet->getFacetSource()->getPath()) {
-        $request = Request::create('/' . $facet->getFacetSource()->getPath());
+        $request = Request::create($facet->getFacetSource()->getPath());
       }
       $url = Url::createFromRequest($request);
       $url->setOption('query', $result_get_params->all());
diff --git a/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml b/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml
index 976a8d8..2ee43bc 100644
--- a/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml
+++ b/tests/facets_search_api_dependency/config/install/views.view.search_api_test_views_fulltext.yml
@@ -187,6 +187,13 @@ display:
     position: 1
     display_options:
       path: search-api-test-fulltext
+  block_1:
+    display_plugin: block
+    id: block_1
+    display_title: Block
+    position: 2
+    display_options:
+      display_extenders: {  }
 label: 'Search API Test Fulltext search view'
 module: views
 id: search_api_test_view
