diff --git a/modules/search/search.extender.inc b/modules/search/search.extender.inc
index 6709466..bc4ae8a 100644
--- a/modules/search/search.extender.inc
+++ b/modules/search/search.extender.inc
@@ -437,6 +437,23 @@ class SearchQuery extends SelectQueryExtender {
   }
 
   /**
+   * @inheritdoc
+   */
+  public function preExecute(SelectQueryInterface $query = NULL) {
+    // Add a search_* tag. This needs to be added before any preExecute methods
+    // for decorated queries are called, as $THIS->prepared will be set to TRUE
+    // and tag will added in execute will never get used. For example, if $query
+    // is extended by 'SearchQuery' then 'PagerDefault'. The search specific
+    // tag will be added too late (when preExecute() has already been called
+    // from the PagerDefault extender), and as a consequence will not be
+    // available to hook_query_alter() implementations. Nor will the correct
+    // hook_query_TAG_alter() implementations get invoked.
+    // @ see node_search_execute()
+    $this->addTag('search_' . $this->type);
+    return $this->query->preExecute($query);
+  }
+
+  /**
    * Executes the search.
    *
    * If not already done, this executes the first pass query. Then the complex
@@ -494,9 +511,8 @@ class SearchQuery extends SelectQueryExtender {
       $this->orderBy('calculated_score', 'DESC');
     }
 
-    // Add tag and useful metadata.
+    // Add useful metadata.
     $this
-      ->addTag('search_' . $this->type)
       ->addMetaData('normalize', $this->normalize)
       ->fields('i', array('type', 'sid'));
 
