diff --git a/ee/lib/gitlab/zoekt/search_results.rb b/ee/lib/gitlab/zoekt/search_results.rb
index faa7abca96b48406684c31ff2c77cf368f241387..3524be41a87a0c4baeca47b13a9e1fc703e879a0 100644
--- a/ee/lib/gitlab/zoekt/search_results.rb
+++ b/ee/lib/gitlab/zoekt/search_results.rb
@@ -209,7 +209,7 @@ def zoekt_search_and_wrap(query, per_page:, page: 1, options: {}, preload_method
       end
 
       def yield_each_zoekt_search_result(response, preload_method, total_count)
-        return [[], total_count] if total_count == 0
+        return [[], total_count] if total_count == 0 || response.blank?
 
         project_ids = response.pluck(:project_id).uniq # rubocop:disable CodeReuse/ActiveRecord
         projects = Project.with_route.id_in(project_ids)
diff --git a/ee/spec/lib/gitlab/zoekt/search_results_spec.rb b/ee/spec/lib/gitlab/zoekt/search_results_spec.rb
index 2536190c6e2fbf25702a989f33f8ae1970d9063f..310f6dbfb410203e83c9d1028bba159f6ce3ba36 100644
--- a/ee/spec/lib/gitlab/zoekt/search_results_spec.rb
+++ b/ee/spec/lib/gitlab/zoekt/search_results_spec.rb
@@ -59,6 +59,13 @@
       expect(results.blobs_count).to eq 5
     end
 
+    it 'returns empty result when request is out of page range' do
+      results = described_class.new(user, 'use.*egex', limit_project_ids, node_id: node_id)
+      blobs_page = results.objects('blobs', page: 256, per_page: 2)
+
+      expect(blobs_page).to be_empty
+    end
+
     it 'limits to the zoekt count limit' do
       stub_const("#{described_class}::ZOEKT_COUNT_LIMIT", 2)