diff --git a/wp-admin/css/forms.css b/wp-admin/css/forms.css
index 88e8688..fa63df2 100644
--- a/wp-admin/css/forms.css
+++ b/wp-admin/css/forms.css
@@ -935,6 +935,10 @@ table.form-table td .updated p {
 	max-width: 25em;
 }
 
+.form-field #scheme {
+	max-width: 4em;
+}
+
 .form-field #domain {
 	max-width: 22em;
 }
diff --git a/wp-admin/network/site-info.php b/wp-admin/network/site-info.php
index 50f287d..14039db 100644
--- a/wp-admin/network/site-info.php
+++ b/wp-admin/network/site-info.php
@@ -62,12 +62,15 @@ if ( isset( $_REQUEST['action'] ) && 'update-site' == $_REQUEST['action'] ) {
 	delete_option( 'rewrite_rules' );
 
 	$blog_data = wp_unslash( $_POST['blog'] );
-	$blog_data['scheme'] = $parsed_scheme;
 
 	if ( $is_main_site ) {
 		// On the network's main site, don't allow the domain or path to change.
 		$blog_data['domain'] = $details->domain;
 		$blog_data['path'] = $details->path;
+
+		if ( ! $blog_data['scheme'] ) {
+			$blog_data['scheme'] = $parsed_scheme;
+		}
 	} else {
 		// For any other site, the scheme, domain, and path can all be changed. We first
 		// need to ensure a scheme has been provided, otherwise fallback to the existing.
@@ -164,11 +167,12 @@ if ( ! empty( $messages ) ) {
 	<input type="hidden" name="id" value="<?php echo esc_attr( $id ) ?>" />
 	<table class="form-table">
 		<?php
-		// The main site of the network should not be updated on this page.
+		// Only the scheme for the main site can be updated.
 		if ( $is_main_site ) : ?>
 		<tr class="form-field">
 			<th scope="row"><?php _e( 'Site URL' ); ?></th>
-			<td><?php echo esc_url( $details->siteurl ); ?></td>
+			<td><input name="blog[scheme]" type="text" id="scheme" value="<?php echo esc_attr( $parsed_scheme ) ?>"
+				size="5" class="small-text" />://<?php echo esc_html( $details->domain . $details->path ); ?></td>
 		</tr>
 		<?php
 		// For any other site, the scheme, domain, and path can all be changed.
