diff --git a/app/finders/projects/topics_finder.rb b/app/finders/projects/topics_finder.rb
index 7c3abc27cf73105964cb33f8f06a90c4ee9009b4..c26b166a786c5135bd13d239a97ea5a0b048095b 100644
--- a/app/finders/projects/topics_finder.rb
+++ b/app/finders/projects/topics_finder.rb
@@ -12,7 +12,7 @@ def initialize(params: {})
     end
 
     def execute
-      topics = Projects::Topic.order_by_total_projects_count
+      topics = Projects::Topic.order_by_non_private_projects_count
       by_search(topics)
     end
 
diff --git a/app/graphql/resolvers/topics_resolver.rb b/app/graphql/resolvers/topics_resolver.rb
index d8199f3d89b32557306d096479693c635bcf366b..68e2ff692827e418214b7e57d0cc783df0112466 100644
--- a/app/graphql/resolvers/topics_resolver.rb
+++ b/app/graphql/resolvers/topics_resolver.rb
@@ -10,9 +10,9 @@ class TopicsResolver < BaseResolver
 
     def resolve(**args)
       if args[:search].present?
-        ::Projects::Topic.search(args[:search]).order_by_total_projects_count
+        ::Projects::Topic.search(args[:search]).order_by_non_private_projects_count
       else
-        ::Projects::Topic.order_by_total_projects_count
+        ::Projects::Topic.order_by_non_private_projects_count
       end
     end
   end
diff --git a/app/models/projects/topic.rb b/app/models/projects/topic.rb
index 78bc2df2e1ed337c42e68798db8568f48a9dcdf8..6f9732588c0ae334bb45c47e2240902fc537fbc7 100644
--- a/app/models/projects/topic.rb
+++ b/app/models/projects/topic.rb
@@ -13,12 +13,12 @@ class Topic < ApplicationRecord
     has_many :project_topics, class_name: 'Projects::ProjectTopic'
     has_many :projects, through: :project_topics
 
-    scope :order_by_total_projects_count, -> { order(total_projects_count: :desc).order(id: :asc) }
+    scope :order_by_non_private_projects_count, -> { order(non_private_projects_count: :desc).order(id: :asc) }
     scope :reorder_by_similarity, -> (search) do
       order_expression = Gitlab::Database::SimilarityScore.build_expression(search: search, rules: [
         { column: arel_table['name'] }
       ])
-      reorder(order_expression.desc, arel_table['total_projects_count'].desc, arel_table['id'])
+      reorder(order_expression.desc, arel_table['non_private_projects_count'].desc, arel_table['id'])
     end
 
     class << self
diff --git a/db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb b/db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb
new file mode 100644
index 0000000000000000000000000000000000000000..5ab8feb2195125aa108d02a69348c112ee5c37cc
--- /dev/null
+++ b/db/migrate/20220211090920_cleanup_populate_topics_non_private_projects_count.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class CleanupPopulateTopicsNonPrivateProjectsCount < Gitlab::Database::Migration[1.0]
+  MIGRATION = 'PopulateTopicsNonPrivateProjectsCount'
+
+  disable_ddl_transaction!
+
+  def up
+    finalize_background_migration(MIGRATION)
+  end
+
+  def down
+    # no-op
+  end
+end
diff --git a/db/schema_migrations/20220211090920 b/db/schema_migrations/20220211090920
new file mode 100644
index 0000000000000000000000000000000000000000..1f08b66e508392e1f5f36e4892c1cc25df29b2bf
--- /dev/null
+++ b/db/schema_migrations/20220211090920
@@ -0,0 +1 @@
+644d38e401ac8179777cb9d3c5fefca2fb55e0c409197bb2d222f7e96e5dd42f
\ No newline at end of file
diff --git a/spec/finders/projects/topics_finder_spec.rb b/spec/finders/projects/topics_finder_spec.rb
index 28802c5d49e55129988ed6772a70b69068690e99..3812f0757bcbc3ba2c58a9ca755dfabdab7f5c1e 100644
--- a/spec/finders/projects/topics_finder_spec.rb
+++ b/spec/finders/projects/topics_finder_spec.rb
@@ -9,9 +9,9 @@
   let!(:topic2) { create(:topic, name: 'topicC') }
   let!(:topic3) { create(:topic, name: 'topicA') }
 
