diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index 83140c1..f20f153 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -206,8 +206,9 @@ protected function findResults() {
     // Build matching conditions.
     $query = $this->database
       ->select('search_index', 'i', array('target' => 'replica'))
-      ->extend('Drupal\search\SearchQuery')
-      ->extend('Drupal\Core\Database\Query\PagerSelectExtender');
+      ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+      // Apply search extender last to run first to check ability to query.
+      ->extend('Drupal\search\SearchQuery');
     $query->join('node_field_data', 'n', 'n.nid = i.sid');
     $query->condition('n.status', 1)
       ->addTag('node_access')
diff --git a/core/modules/search/src/SearchQuery.php b/core/modules/search/src/SearchQuery.php
index de679c2..c70e517 100644
--- a/core/modules/search/src/SearchQuery.php
+++ b/core/modules/search/src/SearchQuery.php
@@ -11,6 +11,7 @@
 
 use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Database\Query\SelectExtender;
+use Drupal\Core\Database\Query\SelectInterface;
 use Drupal\Core\Database\StatementEmpty;
 
 /**
@@ -463,6 +464,21 @@ public function prepareAndNormalize() {
   }
 
   /**
+   * {@inhertidoc}
+   */
+  public function preExecute(SelectInterface $query = NULL) {
+    if (!$this->executedPrepare) {
+      $this->prepareAndNormalize();
+    }
+
+    if (!$this->normalize) {
+      return FALSE;
+    }
+
+    return parent::preExecute($query);
+  }
+
+  /**
    * Adds a custom score expression to the search query.
    *
    * Score expressions are used to order search results. If no calls to
@@ -521,9 +537,8 @@ public function addScore($score, $arguments = array(), $multiply = FALSE) {
   /**
    * Executes the search.
    *
-   * If not already done, this calls prepareAndNormalize() first. Then the
-   * complex conditions are applied to the query including score expressions
-   * and ordering.
+   * The complex conditions are applied to the query including score
+   * expressions and ordering.
    *
    * Error and warning conditions can apply. Call getStatus() after calling
    * this method to retrieve them.
@@ -532,14 +547,8 @@ public function addScore($score, $arguments = array(), $multiply = FALSE) {
    *   A query result set containing the results of the query.
    */
   public function execute() {
-
-    if (!$this->executedPrepare) {
-      $this->prepareAndNormalize();
-    }
-
-    if (!$this->normalize) {
-      // There were no keyword matches, so return an empty result set.
-      return new StatementEmpty();
+    if (!$this->preExecute($this)) {
+      return NULL;
     }
 
     // Add conditions to the query.
