Index: src/wp-admin/includes/schema.php
===================================================================
--- src/wp-admin/includes/schema.php	(revision 44213)
+++ src/wp-admin/includes/schema.php	(working copy)
@@ -1302,6 +1302,7 @@
  *
  * @param int   $site_id Site ID to populate meta for.
  * @param array $meta    Optional. Custom meta $key => $value pairs to use. Default empty array.
+ * @return bool  Return true is successful and false if site meta not supported.
  */
 function populate_site_meta( $site_id, array $meta = array() ) {
 	global $wpdb;
@@ -1308,12 +1309,19 @@
 
 	$site_id = (int) $site_id;
 
-	if ( ! is_site_meta_supported() ) {
-		return;
-	}
 
+	/**
+	 * Filters meta for a site on creation.
+	 *
+	 * @since 5.1.0
+	 *
+	 * @param array $sitemeta   Associative array of site meta keys and values to be inserted.
+	 * @param int   $network_id ID of site to populate.
+	 */
+	$meta = apply_filters( 'populate_site_meta', $meta, $site_id );
+
 	if ( empty( $meta ) ) {
-		return;
+		return false;
 	}
 
 	$insert = '';
@@ -1329,5 +1337,15 @@
 
 	$wpdb->query( "INSERT INTO $wpdb->blogmeta ( blog_id, meta_key, meta_value ) VALUES " . $insert ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
 
-	wp_cache_set( 'last_changed', microtime(), 'sites' );
+	/**
+	 * Fires after site meta is created.
+	 *
+	 * @since 5.1.0
+	 *
+	 * @param array $sitemeta   Associative array of site meta keys and values to be inserted.
+	 * @param int   $network_id ID of site to populate.
+	 */
+	do_action( 'populated_site_meta', $meta, $site_id );
+
+	return true;
 }
Index: src/wp-includes/ms-blogs.php
===================================================================
--- src/wp-includes/ms-blogs.php	(revision 44213)
+++ src/wp-includes/ms-blogs.php	(working copy)
@@ -745,6 +745,15 @@
 }
 
 /**
+ * Sets the last changed time for the 'sites' cache group.
+ *
+ * @since 5.1.0
+ */
+function wp_cache_set_sites_last_changed() {
+	wp_cache_set( 'last_changed', microtime(), 'sites' );
+}
+
+/**
  * Updates metadata cache for list of site IDs.
  *
  * Performs SQL query to retrieve all metadata for the sites matching `$site_ids` and stores them in the cache.
@@ -756,10 +765,6 @@
  * @return array|false Returns false if there is nothing to update. Returns an array of metadata on success.
  */
 function update_sitemeta_cache( $site_ids ) {
-	if ( ! is_site_meta_supported() ) {
-		return false;
-	}
-
 	return update_meta_cache( 'blog', $site_ids );
 }
 
@@ -1475,21 +1480,7 @@
  * @return int|false Meta ID on success, false on failure.
  */
 function add_site_meta( $site_id, $meta_key, $meta_value, $unique = false ) {
-	// Bail if site meta table is not installed.
-	if ( ! is_site_meta_supported() ) {
-		/* translators: %s: database table name */
-		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.0.0' );
-		return false;
-	}
-
-	$added = add_metadata( 'blog', $site_id, $meta_key, $meta_value, $unique );
-
-	// Bust site query cache.
-	if ( $added ) {
-		wp_cache_set( 'last_changed', microtime(), 'sites' );
-	}
-
-	return $added;
+	return add_metadata( 'blog', $site_id, $meta_key, $meta_value, $unique );
 }
 
 /**
@@ -1508,21 +1499,7 @@
  * @return bool True on success, false on failure.
  */
 function delete_site_meta( $site_id, $meta_key, $meta_value = '' ) {
-	// Bail if site meta table is not installed.
-	if ( ! is_site_meta_supported() ) {
-		/* translators: %s: database table name */
-		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.0.0' );
-		return false;
-	}
-
-	$deleted = delete_metadata( 'blog', $site_id, $meta_key, $meta_value );
-
-	// Bust site query cache.
-	if ( $deleted ) {
-		wp_cache_set( 'last_changed', microtime(), 'sites' );
-	}
-
-	return $deleted;
+	return delete_metadata( 'blog', $site_id, $meta_key, $meta_value );
 }
 
 /**
@@ -1538,13 +1515,6 @@
  *               field if $single is true.
  */
 function get_site_meta( $site_id, $key = '', $single = false ) {
-	// Bail if site meta table is not installed.
-	if ( ! is_site_meta_supported() ) {
-		/* translators: %s: database table name */
-		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.0.0' );
-		return false;
-	}
-
 	return get_metadata( 'blog', $site_id, $key, $single );
 }
 
