diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 6f06adc1ab22279027fdb75863e571737ad34a39..391daa176c002d8971410a8af4a6350f2f4e142e 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -15,6 +15,9 @@ def load_cron_jobs!
   end
 end
 
+# initialise migrated_shards on start-up to catch any malformed SIDEKIQ_MIGRATED_SHARD lists.
+Gitlab::SidekiqSharding::Router.migrated_shards
+
 # Custom Queues configuration
 #
 # We omit :command_builder since Sidekiq::RedisConnection performs a deep clone using
diff --git a/lib/gitlab/sidekiq_sharding/router.rb b/lib/gitlab/sidekiq_sharding/router.rb
index 3515f3e1e1fd966afa130f7491cebe5c651a1071..7a724e27b48a498a1133236374d8ca425a7816b6 100644
--- a/lib/gitlab/sidekiq_sharding/router.rb
+++ b/lib/gitlab/sidekiq_sharding/router.rb
@@ -38,11 +38,16 @@ def route(klass)
           end
         end
 
+        def migrated_shards
+          @migrated_shards ||= Set.new(Gitlab::Json.parse(ENV.fetch('SIDEKIQ_MIGRATED_SHARDS', '[]')))
+        end
+
         private
 
         def route_to(shard_name)
           # early return if main since we do not want a redundant feature flag check
           return shard_name if shard_name == Gitlab::Redis::Queues::SIDEKIQ_MAIN_SHARD_INSTANCE_NAME
+          return shard_name if migrated_shards.include?(shard_name)
 
           if shard_name.nil? ||
               Feature.disabled?(:"sidekiq_route_to_#{shard_name}", type: :worker, default_enabled_if_undefined: false)
diff --git a/spec/lib/gitlab/sidekiq_sharding/router_spec.rb b/spec/lib/gitlab/sidekiq_sharding/router_spec.rb
index a99b73f753ce76de7b106906b56d5edce84f74aa..8dba9f3b675087d30d1f7a1a1f662702953206d2 100644
--- a/spec/lib/gitlab/sidekiq_sharding/router_spec.rb
+++ b/spec/lib/gitlab/sidekiq_sharding/router_spec.rb
@@ -106,6 +106,25 @@
         end
       end
 
+      context 'when shard is migrated' do
+        before do
+          stub_env('SIDEKIQ_MIGRATED_SHARDS', "[\"queues_shard_test\"]")
+
+          if described_class.instance_variable_defined?(:@migrated_shards)
+            described_class.remove_instance_variable(:@migrated_shards)
+          end
+        end
+
+        it 'returns shard without checking feature flag' do
+          expect(Feature).not_to receive(:enabled?)
+
+          name, redis = get_test_shard
+
+          expect(name).to eq('queues_shard_test')
+          expect(redis).to eq(shard_sidekiq_redis)
+        end
+      end
+
       context 'when feature flag is enabled' do
         before do
           allow(Feature).to receive(:enabled?)