diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
index adc38a5ab..b13c7b350 100644
--- src/bp-core/bp-core-filters.php
+++ src/bp-core/bp-core-filters.php
@@ -1168,3 +1168,18 @@ function bp_core_render_email_template( $template ) {
 	return '';
 }
 add_action( 'bp_template_include', 'bp_core_render_email_template', 12 );
+
+/**
+ * Adds BuddyPress components' slugs to the WordPress Multisite subdirectory reserved names.
+ *
+ * @since 6.0.0
+ *
+ * @param array $names The WordPress Multisite subdirectory reserved names.
+ * @return array       The WordPress & BuddyPress Multisite subdirectory reserved names.
+ */
+function bp_core_components_subdirectory_reserved_names( $names = array() ) {
+	$bp_pages = (array) buddypress()->pages;
+
+	return array_merge( $names, wp_list_pluck( $bp_pages, 'slug' ) );
+}
+add_filter( 'subdirectory_reserved_names', 'bp_core_components_subdirectory_reserved_names' );
diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
index cf67c182d..379aa0a55 100644
--- src/bp-core/bp-core-functions.php
+++ src/bp-core/bp-core-functions.php
@@ -879,45 +879,6 @@ function bp_core_add_root_component( $slug ) {
 	}
 }
 
-/**
- * Create WordPress pages to be used as BP component directories.
- *
- * @since 1.5.0
- */
-function bp_core_create_root_component_page() {
-
-	// Get BuddyPress.
-	$bp = buddypress();
-
-	$new_page_ids = array();
-
-	foreach ( (array) $bp->add_root as $slug ) {
-		$new_page_ids[ $slug ] = wp_insert_post( array(
-			'comment_status' => 'closed',
-			'ping_status'    => 'closed',
-			'post_title'     => ucwords( $slug ),
-			'post_status'    => 'publish',
-			'post_type'      => 'page'
-		) );
-	}
-
-	$page_ids = array_merge( $new_page_ids, bp_core_get_directory_page_ids( 'all' ) );
-	bp_core_update_directory_page_ids( $page_ids );
-}
-
-/**
- * Add illegal blog names to WP so that root components will not conflict with blog names on a subdirectory installation.
- *
- * For example, it would stop someone creating a blog with the slug "groups".
- *
- * @since 1.0.0
- *
- * @todo Deprecate?
- */
-function bp_core_add_illegal_names() {
-	update_site_option( 'illegal_names', get_site_option( 'illegal_names' ), array() );
-}
-
 /**
  * Get the 'search' query argument for a given component.
  *
diff --git src/bp-core/deprecated/6.0.php src/bp-core/deprecated/6.0.php
index e69de29bb..caa722464 100644
--- src/bp-core/deprecated/6.0.php
+++ src/bp-core/deprecated/6.0.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Deprecated functions.
+ *
+ * @deprecated 6.0.0
+ */
+
+// Exit if accessed directly.
+defined( 'ABSPATH' ) || exit;
+
+/**
+ * Create WordPress pages to be used as BP component directories.
+ *
+ * @since 1.5.0
+ * @deprecated 6.0.0
+ */
+function bp_core_create_root_component_page() {
+	_deprecated_function( __FUNCTION__, '6.0' );
+
+	// Get BuddyPress.
+	$bp = buddypress();
+
+	$new_page_ids = array();
+
+	foreach ( (array) $bp->add_root as $slug ) {
+		$new_page_ids[ $slug ] = wp_insert_post( array(
+			'comment_status' => 'closed',
+			'ping_status'    => 'closed',
+			'post_title'     => ucwords( $slug ),
+			'post_status'    => 'publish',
+			'post_type'      => 'page'
+		) );
+	}
+
+	$page_ids = array_merge( $new_page_ids, bp_core_get_directory_page_ids( 'all' ) );
+	bp_core_update_directory_page_ids( $page_ids );
+}
+
+/**
+ * Add illegal blog names to WP so that root components will not conflict with blog names on a subdirectory installation.
+ *
+ * For example, it would stop someone creating a blog with the slug "groups".
+ *
+ * @since 1.0.0
+ * @deprecated 6.0.0
+ */
+function bp_core_add_illegal_names() {
+	_deprecated_function( __FUNCTION__, '6.0' );
+
+	update_site_option( 'illegal_names', get_site_option( 'illegal_names' ), array() );
+}
diff --git src/class-buddypress.php src/class-buddypress.php
index 756dd5009..90d29afe0 100644
--- src/class-buddypress.php
+++ src/class-buddypress.php
@@ -508,6 +508,7 @@ class BuddyPress {
 			require( $this->plugin_dir . 'bp-core/deprecated/2.9.php' );
 			require( $this->plugin_dir . 'bp-core/deprecated/3.0.php' );
 			require( $this->plugin_dir . 'bp-core/deprecated/4.0.php' );
+			require( $this->plugin_dir . 'bp-core/deprecated/6.0.php' );
 		}
 
 		// Load wp-cli module if PHP 5.4+
