diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index b639a9dda3f754ebf8fe5d8b02ac55ff1cc1afc8..b9e7007f98ff0234fed684677897f3b30a4d19e6 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -191,17 +191,7 @@ def append_info_to_payload(payload)
 
     # Merging to :metadata will ensure these are logged as top level keys
     payload[:metadata] ||= {}
-    payload[:metadata]['meta.search.group_id'] = params[:group_id]
-    payload[:metadata]['meta.search.project_id'] = params[:project_id]
-    payload[:metadata]['meta.search.scope'] = params[:scope] || @scope
-    payload[:metadata]['meta.search.filters.confidential'] = params[:confidential]
-    payload[:metadata]['meta.search.filters.state'] = params[:state]
-    payload[:metadata]['meta.search.force_search_results'] = params[:force_search_results]
-    payload[:metadata]['meta.search.project_ids'] = params[:project_ids]
-    payload[:metadata]['meta.search.filters.language'] = params[:language]
-    payload[:metadata]['meta.search.type'] = @search_type if @search_type.present?
-    payload[:metadata]['meta.search.level'] = @search_level if @search_level.present?
-    payload[:metadata][:global_search_duration_s] = @global_search_duration_s if @global_search_duration_s.present?
+    payload[:metadata].merge!(payload_metadata)
 
     if search_service.abuse_detected?
       payload[:metadata]['abuse.confidence'] = Gitlab::Abuse.confidence(:certain)
@@ -209,6 +199,23 @@ def append_info_to_payload(payload)
     end
   end
 
+  def payload_metadata
+    {}.tap do |metadata|
+      metadata['meta.search.group_id'] = params[:group_id]
+      metadata['meta.search.project_id'] = params[:project_id]
+      metadata['meta.search.scope'] = params[:scope] || @scope
+      metadata['meta.search.page'] = params[:page] || '1'
+      metadata['meta.search.filters.confidential'] = params[:confidential]
+      metadata['meta.search.filters.state'] = params[:state]
+      metadata['meta.search.force_search_results'] = params[:force_search_results]
+      metadata['meta.search.project_ids'] = params[:project_ids]
+      metadata['meta.search.filters.language'] = params[:language]
+      metadata['meta.search.type'] = @search_type if @search_type.present?
+      metadata['meta.search.level'] = @search_level if @search_level.present?
+      metadata[:global_search_duration_s] = @global_search_duration_s if @global_search_duration_s.present?
+    end
+  end
+
   def block_anonymous_global_searches
     return unless search_service.global_search?
     return if current_user
diff --git a/spec/controllers/search_controller_spec.rb b/spec/controllers/search_controller_spec.rb
index 9453520341be0d187f09f7845df0db13bf6bf76e..82b7c1ba92746321beabb96fccf723bdca3ac204 100644
--- a/spec/controllers/search_controller_spec.rb
+++ b/spec/controllers/search_controller_spec.rb
@@ -583,12 +583,14 @@ def request
           expect(payload[:metadata]['meta.search.type']).to eq('basic')
           expect(payload[:metadata]['meta.search.level']).to eq('global')
           expect(payload[:metadata]['meta.search.filters.language']).to eq('ruby')
+          expect(payload[:metadata]['meta.search.page']).to eq('2')
         end
 
         get :show, params: {
           scope: 'issues',
           search: 'hello world',
           group_id: '123',
+          page: '2',
           project_id: '456',
           project_ids: %w[456 789],
           confidential: true,