diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php
index f88e342ce2..55ebbf61aa 100644
--- a/src/wp-includes/general-template.php
+++ b/src/wp-includes/general-template.php
@@ -1055,7 +1055,9 @@ function get_custom_logo( $blog_id = 0 ) {
 		 */
 		$image = wp_get_attachment_image( $custom_logo_id, 'full', false, $custom_logo_attr );
 
-		if ( is_front_page() ) {
+		$unlink_homepage_logo = get_theme_support( 'custom-logo', 'unlink-homepage-logo' ) ? true : false;
+
+		if ( is_front_page() && $unlink_homepage_logo ) {
 			// If on the home page, don't link the logo to home.
 			$html = sprintf(
 				'<span class="custom-logo-link">%1$s</span>',
diff --git a/src/wp-includes/theme.php b/src/wp-includes/theme.php
index bdd1ec3f60..2e0bfcf108 100644
--- a/src/wp-includes/theme.php
+++ b/src/wp-includes/theme.php
@@ -2472,6 +2472,7 @@ function get_theme_starter_content() {
  * @since 5.3.0 Formalized the existing and already documented `...$args` parameter
  *              by adding it to the function signature.
  * @since 5.5.0 The `core-block-patterns` feature was added and is enabled by default.
+ * @since 5.5.0 The `custom-logo` feature now also accepts `unlink-homepage-logo`.
  *
  * @global array $_wp_theme_features
  *
@@ -2538,11 +2539,12 @@ function add_theme_support( $feature, ...$args ) {
 				$args = array( 0 => array() );
 			}
 			$defaults = array(
-				'width'       => null,
-				'height'      => null,
-				'flex-width'  => false,
-				'flex-height' => false,
-				'header-text' => '',
+				'width'                => null,
+				'height'               => null,
+				'flex-width'           => false,
+				'flex-height'          => false,
+				'header-text'          => '',
+				'unlink-homepage-logo' => false,
 			);
 			$args[0]  = wp_parse_args( array_intersect_key( $args[0], $defaults ), $defaults );
 