diff --git tests/phpunit/testcases/core/filters.php tests/phpunit/testcases/core/filters.php
index e69de29bb..54c747660 100644
--- tests/phpunit/testcases/core/filters.php
+++ tests/phpunit/testcases/core/filters.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @group core
+ */
+
+class BP_Tests_Core_Filters extends BP_UnitTestCase {
+	/**
+	 * @group bp_core_components_subdirectory_reserved_names
+	 * @ticket 8187
+	 */
+	public function test_bp_core_components_subdirectory_reserved_names() {
+		if ( ! is_multisite() || is_subdomain_install() ) {
+			$this->markTestSkipped();
+		}
+
+		$u = self::factory()->user->create();
+
+		$site_data = wpmu_validate_blog_signup( 'members', 'Members', $u );
+
+		$this->assertTrue( is_wp_error( $site_data['errors'] ), 'On MS subdomain installs, a new site should not be able to use a component slug' );
+	}
+}
diff --git tests/phpunit/testcases/core/functions.php tests/phpunit/testcases/core/functions.php
index 3648d74e1..4290cffdf 100644
--- tests/phpunit/testcases/core/functions.php
+++ tests/phpunit/testcases/core/functions.php
@@ -839,4 +839,48 @@ class BP_Tests_Core_Functions extends BP_UnitTestCase {
 
 		$bp->pages = $reset_bp_pages;
 	}
+
+	/**
+	 * @group bp_core_add_page_mappings
+	 * @ticket 8187
+	 */
+	public function test_bp_core_add_page_mappings_in_multisite_subdirectory() {
+		if ( ! is_multisite() || is_subdomain_install() ) {
+			$this->markTestSkipped();
+		}
+
+		if ( function_exists( 'wp_initialize_site' ) ) {
+			$this->setExpectedDeprecated( 'wpmu_new_blog' );
+		}
+
+		$bp = buddypress();
+		$reset_bp_pages = $bp->pages;
+		$reset_bp_active_components = $bp->active_components;
+		$reset_option = bp_get_option( 'bp-pages' );
+
+		$b = self::factory()->blog->create( array(
+			'path'   => '/newcomponent/',
+		) );
+
+		$bp->active_components['newcomponent'] = 1;
+		add_filter( 'bp_core_get_directory_page_default_titles', array( $this, 'add_newcomponent_page_title' ) );
+
+		bp_core_add_page_mappings( $bp->active_components );
+
+		remove_filter( 'bp_core_get_directory_page_default_titles', array( $this, 'add_newcomponent_page_title' ) );
+		$bp_pages = bp_get_option( 'bp-pages' );
+
+		$new_component_page_id = $bp_pages['newcomponent'];
+		$this->assertNotSame( 'newcomponent', get_post_field( 'post_name', $new_component_page_id ), 'The component slug should not conflict with subsite name.' );
+
+		// Reset the page mapping.
+		bp_update_option( 'bp-pages', $reset_option );
+		wp_delete_post( $bp_pages['newcomponent'], true );
+		$bp->pages = $reset_bp_pages;
+		$bp->active_components = $reset_bp_active_components;
+	}
+
+	public function add_newcomponent_page_title( $page_default_titles = array() ) {
+		return array_merge( $page_default_titles, array( 'newcomponent' => 'NewComponent' ) );
+	}
 }
