diff --git a/app/views/tags/show.html.haml b/app/views/tags/show.html.haml
index 4b4967a8f5..bce1b4aa4d 100644
--- a/app/views/tags/show.html.haml
+++ b/app/views/tags/show.html.haml
@@ -1,4 +1,6 @@
- content_for :header_tags do
+ %link{ rel: :alternate, type: 'application/rss+xml', href: tag_url(@tag) }/
+ %link{ rel: :alternate, type: 'application/activity+json', href: tag_url(@tag) }/
%meta{ name: 'robots', content: 'noindex' }/
= render partial: 'shared/og'
diff --git a/spec/requests/tags_spec.rb b/spec/requests/tags_spec.rb
index fbd1f7d56e..f04d1bc2d3 100644
--- a/spec/requests/tags_spec.rb
+++ b/spec/requests/tags_spec.rb
@@ -7,6 +7,29 @@ RSpec.describe 'Tags' do
context 'when tag exists' do
let(:tag) { Fabricate :tag }
+ context 'with HTML format' do
+ before { get tag_path(tag) }
+
+ it 'returns page with links to alternate resources' do
+ expect(rss_links.first[:href])
+ .to eq(tag_url(tag))
+ expect(activity_json_links.first[:href])
+ .to eq(tag_url(tag))
+ end
+
+ def rss_links
+ alternate_links.css('[type="application/rss+xml"]')
+ end
+
+ def activity_json_links
+ alternate_links.css('[type="application/activity+json"]')
+ end
+
+ def alternate_links
+ response.parsed_body.css('link[rel=alternate]')
+ end
+ end
+
context 'with JSON format' do
before { get tag_path(tag, format: :json) }