diff --git a/app/services/projects/update_pages_service.rb b/app/services/projects/update_pages_service.rb
index 96cb9425c2500a1ee0320f5f12b299c5b2ff1289..ee2d9ddfef665a5207757ac1ae21922c1188ea94 100644
--- a/app/services/projects/update_pages_service.rb
+++ b/app/services/projects/update_pages_service.rb
@@ -2,6 +2,7 @@
 
 module Projects
   class UpdatePagesService < BaseService
+    include Gitlab::InternalEventsTracking
     include Gitlab::Utils::StrongMemoize
 
     # old deployment can be cached by pages daemon
@@ -33,6 +34,22 @@ def execute
         break error('The uploaded artifact size does not match the expected value') unless deployment
         break error(deployment_validations.errors.first.full_message) unless deployment_validations.valid?
 
+        track_internal_event(
+          'create_pages_deployment',
+          project: project,
+          namespace: project.namespace,
+          user: build.user
+        )
+
+        if deployment.path_prefix.present?
+          track_internal_event(
+            'create_pages_extra_deployment',
+            project: project,
+            namespace: project.namespace,
+            user: build.user
+          )
+        end
+
         deactive_old_deployments(deployment)
         success
       end
diff --git a/config/events/create_pages_deployment.yml b/config/events/create_pages_deployment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d375c35a4aeaa217f70db81cceb936b613384e84
--- /dev/null
+++ b/config/events/create_pages_deployment.yml
@@ -0,0 +1,18 @@
+---
+description: GitLab Pages deployment created
+internal_events: true
+action: create_pages_deployment
+identifiers:
+- project
+- namespace
+- user
+product_group: knowledge
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+distributions:
+- ce
+- ee
+tiers:
+- free
+- premium
+- ultimate
diff --git a/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_deployment_monthly.yml b/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_deployment_monthly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6063f68dd9be0b8088047edbd860bf9ac4fd6c7e
--- /dev/null
+++ b/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_deployment_monthly.yml
@@ -0,0 +1,22 @@
+---
+key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_deployment_monthly
+description: Monthly count of unique projects where a Pages deployment was created
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 28d
+data_source: internal_events
+data_category: optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+events:
+- name: create_pages_deployment
+  unique: project.id
diff --git a/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_deployment_monthly.yml b/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_deployment_monthly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..90d5fac153582939e2332ba9b29b322b44b9d232
--- /dev/null
+++ b/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_deployment_monthly.yml
@@ -0,0 +1,22 @@
+---
+key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_deployment_monthly
+description: Monthly count of unique users who created a Pages deployment
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 28d
+data_source: internal_events
+data_category: optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+events:
+- name: create_pages_deployment
+  unique: user.id
diff --git a/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_deployment_weekly.yml b/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_deployment_weekly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..93e5f5f92f0170a52d1f0f46a961b33fc1ac7549
--- /dev/null
+++ b/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_deployment_weekly.yml
@@ -0,0 +1,22 @@
+---
+key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_deployment_weekly
+description: Weekly count of unique projects where a Pages deployment was created
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 7d
+data_source: internal_events
+data_category: optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+events:
+- name: create_pages_deployment
+  unique: project.id
diff --git a/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_deployment_weekly.yml b/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_deployment_weekly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c994603fec8ea1a9ec44dd35f00168eed59415c0
--- /dev/null
+++ b/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_deployment_weekly.yml
@@ -0,0 +1,22 @@
+---
+key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_deployment_weekly
+description: Weekly count of unique users who created a Pages deployment
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 7d
+data_source: internal_events
+data_category: optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+events:
+- name: create_pages_deployment
+  unique: user.id
diff --git a/config/metrics/counts_all/count_total_create_pages_deployment.yml b/config/metrics/counts_all/count_total_create_pages_deployment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..6206231924bcffb86762aaad383b0b252dfe948d
--- /dev/null
+++ b/config/metrics/counts_all/count_total_create_pages_deployment.yml
@@ -0,0 +1,21 @@
+---
+key_path: counts.count_total_create_pages_deployment
+description: Total count of Pages deployments created
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: all
+data_source: internal_events
+data_category: optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+events:
+- name: create_pages_deployment
diff --git a/ee/config/events/create_pages_extra_deployment.yml b/ee/config/events/create_pages_extra_deployment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c34d7158bfdc06d84833b87f2341f8cb15c07516
--- /dev/null
+++ b/ee/config/events/create_pages_extra_deployment.yml
@@ -0,0 +1,16 @@
+---
+description: Gitlab Pages extra deployments created
+internal_events: true
+action: create_pages_extra_deployment
+identifiers:
+- project
+- namespace
+- user
+product_group: knowledge
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+distributions:
+- ee
+tiers:
+- premium
+- ultimate
diff --git a/ee/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_extra_deployment_monthly.yml b/ee/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_extra_deployment_monthly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ce118bc30f2c0cad373b34601ca9684d6a74291f
--- /dev/null
+++ b/ee/config/metrics/counts_28d/count_distinct_project_id_from_create_pages_extra_deployment_monthly.yml
@@ -0,0 +1,20 @@
+---
+key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_extra_deployment_monthly
+description: Monthly count of unique projects where a Pages extra deployment was created
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 28d
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- premium
+- ultimate
+events:
+- name: create_pages_extra_deployment
+  unique: project.id
diff --git a/ee/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_extra_deployment_monthly.yml b/ee/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_extra_deployment_monthly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1aa8dcd81fb106f81f0104ea0ee4fa0e03af5365
--- /dev/null
+++ b/ee/config/metrics/counts_28d/count_distinct_user_id_from_create_pages_extra_deployment_monthly.yml
@@ -0,0 +1,20 @@
+---
+key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_extra_deployment_monthly
+description: Monthly count of unique users who created a Gitlab Pages extra deployment
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 28d
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- premium
+- ultimate
+events:
+- name: create_pages_extra_deployment
+  unique: user.id
diff --git a/ee/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_extra_deployment_weekly.yml b/ee/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_extra_deployment_weekly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..e0edc93634477ca09bc2ac20b525409d7f4705f5
--- /dev/null
+++ b/ee/config/metrics/counts_7d/count_distinct_project_id_from_create_pages_extra_deployment_weekly.yml
@@ -0,0 +1,20 @@
+---
+key_path: redis_hll_counters.count_distinct_project_id_from_create_pages_extra_deployment_weekly
+description: Weekly count of unique projects where a Pages extra deployment was created
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 7d
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- premium
+- ultimate
+events:
+- name: create_pages_extra_deployment
+  unique: project.id
diff --git a/ee/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_extra_deployment_weekly.yml b/ee/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_extra_deployment_weekly.yml
new file mode 100644
index 0000000000000000000000000000000000000000..4ae61844974f58379e4528ac9d14c85780c8d94e
--- /dev/null
+++ b/ee/config/metrics/counts_7d/count_distinct_user_id_from_create_pages_extra_deployment_weekly.yml
@@ -0,0 +1,20 @@
+---
+key_path: redis_hll_counters.count_distinct_user_id_from_create_pages_extra_deployment_weekly
+description: Weekly count of unique users who created a Gitlab Pages multiple deployment
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: 7d
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- premium
+- ultimate
+events:
+- name: create_pages_extra_deployment
+  unique: user.id
diff --git a/ee/config/metrics/counts_all/count_total_create_pages_extra_deployment.yml b/ee/config/metrics/counts_all/count_total_create_pages_extra_deployment.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7c940300a622bc857aa64d41e95902804248ea3c
--- /dev/null
+++ b/ee/config/metrics/counts_all/count_total_create_pages_extra_deployment.yml
@@ -0,0 +1,19 @@
+---
+key_path: counts.count_total_create_pages_extra_deployment
+description: Total count of Pages extra deployments created
+product_group: knowledge
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.2'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/157474
+time_frame: all
+data_source: internal_events
+data_category: optional
+distribution:
+- ee
+tier:
+- premium
+- ultimate
+events:
+- name: create_pages_extra_deployment
diff --git a/ee/spec/services/ee/projects/update_pages_service_spec.rb b/ee/spec/services/ee/projects/update_pages_service_spec.rb
index b5a3471e32bd0c843e1411de1ed856b73610b068..9730b02651c96793bed27507244a0a1bbe7e5a6b 100644
--- a/ee/spec/services/ee/projects/update_pages_service_spec.rb
+++ b/ee/spec/services/ee/projects/update_pages_service_spec.rb
@@ -4,10 +4,11 @@
 
 RSpec.describe Projects::UpdatePagesService, feature_category: :pages do
   let_it_be(:project) { create(:project) }