@@ -1567,21 +1537,7 @@
  *                  false on failure.
  */
 function update_site_meta( $site_id, $meta_key, $meta_value, $prev_value = '' ) {
-	// Bail if site meta table is not installed.
-	if ( ! is_site_meta_supported() ) {
-		/* translators: %s: database table name */
-		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.0.0' );
-		return false;
-	}
-
-	$updated = update_metadata( 'blog', $site_id, $meta_key, $meta_value, $prev_value );
-
-	// Bust site query cache.
-	if ( $updated ) {
-		wp_cache_set( 'last_changed', microtime(), 'sites' );
-	}
-
-	return $updated;
+	return update_metadata( 'blog', $site_id, $meta_key, $meta_value, $prev_value );;
 }
 
 /**
@@ -1593,21 +1549,7 @@
  * @return bool Whether the site meta key was deleted from the database.
  */
 function delete_site_meta_by_key( $meta_key ) {
-	// Bail if site meta table is not installed.
-	if ( ! is_site_meta_supported() ) {
-		/* translators: %s: database table name */
-		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.0.0' );
-		return false;
-	}
-
-	$deleted = delete_metadata( 'blog', null, $meta_key, '', true );
-
-	// Bust site query cache.
-	if ( $deleted ) {
-		wp_cache_set( 'last_changed', microtime(), 'sites' );
-	}
-
-	return $deleted;
+	return delete_metadata( 'blog', null, $meta_key, '', true );
 }
 
 /**
@@ -2309,3 +2251,21 @@
 
 	update_blog_option( $site_id, 'blog_public', $public );
 }
+
+/**
+ * Aborts calls to site meta if it is not supported.
+ *
+ * @since 5.1.0
+ *
+ * @param mixed $check Skip-value for whether to proceed site meta function execution.
+ * @return mixed Original value of $check, or false if site meta is not supported.
+ */
+function wp_check_site_meta_support_prefilter( $check ) {
+	if ( ! is_site_meta_supported() ) {
+		/* translators: %s: database table name */
+		_doing_it_wrong( __FUNCTION__, sprintf( __( 'The %s table is not installed. Please run the network database upgrade.' ), $GLOBALS['wpdb']->blogmeta ), '5.1.0' );
+		return false;
+	}
+
+	return $check;
+}
\ No newline at end of file
Index: src/wp-includes/ms-default-filters.php
===================================================================
--- src/wp-includes/ms-default-filters.php	(revision 44213)
+++ src/wp-includes/ms-default-filters.php	(working copy)
@@ -53,6 +53,21 @@
 add_action( 'wp_uninitialize_site', 'wp_uninitialize_site', 10, 1 );
 add_action( 'update_blog_public', 'wp_update_blog_public_option_on_site_update', 1, 2 );
 
+// Site meta
+add_action( 'added_site_meta', 'wp_cache_set_sites_last_changed' );
+add_action( 'updated_site_meta', 'wp_cache_set_sites_last_changed' );
+add_action( 'deleted_site_meta', 'wp_cache_set_sites_last_changed' );
+add_action( 'populated_site_meta', 'wp_cache_set_sites_last_changed' );
+add_filter( 'get_site_metadata', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'add_site_metadata', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'update_site_metadata', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'delete_site_metadata', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'get_site_metadata_by_mid', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'update_site_metadata_by_mid', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'delete_site_metadata_by_mid', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'update_site_metadata_cache', 'wp_check_site_meta_support_prefilter' );
+add_filter( 'populate_site_meta', 'wp_check_site_meta_support_prefilter' );
+
 // Register Nonce
 add_action( 'signup_hidden_fields', 'signup_nonce_fields' );
 
