diff --git a/src/wp-admin/admin-header.php b/src/wp-admin/admin-header.php
index c6760f9b86..7fbbb66623 100644
--- a/src/wp-admin/admin-header.php
+++ b/src/wp-admin/admin-header.php
@@ -91,7 +91,6 @@ var ajaxurl = '<?php echo admin_url( 'admin-ajax.php', 'relative' ); ?>',
 	decimalPoint = '<?php echo addslashes( $wp_locale->number_format['decimal_point'] ); ?>',
 	isRtl = <?php echo (int) is_rtl(); ?>;
 </script>
-<meta name="viewport" content="width=device-width,initial-scale=1.0">
 <?php
 
 /**
diff --git a/src/wp-admin/customize.php b/src/wp-admin/customize.php
index a8b62f4195..000ea8bb88 100644
--- a/src/wp-admin/customize.php
+++ b/src/wp-admin/customize.php
@@ -132,10 +132,7 @@ $body_class = 'wp-core-ui wp-customizer js';
 
 if ( wp_is_mobile() ) :
 	$body_class .= ' mobile';
-
-	?>
-	<meta name="viewport" id="viewport-meta" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=1.2" />
-	<?php
+	add_filter( 'admin_viewport_meta', '_customizer_mobile_viewport_meta' );
 endif;
 
 if ( $wp_customize->is_ios() ) {
@@ -171,6 +168,13 @@ do_action( 'customize_controls_print_styles' );
  * @since 3.4.0
  */
 do_action( 'customize_controls_print_scripts' );
+
+/**
+ * Fires when Customizer control scripts are printed.
+ *
+ * @since 5.5.0
+ */
+do_action( 'customize_controls_head' );
 ?>
 </head>
 <body class="<?php echo esc_attr( $body_class ); ?>">
diff --git a/src/wp-admin/includes/admin-filters.php b/src/wp-admin/includes/admin-filters.php
index 4e66b28bb8..e4d51aa3e1 100644
--- a/src/wp-admin/includes/admin-filters.php
+++ b/src/wp-admin/includes/admin-filters.php
@@ -43,7 +43,8 @@ add_action( 'login_init', 'wp_admin_headers' );
 add_action( 'admin_head', 'wp_admin_canonical_url' );
 add_action( 'admin_head', 'wp_color_scheme_settings' );
 add_action( 'admin_head', 'wp_site_icon' );
-add_action( 'admin_head', '_ipad_meta' );
+add_action( 'admin_head', 'wp_admin_viewport_meta' );
+add_action( 'customize_controls_head', 'wp_admin_viewport_meta' );
 
 // Prerendering.
 if ( ! is_customize_preview() ) {
diff --git a/src/wp-admin/includes/misc.php b/src/wp-admin/includes/misc.php
index 628ec7bb7b..dc5570c0b2 100644
--- a/src/wp-admin/includes/misc.php
+++ b/src/wp-admin/includes/misc.php
@@ -988,14 +988,34 @@ function wp_color_scheme_settings() {
 }
 
 /**
- * @since 3.3.0
+ * Displays the viewport meta in the admin.
+ *
+ * @since 5.5.0
  */
-function _ipad_meta() {
-	if ( wp_is_mobile() ) {
-		?>
-		<meta name="viewport" id="viewport-meta" content="width=device-width, initial-scale=1">
-		<?php
+function wp_admin_viewport_meta() {
+	/**
+	 * Filters the viewport meta in the admin.
+	 *
+	 * @since 5.5.0
+	 *
+	 * @param string $viewport_meta The viewport meta.
+	 */
+	$viewport_meta = apply_filters( 'admin_viewport_meta', 'width=device-width,initial-scale=1.0' );
+	if ( empty( $viewport_meta ) ) {
+		return;
 	}
+	echo '<meta name="viewport" content="' . esc_attr( $viewport_meta ) . '">';
+}
+
+/**
+ * Viewport meta for mobile in customize.
+ *
+ * Hooked to the {@see 'admin_viewport_meta'} filter.
+ *
+ * @since 5.5.0
+ */
+function _customizer_mobile_viewport_meta( $content ) {
+	return trim( $content, ',' ) . ',minimum-scale=0.5,maximum-scale=1.2';
 }
 
 /**