+  let_it_be(:user) { create(:user) }
 
   let(:path_prefix) { nil }
   let(:build_options) { { pages: { path_prefix: path_prefix } } }
-  let(:build) { create(:ci_build, :pages, project: project, options: build_options) }
+  let(:build) { create(:ci_build, :pages, project: project, user: user, options: build_options) }
 
   subject(:service) { described_class.new(project, build) }
 
@@ -34,6 +35,12 @@
         expect { expect(service.execute).to include(status: :error) }
           .not_to change { project.pages_deployments.count }
       end
+
+      it_behaves_like 'internal event not tracked' do
+        let(:event) { 'create_pages_extra_deployment' }
+
+        subject(:track_event) { service.execute }
+      end
     end
 
     context 'and pages_multiple_versions is enabled for project' do
@@ -50,6 +57,14 @@
 
         expect(project.pages_deployments.last.path_prefix).to eq('path-prefix')
       end
+
+      it_behaves_like 'internal event tracking' do
+        let(:event) { 'create_pages_extra_deployment' }
+        let(:category) { 'Projects::UpdatePagesService' }
+        let(:namespace) { project.namespace }
+
+        subject(:track_event) { service.execute }
+      end
     end
   end
 end
diff --git a/spec/services/projects/update_pages_service_spec.rb b/spec/services/projects/update_pages_service_spec.rb
index b5d1276988f97072e0ff16b71f188aa4208df217..6712c12fab633824b7ae4cfd2b6cac18c1817ecf 100644
--- a/spec/services/projects/update_pages_service_spec.rb
+++ b/spec/services/projects/update_pages_service_spec.rb
@@ -160,6 +160,14 @@
           .by(1)
       end
 
+      it_behaves_like 'internal event tracking' do
+        let(:event) { 'create_pages_deployment' }
+        let(:category) { 'Projects::UpdatePagesService' }
+        let(:namespace) { project.namespace }
+
+        subject(:track_event) { service.execute }
+      end
+
       context 'when archive does not have pages directory' do
         let(:file) { empty_file }
         let(:metadata_filename) { empty_metadata_filename }
diff --git a/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb b/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb
index 9fd8a28943fe99545c7ddbfe98ed947cfbbb9183..2c5333ef4acac81a82b423488d165edc17d1aa74 100644
--- a/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb
+++ b/spec/support/shared_examples/controllers/internal_event_tracking_examples.rb
@@ -19,6 +19,9 @@
       matching_rules = definition.event_selection_rules.map do |event_selection_rule|
         next unless event_selection_rule.name == event
 
+        # Only include unique metrics if the unique_identifier_name is present in the spec
+        next if event_selection_rule.unique_identifier_name && !try(event_selection_rule.unique_identifier_name)
+
         event_selection_rule.filter.all? do |property_name, value|
           try(property_name) == value
         end