diff --git a/CHANGELOG b/CHANGELOG
index 463b07b635e77a8f90696a660fabad78b3ceada1..1c5a004501a631f84f0f7fea98a3b2488040473e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -6,6 +6,7 @@ v 8.13.0 (unreleased)
 
 v 8.12.2 (unreleased)
   - Fix Import/Export not recognising correctly the imported services.
+  - Fix snippets pagination
 
 v 8.12.1
   - Fix a memory leak in HTML::Pipeline::SanitizationFilter::WHITELIST
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index a4bedb3bfe6f71b51c336a25c7fb2db16745b9e9..838ecc837e4f0ea6ad0ca09ae8696c5c15e61b0e 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -65,7 +65,7 @@ class UsersController < ApplicationController
       format.html { render 'show' }
       format.json do
         render json: {
-          html: view_to_html_string("snippets/_snippets", collection: @snippets)
+          html: view_to_html_string("snippets/_snippets", collection: @snippets, remote: true)
         }
       end
     end
diff --git a/app/views/snippets/_snippets.html.haml b/app/views/snippets/_snippets.html.haml
index 7be4a471579190ffad6abff67dc66fdc6aadffad..77b66ca74b6385ac55c3b9d8dc22e4d2c41beb21 100644
--- a/app/views/snippets/_snippets.html.haml
+++ b/app/views/snippets/_snippets.html.haml
@@ -1,3 +1,5 @@
+- remote = local_assigns.fetch(:remote, false)
+
 .snippets-list-holder
   %ul.content-list
     = render partial: 'shared/snippets/snippet', collection: @snippets
@@ -5,7 +7,7 @@
       %li
         .nothing-here-block Nothing here.
 
-  = paginate @snippets, theme: 'gitlab', remote: true
+  = paginate @snippets, theme: 'gitlab', remote: remote
 
 :javascript
   gl.SnippetsList();
diff --git a/spec/features/dashboard/snippets_spec.rb b/spec/features/dashboard/snippets_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..62937688c2273aaed5099b5cf7735a60bf29f191
--- /dev/null
+++ b/spec/features/dashboard/snippets_spec.rb
@@ -0,0 +1,15 @@
+require 'spec_helper'
+
+describe 'Dashboard snippets', feature: true do
+  context 'when the project has snippets' do
+    let(:project) { create(:empty_project, :public) }
+    let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
+    before do
+      allow(Snippet).to receive(:default_per_page).and_return(1)
+      login_as(project.owner)
+      visit dashboard_snippets_path
+    end
+
+    it_behaves_like 'paginated snippets'
+  end
+end
diff --git a/spec/features/projects/snippets_spec.rb b/spec/features/projects/snippets_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..d37e8ed4699e099a0d13d12ae9080d10cc640759
--- /dev/null
+++ b/spec/features/projects/snippets_spec.rb
@@ -0,0 +1,14 @@
+require 'spec_helper'
+
+describe 'Project snippets', feature: true do
+  context 'when the project has snippets' do
+    let(:project) { create(:empty_project, :public) }
+    let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
+    before do
+      allow(Snippet).to receive(:default_per_page).and_return(1)
+      visit namespace_project_snippets_path(project.namespace, project)
+    end
+
+    it_behaves_like 'paginated snippets'
+  end
+end
diff --git a/spec/features/snippets_spec.rb b/spec/features/snippets_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..70b16bfc810e55b51905744a9d1a5b034b9cdb10
--- /dev/null
+++ b/spec/features/snippets_spec.rb
@@ -0,0 +1,14 @@
+require 'spec_helper'
+
+describe 'Snippets', feature: true do
+  context 'when the project has snippets' do
+    let(:project) { create(:empty_project, :public) }
+    let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
+    before do
+      allow(Snippet).to receive(:default_per_page).and_return(1)
+      visit snippets_path(username: project.owner.username)
+    end
+
+    it_behaves_like 'paginated snippets'
+  end
+end
diff --git a/spec/features/users/snippets_spec.rb b/spec/features/users/snippets_spec.rb
index f00abd82fea72b844dac859160bfd77ffd955496..ce7e809ec768ff183598a9471006489bab57de43 100644
--- a/spec/features/users/snippets_spec.rb
+++ b/spec/features/users/snippets_spec.rb
@@ -3,30 +3,16 @@ require 'spec_helper'
 describe 'Snippets tab on a user profile', feature: true, js: true do
   include WaitForAjax
 
-  let(:user) { create(:user) }
-
   context 'when the user has snippets' do
+    let(:user) { create(:user) }
+    let!(:snippets) { create_list(:snippet, 2, :public, author: user) }
     before do
-      create_list(:snippet, 25, :public, author: user)
-
+      allow(Snippet).to receive(:default_per_page).and_return(1)
       visit user_path(user)
       page.within('.user-profile-nav') { click_link 'Snippets' }
       wait_for_ajax
     end
 
-    it 'is limited to 20 items per page' do
-      expect(page.all('.snippets-list-holder .snippet-row').count).to eq(20)
-    end
-
-    context 'clicking on the link to the second page' do
-      before do
-        click_link('2')
-        wait_for_ajax
-      end
-
-      it 'shows the remaining snippets' do
-        expect(page.all('.snippets-list-holder .snippet-row').count).to eq(5)
-      end
-    end
+    it_behaves_like 'paginated snippets', remote: true
   end
 end
diff --git a/spec/support/snippets_shared_examples.rb b/spec/support/snippets_shared_examples.rb
new file mode 100644
index 0000000000000000000000000000000000000000..57dfff3471ffca60c6066c4463b8e2cf80af68cc
--- /dev/null
+++ b/spec/support/snippets_shared_examples.rb
@@ -0,0 +1,18 @@
+# These shared examples expect a `snippets` array of snippets
+RSpec.shared_examples 'paginated snippets' do |remote: false|
+  it "is limited to #{Snippet.default_per_page} items per page" do
+    expect(page.all('.snippets-list-holder .snippet-row').count).to eq(Snippet.default_per_page)
+  end
+
+  context 'clicking on the link to the second page' do
+    before do
+      click_link('2')
+      wait_for_ajax if remote
+    end
+
+    it 'shows the remaining snippets' do
+      remaining_snippets_count = [snippets.size - Snippet.default_per_page, Snippet.default_per_page].min
+      expect(page).to have_selector('.snippets-list-holder .snippet-row', count: remaining_snippets_count)
+    end
+  end
+end