diff --git a/changelogs/unreleased/fj-49014-wiki-search-error.yml b/changelogs/unreleased/fj-49014-wiki-search-error.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a76805cb7f9e04c8ca56f6cd767f1c0538999bf1
--- /dev/null
+++ b/changelogs/unreleased/fj-49014-wiki-search-error.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed bug with invalid repository reference using the wiki search
+merge_request: 20722
+author:
+type: fixed
diff --git a/lib/gitlab/project_search_results.rb b/lib/gitlab/project_search_results.rb
index 38bdc61d8ab06922ba915dd1afe604946d3dd0e2..62f9e538c0443f98a04a2265deea8e8b938d2a4e 100644
--- a/lib/gitlab/project_search_results.rb
+++ b/lib/gitlab/project_search_results.rb
@@ -5,7 +5,7 @@ class ProjectSearchResults < SearchResults
     def initialize(current_user, project, query, repository_ref = nil, per_page: 20)
       @current_user = current_user
       @project = project
-      @repository_ref = repository_ref.presence || project.default_branch
+      @repository_ref = repository_ref.presence
       @query = query
       @per_page = per_page
     end
@@ -95,7 +95,7 @@ def single_commit_result?
     def blobs
       return [] unless Ability.allowed?(@current_user, :download_code, @project)
 
-      @blobs ||= Gitlab::FileFinder.new(project, repository_ref).find(query)
+      @blobs ||= Gitlab::FileFinder.new(project, repository_project_ref).find(query)
     end
 
     def wiki_blobs
@@ -103,11 +103,8 @@ def wiki_blobs
 
       @wiki_blobs ||= begin
         if project.wiki_enabled? && query.present?
-          project_wiki = ProjectWiki.new(project)
-
-          unless project_wiki.empty?
-            ref = repository_ref || project.wiki.default_branch
-            Gitlab::WikiFileFinder.new(project, ref).find(query)
+          unless project.wiki.empty?
+            Gitlab::WikiFileFinder.new(project, repository_wiki_ref).find(query)
           else
             []
           end
@@ -150,5 +147,13 @@ def find_commit_by_sha(query)
     def project_ids_relation
       project
     end
+
+    def repository_project_ref
+      @repository_project_ref ||= repository_ref || project.default_branch
+    end
+
+    def repository_wiki_ref
+      @repository_wiki_ref ||= repository_ref || project.wiki.default_branch
+    end
   end
 end
diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb
index 767a3092c73bcbfbf8036d0ff190582cdc9b4a78..4a0dc3686ec3f44b5b6bfe2199b6d67b03fd4470 100644
--- a/spec/lib/gitlab/project_search_results_spec.rb
+++ b/spec/lib/gitlab/project_search_results_spec.rb
@@ -64,6 +64,49 @@
     end
   end
 
+  shared_examples 'blob search repository ref' do |entity_type|
+    let(:query) { 'files' }
+    let(:file_finder) { double }
+    let(:project_branch) { 'project_branch' }
+
+    subject(:results) { described_class.new(user, project, query, repository_ref).objects(blob_type) }
+
+    before do
+      allow(entity).to receive(:default_branch).and_return(project_branch)
+      allow(file_finder).to receive(:find).and_return([])
+    end
+
+    context 'when repository_ref exists' do
+      let(:repository_ref) { 'ref_branch' }
+
+      it 'uses it' do
+        expect(Gitlab::FileFinder).to receive(:new).with(project, repository_ref).and_return(file_finder)
+
+        results
+      end
+    end
+
+    context 'when repository_ref is not present' do
+      let(:repository_ref) { nil }
+
+      it "uses #{entity_type} repository default reference" do
+        expect(Gitlab::FileFinder).to receive(:new).with(project, project_branch).and_return(file_finder)
+
+        results
+      end
+    end
+
+    context 'when repository_ref is blank' do
+      let(:repository_ref) { '' }
+
+      it "uses #{entity_type} repository default reference" do
+        expect(Gitlab::FileFinder).to receive(:new).with(project, project_branch).and_return(file_finder)
+
+        results
+      end
+    end
+  end
+
   describe 'blob search' do
     let(:project) { create(:project, :public, :repository) }
 
@@ -75,6 +118,11 @@
       let(:expected_file_by_content) { 'CHANGELOG' }
     end
 
+    it_behaves_like 'blob search repository ref', 'project' do
+      let(:blob_type) { 'blobs' }
+      let(:entity) { project }
+    end
+
     describe 'parsing results' do
       let(:results) { project.repository.search_files_by_content('feature', 'master') }
       let(:search_result) { results.first }
@@ -212,6 +260,11 @@
       let(:expected_file_by_name) { 'Files/Title.md' }
       let(:expected_file_by_content) { 'CHANGELOG.md' }
     end
+
+    it_behaves_like 'blob search repository ref', 'wiki' do
+      let(:blob_type) { 'wiki_blobs' }
+      let(:entity) { project.wiki }
+    end
   end
 
   it 'does not list issues on private projects' do