diff --git src/bp-activity/classes/class-bp-activity-component.php src/bp-activity/classes/class-bp-activity-component.php
index d44879fd3..93f441351 100644
--- src/bp-activity/classes/class-bp-activity-component.php
+++ src/bp-activity/classes/class-bp-activity-component.php
@@ -502,4 +502,23 @@ class BP_Activity_Component extends BP_Component {
 			)
 		);
 	}
+
+	/**
+	 * Add the Activity directory state.
+	 *
+	 * @since 8.0.0
+	 *
+	 * @param array   $states Optional. See BP_Component::admin_directory_states() for description.
+	 * @param WP_Post $post   Optional. See BP_Component::admin_directory_states() for description.
+	 * @return array          See BP_Component::admin_directory_states() for description.
+	 */
+	public function admin_directory_states( $states = array(), $post = null ) {
+		$bp = buddypress();
+
+		if ( isset( $bp->pages->activity->id ) && (int) $bp->pages->activity->id === (int) $post->ID ) {
+			$states['page_for_activity_directory'] = _x( 'BP Activity Page', 'page label', 'buddypress' );
+		}
+
+		return parent::admin_directory_states( $states, $post );
+	}
 }
diff --git src/bp-blogs/classes/class-bp-blogs-component.php src/bp-blogs/classes/class-bp-blogs-component.php
index 9ad5e6d1f..749c91ef0 100644
--- src/bp-blogs/classes/class-bp-blogs-component.php
+++ src/bp-blogs/classes/class-bp-blogs-component.php
@@ -379,4 +379,23 @@ class BP_Blogs_Component extends BP_Component {
 
 		parent::rest_api_init( $controllers );
 	}
+
+	/**
+	 * Add the Sites directory states.
+	 *
+	 * @since 8.0.0
+	 *
+	 * @param array   $states Optional. See BP_Component::admin_directory_states() for description.
+	 * @param WP_Post $post   Optional. See BP_Component::admin_directory_states() for description.
+	 * @return array          See BP_Component::admin_directory_states() for description.
+	 */
+	public function admin_directory_states( $states = array(), $post = null ) {
+		$bp = buddypress();
+
+		if ( isset( $bp->pages->blogs->id ) && (int) $bp->pages->blogs->id === (int) $post->ID ) {
+			$states['page_for_sites_directory'] = _x( 'BP Sites Page', 'page label', 'buddypress' );
+		}
+
+		return parent::admin_directory_states( $states, $post );
+	}
 }
diff --git src/bp-core/admin/bp-core-admin-actions.php src/bp-core/admin/bp-core-admin-actions.php
index 68e5d30b0..3c7fae966 100644
--- src/bp-core/admin/bp-core-admin-actions.php
+++ src/bp-core/admin/bp-core-admin-actions.php
@@ -59,6 +59,9 @@ add_action( 'bp_admin_init', 'bp_do_activation_redirect', 1    );
 // Add a new separator.
 add_action( 'bp_admin_menu', 'bp_admin_separator' );
 
+// Add a filter to include BP Components directory pages display states.
+add_filter( 'display_post_states', 'bp_admin_display_directory_states', 10, 2 );
+
 /**
  * When a new site is created in a multisite installation, run the activation
  * routine on that site.
@@ -234,3 +237,33 @@ function bp_register_admin_settings() {
 	 */
 	do_action( 'bp_register_admin_settings' );
 }
+
+/**
+ * Dedicated filter to inform about BP components directory page states.
+ *
+ * @since 8.0.0
+ *
+ * @param string[] $post_states An array of post display states.
+ * @param WP_Post  $post        The current post object.
+ */
+function bp_admin_display_directory_states( $post_states = array(), $post = null ) {
+	/**
+	 * Filter here to add BP Directory pages.
+	 *
+	 * Used internaly by BP_Component->admin_directory_states(). Please use the dynamic
+	 * filter in BP_Component->admin_directory_states() to edit the directory state
+	 * according to the component's ID.
+	 *
+	 * @since 8.0.0
+	 *
+	 * @param array    $value An empty array.
+	 * @param WP_Post  $post  The current post object.
+	 */
+	$directory_page_states = apply_filters( 'bp_admin_display_directory_states', array(), $post );
+
+	if ( $directory_page_states ) {
+		$post_states = array_merge( $post_states, $directory_page_states );
+	}
+
+	return $post_states;
+}
diff --git src/bp-core/admin/bp-core-admin-slugs.php src/bp-core/admin/bp-core-admin-slugs.php
index 52ef6e36c..432b6f409 100644
--- src/bp-core/admin/bp-core-admin-slugs.php
+++ src/bp-core/admin/bp-core-admin-slugs.php
@@ -117,11 +117,11 @@ function bp_core_admin_slugs_options() {
 	// Set up an array of components (along with component names) that have directory pages.
 	$directory_pages = bp_core_admin_get_directory_pages();
 
-	if ( !empty( $directory_pages ) ) : ?>
+	if ( ! empty( $directory_pages ) ) : ?>
 
-		<h3><?php _e( 'Directories', 'buddypress' ); ?></h3>
+		<h3><?php esc_html_e( 'Directories', 'buddypress' ); ?></h3>
 
-		<p><?php _e( 'Associate a WordPress Page with each BuddyPress component directory.', 'buddypress' ); ?></p>
+		<p><?php esc_html_e( 'Associate a WordPress Page with each BuddyPress component directory.', 'buddypress' ); ?></p>
 
 		<table class="form-table">
 			<tbody>
@@ -141,13 +141,13 @@ function bp_core_admin_slugs_options() {
 								'name'             => 'bp_pages[' . esc_attr( $name ) . ']',
 								'echo'             => false,
 								'show_option_none' => __( '- None -', 'buddypress' ),
-								'selected'         => !empty( $existing_pages[$name] ) ? $existing_pages[$name] : false
+								'selected'         => ! empty( $existing_pages[$name] ) ? $existing_pages[$name] : false
 							) ); ?>
 
 							<?php if ( ! empty( $existing_pages[ $name ] ) && get_post( $existing_pages[ $name ] ) ) : ?>
 
 								<a href="<?php echo esc_url( get_permalink( $existing_pages[$name] ) ); ?>" class="button-secondary" target="_bp">
