diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml
index 0ee3b89b62960efa260da3d1d9eb270f6032ec40..f9d49b36a68f60d5eacb2a18512adfe7c07e92bf 100644
--- a/app/views/projects/tags/_tag.html.haml
+++ b/app/views/projects/tags/_tag.html.haml
@@ -21,7 +21,7 @@
       .text-secondary
         = sprite_icon("rocket", size: 12)
         = _("Release")
-        = link_to release.name, project_releases_path(@project, anchor: release.tag), class: 'gl-text-blue-600!'
+        = link_to release.name, ::Feature.enabled?(:fix_release_path_in_tag_index_page, @project) ? project_release_path(@project, release) : project_releases_path(@project, anchor: release.tag), class: 'gl-text-blue-600!'
 
     - if tag.message.present?
       %pre.wrap
diff --git a/config/feature_flags/development/fix_release_path_in_tag_index_page.yml b/config/feature_flags/development/fix_release_path_in_tag_index_page.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2af6d391983a49a076256965a2159912b79d87c3
--- /dev/null
+++ b/config/feature_flags/development/fix_release_path_in_tag_index_page.yml
@@ -0,0 +1,8 @@
+---
+name: fix_release_path_in_tag_index_page
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87736
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/362915
+milestone: '15.1'
+type: development
+group: group::release
+default_enabled: false
diff --git a/spec/views/projects/tags/index.html.haml_spec.rb b/spec/views/projects/tags/index.html.haml_spec.rb
index ae59c1aa4b2c266dc7000cd70f64b29074cd4efb..3169199b56a4340dd788592c66ca9ef48a085052 100644
--- a/spec/views/projects/tags/index.html.haml_spec.rb
+++ b/spec/views/projects/tags/index.html.haml_spec.rb
@@ -4,7 +4,6 @@
 
 RSpec.describe 'projects/tags/index.html.haml' do
   let_it_be(:project)  { create(:project, :repository) }
-  let_it_be(:tags)     { project.repository.tags }
   let_it_be(:git_tag)  { project.repository.tags.last }
   let_it_be(:release)  do
     create(:release, project: project,
@@ -25,9 +24,41 @@
     allow(view).to receive(:current_user).and_return(project.namespace.owner)
   end
 
-  it 'renders links to the Releases page for tags associated with a release' do
-    render
-    expect(rendered).to have_link(release.name, href: project_releases_path(project, anchor: release.tag))
+  context 'when tag is associated with a release' do
+    context 'with feature flag disabled' do
+      before do
+        stub_feature_flags(fix_release_path_in_tag_index_page: false)
+      end
+
+      it 'renders a link to the release page with anchor' do
+        render
+        expect(rendered).to have_link(release.name, href: project_releases_path(project, anchor: release))
+      end
+    end
+
+    context 'with feature flag enabled' do
+      before do
+        stub_feature_flags(fix_release_path_in_tag_index_page: true)
+      end
+
+      context 'when name contains backslash' do
+        let_it_be(:release) { create(:release, project: project, tag: 'test/v1') }
+
+        before_all do
+          project.repository.add_tag(project.owner, 'test/v1', project.default_branch_or_main)
+          project.repository.expire_tags_cache
+
+          project.releases.reload
+
+          assign(:tags, Kaminari.paginate_array(tags).page(0))
+        end
+
+        it 'renders a link to the release page with backslash escaped' do
+          render
+          expect(rendered).to have_link(release.name, href: project_release_path(project, release))
+        end
+      end
+    end
   end
 
   context 'when the most recent build for a tag has artifacts' do
@@ -104,4 +135,8 @@
       )
     end
   end
+
+  def tags
+    project.repository.tags
+  end
 end