diff --git a/ee/app/models/search/zoekt/node.rb b/ee/app/models/search/zoekt/node.rb
index d9d214735b501ded5abccfefaa2d5679070e7ead..f75d3ee9b0f9a05249da8480a40f96f4de030b1b 100644
--- a/ee/app/models/search/zoekt/node.rb
+++ b/ee/app/models/search/zoekt/node.rb
@@ -31,7 +31,7 @@ def self.find_or_initialize_by_task_request(params)
           # Note: if zoekt node makes task_request with a different `node.url`,
           # we will respect that and make change here.
           s.index_base_url = params.fetch("node.url")
-          s.search_base_url = params.fetch("node.url")
+          s.search_base_url = params['node.search_url'] || params.fetch("node.url")
 
           s.last_seen_at = Time.zone.now
           s.used_bytes = params.fetch("disk.used")
diff --git a/ee/spec/models/search/zoekt/node_spec.rb b/ee/spec/models/search/zoekt/node_spec.rb
index fb2b38f0754d7c2f5830ad1cd4cdb26d48f48f2c..c27499759b2a55ca8dfc0d1289943507f7ace56d 100644
--- a/ee/spec/models/search/zoekt/node_spec.rb
+++ b/ee/spec/models/search/zoekt/node_spec.rb
@@ -31,11 +31,11 @@
   end
 
   describe '.find_or_initialize_by_task_request', :freeze_time do
-    let(:params) do
+    let(:base_params) do
       {
         'uuid' => '3869fe21-36d1-4612-9676-0b783ef2dcd7',
         'node.name' => 'm1.local',
-        'node.url' => 'http://localhost:6090',
+        'node.url' => 'http://localhost:6080',
         'disk.all' => 994662584320,
         'disk.used' => 532673712128,
         'disk.free' => 461988872192
@@ -44,38 +44,52 @@
 
     subject(:tasked_node) { described_class.find_or_initialize_by_task_request(params) }
 
-    context 'when node does not exist for given UUID' do
-      it 'returns a new record with correct attributes' do
+    context 'when node.search_url is unset' do
+      let(:params) { base_params }
+
+      it 'returns a new record with correct base_urls' do
         expect(tasked_node).not_to be_persisted
         expect(tasked_node.index_base_url).to eq(params['node.url'])
         expect(tasked_node.search_base_url).to eq(params['node.url'])
-        expect(tasked_node.uuid).to eq(params['uuid'])
-        expect(tasked_node.last_seen_at).to eq(Time.zone.now)
-        expect(tasked_node.used_bytes).to eq(params['disk.used'])
-        expect(tasked_node.total_bytes).to eq(params['disk.all'])
-        expect(tasked_node.metadata['name']).to eq(params['node.name'])
       end
     end
 
-    context 'when node already exists for given UUID' do
-      it 'returns existing node and updates correct attributes' do
-        node.update!(uuid: params['uuid'])
+    context 'when node.search_url is set' do
+      let(:params) { base_params.merge('node.search_url' => 'http://localhost:6090') }
 
-        expect(tasked_node).to be_persisted
-        expect(tasked_node.id).to eq(node.id)
-        expect(tasked_node.index_base_url).to eq(params['node.url'])
-        expect(tasked_node.search_base_url).to eq(params['node.url'])
-        expect(tasked_node.uuid).to eq(params['uuid'])
-        expect(tasked_node.last_seen_at).to eq(Time.zone.now)
-        expect(tasked_node.used_bytes).to eq(params['disk.used'])
-        expect(tasked_node.total_bytes).to eq(params['disk.all'])
-        expect(tasked_node.metadata['name']).to eq(params['node.name'])
+      context 'when node does not exist for given UUID' do
+        it 'returns a new record with correct attributes' do
+          expect(tasked_node).not_to be_persisted
+          expect(tasked_node.index_base_url).to eq(params['node.url'])
+          expect(tasked_node.search_base_url).to eq(params['node.search_url'])
+          expect(tasked_node.uuid).to eq(params['uuid'])
+          expect(tasked_node.last_seen_at).to eq(Time.zone.now)
+          expect(tasked_node.used_bytes).to eq(params['disk.used'])
+          expect(tasked_node.total_bytes).to eq(params['disk.all'])
+          expect(tasked_node.metadata['name']).to eq(params['node.name'])
+        end
       end
 
-      it 'allows creation of another node with the same URL' do
-        node.update!(index_base_url: params['node.url'], search_base_url: params['node.url'])
+      context 'when node already exists for given UUID' do
+        it 'returns existing node and updates correct attributes' do
+          node.update!(uuid: params['uuid'])
+
+          expect(tasked_node).to be_persisted
+          expect(tasked_node.id).to eq(node.id)
+          expect(tasked_node.index_base_url).to eq(params['node.url'])
+          expect(tasked_node.search_base_url).to eq(params['node.search_url'])
+          expect(tasked_node.uuid).to eq(params['uuid'])
+          expect(tasked_node.last_seen_at).to eq(Time.zone.now)
+          expect(tasked_node.used_bytes).to eq(params['disk.used'])
+          expect(tasked_node.total_bytes).to eq(params['disk.all'])
+          expect(tasked_node.metadata['name']).to eq(params['node.name'])
+        end
+
+        it 'allows creation of another node with the same URL' do
+          node.update!(index_base_url: params['node.url'], search_base_url: params['node.url'])
 
-        expect(tasked_node.save).to eq(true)
+          expect(tasked_node.save).to eq(true)
+        end
       end
     end
   end