-									<?php _e( 'View', 'buddypress' ); ?> <span class="dashicons dashicons-external" aria-hidden="true"></span>
+									<?php esc_html_e( 'View', 'buddypress' ); ?> <span class="dashicons dashicons-external" aria-hidden="true"></span>
 									<span class="screen-reader-text"><?php esc_html_e( '(opens in a new tab)', 'buddypress' ); ?></span>
 								</a>
 
@@ -185,23 +185,40 @@ function bp_core_admin_slugs_options() {
 
 	if ( !empty( $static_pages ) ) : ?>
 
-		<h3><?php _e( 'Registration', 'buddypress' ); ?></h3>
+		<h3><?php esc_html_e( 'Registration', 'buddypress' ); ?></h3>
 
 		<?php if ( bp_get_signup_allowed() || bp_get_members_invitations_allowed() ) : ?>
-			<p><?php _e( 'Associate WordPress Pages with the following BuddyPress Registration pages.', 'buddypress' ); ?></p>
+			<p>
+				<?php esc_html_e( 'Associate WordPress Pages with the following BuddyPress Registration pages.', 'buddypress' ); ?>
+				<?php esc_html_e( 'These pages will only be reachable by users who are not logged in.', 'buddypress' ); ?>
+			</p>
 		<?php else : ?>
 			<?php if ( is_multisite() ) : ?>
 				<p>
 					<?php
-					/* translators: %s: the link to the Network settings page */
-					printf( __( 'Registration is currently disabled.  Before associating a page is allowed, please enable registration by selecting either the "User accounts may be registered" or "Both sites and user accounts can be registered" option on <a href="%s">this page</a>.', 'buddypress' ), network_admin_url( 'settings.php' ) );
+					printf(
+						/* translators: %s: the link to the Network settings page */
+						esc_html_x( 'Registration is currently disabled.  Before associating a page is allowed, please enable registration by selecting either the "User accounts may be registered" or "Both sites and user accounts can be registered" option on %s.', 'Disabled registration message for multisite config', 'buddypress' ),
+						sprintf(
+							'<a href="%1$s">%2$s</a>',
+							esc_url( network_admin_url( 'settings.php' ) ),
+							esc_html_x( 'this page', 'Link text for the Multisite’s network settings page', 'buddypress' )
+						)
+					);
 					?>
 				</p>
 			<?php else : ?>
 				<p>
 					<?php
-					/* translators: %s: the link to the Site settings page */
-					printf( __( 'Registration is currently disabled.  Before associating a page is allowed, please enable registration by clicking on the "Anyone can register" checkbox on <a href="%s">this page</a>.', 'buddypress' ), admin_url( 'options-general.php' ) );
+					printf(
+						/* translators: %s: the link to the Site general options page */
+						esc_html_x( 'Registration is currently disabled.  Before associating a page is allowed, please enable registration by clicking on the "Anyone can register" checkbox on %s.', 'Disabled registration message for regular site config', 'buddypress' ),
+						sprintf(
+							'<a href="%1$s">%2$s</a>',
+							esc_url( admin_url( 'options-general.php' ) ),
+							esc_html_x( 'this page', 'Link text for the Site’s general options page', 'buddypress' )
+						)
+					);
 					?>
 				</p>
 			<?php endif; ?>
@@ -228,12 +245,6 @@ function bp_core_admin_slugs_options() {
 								'selected'         => !empty( $existing_pages[$name] ) ? $existing_pages[$name] : false
 							) ) ?>
 
-							<?php if ( ! empty( $existing_pages[ $name ] ) && get_post( $existing_pages[ $name ] ) ) : ?>
-
-								<a href="<?php echo get_permalink( $existing_pages[$name] ); ?>" class="button-secondary" target="_bp"><?php _e( 'View', 'buddypress' ); ?></a>
-
-							<?php endif; ?>
-
 							<?php if ( ! bp_is_root_blog() ) restore_current_blog(); ?>
 
 						</td>