-  let!(:project1) { create(:project, namespace: user.namespace, topic_list: 'topicC, topicA, topicB') }
-  let!(:project2) { create(:project, namespace: user.namespace, topic_list: 'topicC, topicA') }
-  let!(:project3) { create(:project, namespace: user.namespace, topic_list: 'topicC') }
+  let!(:project1) { create(:project, :public, namespace: user.namespace, topic_list: 'topicC, topicA, topicB') }
+  let!(:project2) { create(:project, :public, namespace: user.namespace, topic_list: 'topicC, topicA') }
+  let!(:project3) { create(:project, :public, namespace: user.namespace, topic_list: 'topicC') }
 
   describe '#execute' do
     it 'returns topics' do
diff --git a/spec/graphql/resolvers/topics_resolver_spec.rb b/spec/graphql/resolvers/topics_resolver_spec.rb
index 3ff1dabc927901a694a8eb6e8bd65f1db6a9489a..89f4583bce8882d728386773c2c08de435e58e73 100644
--- a/spec/graphql/resolvers/topics_resolver_spec.rb
+++ b/spec/graphql/resolvers/topics_resolver_spec.rb
@@ -6,9 +6,9 @@
   include GraphqlHelpers
 
   describe '#resolve' do
-    let!(:topic1) { create(:topic, name: 'GitLab', total_projects_count: 1) }
-    let!(:topic2) { create(:topic, name: 'git', total_projects_count: 2) }
-    let!(:topic3) { create(:topic, name: 'topic3', total_projects_count: 3) }
+    let!(:topic1) { create(:topic, name: 'GitLab', non_private_projects_count: 1) }
+    let!(:topic2) { create(:topic, name: 'git', non_private_projects_count: 2) }
+    let!(:topic3) { create(:topic, name: 'topic3', non_private_projects_count: 3) }
 
     it 'finds all topics' do
       expect(resolve_topics).to eq([topic3, topic2, topic1])
diff --git a/spec/models/projects/topic_spec.rb b/spec/models/projects/topic_spec.rb
index 397c65f4d5c53ed0efec0573963ecbc6859daf20..1915dbe9fcc302ae358741d8c0b2cf6927517dea 100644
--- a/spec/models/projects/topic_spec.rb
+++ b/spec/models/projects/topic_spec.rb
@@ -28,16 +28,16 @@
   end
 
   describe 'scopes' do
-    describe 'order_by_total_projects_count' do
+    describe 'order_by_non_private_projects_count' do
       let!(:topic1) { create(:topic, name: 'topicB') }
       let!(:topic2) { create(:topic, name: 'topicC') }
       let!(:topic3) { create(:topic, name: 'topicA') }
-      let!(:project1) { create(:project, topic_list: 'topicC, topicA, topicB') }
-      let!(:project2) { create(:project, topic_list: 'topicC, topicA') }
-      let!(:project3) { create(:project, topic_list: 'topicC') }
+      let!(:project1) { create(:project, :public, topic_list: 'topicC, topicA, topicB') }
+      let!(:project2) { create(:project, :public, topic_list: 'topicC, topicA') }
+      let!(:project3) { create(:project, :public, topic_list: 'topicC') }
 
-      it 'sorts topics by total_projects_count' do
-        topics = described_class.order_by_total_projects_count
+      it 'sorts topics by non_private_projects_count' do
+        topics = described_class.order_by_non_private_projects_count
 
         expect(topics.map(&:name)).to eq(%w[topicC topicA topicB topic])
       end
diff --git a/spec/requests/api/topics_spec.rb b/spec/requests/api/topics_spec.rb
index 70eee8a1af90e96afcff42e242bf0ffc9811a455..9c6b47300d0ec032072b5694fce37daf0a8cf60b 100644
--- a/spec/requests/api/topics_spec.rb
+++ b/spec/requests/api/topics_spec.rb
@@ -7,9 +7,9 @@
 
   let_it_be(:file) { fixture_file_upload('spec/fixtures/dk.png') }
 
-  let_it_be(:topic_1) { create(:topic, name: 'Git', total_projects_count: 1, avatar: file) }
-  let_it_be(:topic_2) { create(:topic, name: 'GitLab', total_projects_count: 2) }
-  let_it_be(:topic_3) { create(:topic, name: 'other-topic', total_projects_count: 3) }
+  let_it_be(:topic_1) { create(:topic, name: 'Git', total_projects_count: 1, non_private_projects_count: 1, avatar: file) }
+  let_it_be(:topic_2) { create(:topic, name: 'GitLab', total_projects_count: 2, non_private_projects_count: 2) }
+  let_it_be(:topic_3) { create(:topic, name: 'other-topic', total_projects_count: 3, non_private_projects_count: 3) }
 
   let_it_be(:admin) { create(:user, :admin) }
   let_it_be(:user) { create(:user) }