@@ -266,8 +277,9 @@ function bp_core_admin_slugs_options() {
 function bp_core_admin_slugs_setup_handler() {
 
 	if ( isset( $_POST['bp-admin-pages-submit'] ) ) {
-		if ( !check_admin_referer( 'bp-admin-pages-setup' ) )
+		if ( ! check_admin_referer( 'bp-admin-pages-setup' ) ) {
 			return false;
+		}
 
 		// Then, update the directory pages.
 		if ( isset( $_POST['bp_pages'] ) ) {
diff --git src/bp-core/classes/class-bp-component.php src/bp-core/classes/class-bp-component.php
index ee3dfde6d..7349a6722 100644
--- src/bp-core/classes/class-bp-component.php
+++ src/bp-core/classes/class-bp-component.php
@@ -471,6 +471,9 @@ class BP_Component {
 			add_action( 'bp_blocks_init', array( $this, 'blocks_init' ), 10 );
 		}
 
+		// Set directory page states.
+		add_filter( 'bp_admin_display_directory_states', array( $this, 'admin_directory_states' ), 10, 2 );
+
 		/**
 		 * Fires at the end of the setup_actions method inside BP_Component.
 		 *
@@ -946,5 +949,31 @@ class BP_Component {
 		 */
 		do_action( 'bp_' . $this->id . '_blocks_init' );
 	}
+
+	/**
+	 * Add component's directory states.
+	 *
+	 * @since 8.0.0
+	 *
+	 * @param string[] $states An array of post display states.
+	 * @param WP_Post  $post   The current post object.
+	 * @return array           The component's directory states.
+	 */
+	public function admin_directory_states( $states = array(), $post = null ) {
+		if ( $this->has_directory ) {
+			/**
+			 * Filter here to edit the component's directory states.
+			 *
+			 * This is a dynamic hook that is based on the component string ID.
+			 *
+			 * @since 8.0.0
+			 *
+			 * @param string[] $states An array of post display states.
+			 */
+			return apply_filters( 'bp_' . $this->id . '_admin_directory_states', $states );
+		}
+
+		return $states;
+	}
 }
 endif; // BP_Component.
diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
index d15a7cb58..ea852d93d 100644
--- src/bp-groups/classes/class-bp-groups-component.php
+++ src/bp-groups/classes/class-bp-groups-component.php
@@ -1064,4 +1064,23 @@ class BP_Groups_Component extends BP_Component {
 			)
 		);
 	}
+
+	/**
+	 * Add the Groups directory states.
+	 *
+	 * @since 8.0.0
+	 *
+	 * @param array   $states Optional. See BP_Component::admin_directory_states() for description.
+	 * @param WP_Post $post   Optional. See BP_Component::admin_directory_states() for description.
+	 * @return array          See BP_Component::admin_directory_states() for description.
+	 */
+	public function admin_directory_states( $states = array(), $post = null ) {
+		$bp = buddypress();
+
+		if ( isset( $bp->pages->groups->id ) && (int) $bp->pages->groups->id === (int) $post->ID ) {
+			$states['page_for_groups_directory'] = _x( 'BP Groups Page', 'page label', 'buddypress' );
+		}
+
+		return parent::admin_directory_states( $states, $post );
+	}
 }
diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php
index 8effd0cf0..7ce8b3752 100644
--- src/bp-members/classes/class-bp-members-component.php
+++ src/bp-members/classes/class-bp-members-component.php
@@ -835,4 +835,33 @@ class BP_Members_Component extends BP_Component {
 			)
 		);
 	}
+
+	/**
+	 * Add the Members directory states.
+	 *
+	 * @since 8.0.0
+	 *
+	 * @param array   $states Optional. See BP_Component::admin_directory_states() for description.
+	 * @param WP_Post $post   Optional. See BP_Component::admin_directory_states() for description.
+	 * @return array          See BP_Component::admin_directory_states() for description.
+	 */
+	public function admin_directory_states( $states = array(), $post = null ) {
+		$bp = buddypress();
+
+		if ( isset( $bp->pages->members->id ) && (int) $bp->pages->members->id === (int) $post->ID ) {
+			$states['page_for_members_directory'] = _x( 'BP Members Page', 'page label', 'buddypress' );
+		}
+
+		if ( bp_get_signup_allowed() || bp_get_members_invitations_allowed() ) {
+			if ( isset( $bp->pages->register->id ) && (int) $bp->pages->register->id === (int) $post->ID ) {
+				$states['page_for_bp_registration'] = _x( 'BP Registration Page', 'page label', 'buddypress' );
+			}
+
+			if ( isset( $bp->pages->activate->id ) && (int) $bp->pages->activate->id === (int) $post->ID ) {
+				$states['page_for_bp_activation'] = _x( 'BP Activation Page', 'page label', 'buddypress' );
+			}
+		}
+
+		return parent::admin_directory_states( $states, $post );
+	}
 }
