diff --git src/bp-activity/classes/class-bp-activity-component.php src/bp-activity/classes/class-bp-activity-component.php
index 39ae94f..848562d 100644
--- src/bp-activity/classes/class-bp-activity-component.php
+++ src/bp-activity/classes/class-bp-activity-component.php
@@ -116,13 +116,17 @@ class BP_Activity_Component extends BP_Component {
 			'activity' => $bp->table_prefix . 'bp_activity_meta',
 		);
 
+		// Fetch the default directory title.
+		$default_directory_titles = bp_core_get_directory_page_default_titles();
+		$default_directory_title  = $default_directory_titles[$this->id];
+
 		// All globals for activity component.
 		// Note that global_tables is included in this array.
 		$args = array(
 			'slug'                  => BP_ACTIVITY_SLUG,
 			'root_slug'             => isset( $bp->pages->activity->slug ) ? $bp->pages->activity->slug : BP_ACTIVITY_SLUG,
 			'has_directory'         => true,
-			'directory_title'       => _x( 'Site-Wide Activity', 'component directory title', 'buddypress' ),
+			'directory_title'       => isset( $bp->pages->activity->title ) ? $bp->pages->activity->title : $default_directory_title,
 			'notification_callback' => 'bp_activity_format_notifications',
 			'search_string'         => __( 'Search Activity...', 'buddypress' ),
 			'global_tables'         => $global_tables,
diff --git src/bp-blogs/classes/class-bp-blogs-component.php src/bp-blogs/classes/class-bp-blogs-component.php
index 69dfe37..bb12f0d 100644
--- src/bp-blogs/classes/class-bp-blogs-component.php
+++ src/bp-blogs/classes/class-bp-blogs-component.php
@@ -65,12 +65,16 @@ class BP_Blogs_Component extends BP_Component {
 			'blog' => $bp->table_prefix . 'bp_user_blogs_blogmeta',
 		);
 
+		// Fetch the default directory title.
+		$default_directory_titles = bp_core_get_directory_page_default_titles();
+		$default_directory_title  = $default_directory_titles[$this->id];
+
 		// All globals for blogs component.
 		$args = array(
 			'slug'                  => BP_BLOGS_SLUG,
 			'root_slug'             => isset( $bp->pages->blogs->slug ) ? $bp->pages->blogs->slug : BP_BLOGS_SLUG,
 			'has_directory'         => is_multisite(), // Non-multisite installs don't need a top-level Sites directory, since there's only one site.
-			'directory_title'       => _x( 'Sites', 'component directory title', 'buddypress' ),
+			'directory_title'       => isset( $bp->pages->blogs->title ) ? $bp->pages->blogs->title : $default_directory_title,
 			'notification_callback' => 'bp_blogs_format_notifications',
 			'search_string'         => __( 'Search sites...', 'buddypress' ),
 			'autocomplete_all'      => defined( 'BP_MESSAGES_AUTOCOMPLETE_ALL' ),
diff --git src/bp-core/bp-core-functions.php src/bp-core/bp-core-functions.php
index 7cf28aa..3cbb381 100644
--- src/bp-core/bp-core-functions.php
+++ src/bp-core/bp-core-functions.php
@@ -630,14 +630,7 @@ function bp_core_add_page_mappings( $components, $existing = 'keep' ) {
 		$pages = array();
 	}
 
-	$page_titles = array(
-		'activity' => _x( 'Activity', 'Page title for the Activity directory.',       'buddypress' ),
-		'groups'   => _x( 'Groups',   'Page title for the Groups directory.',         'buddypress' ),
-		'sites'    => _x( 'Sites',    'Page title for the Sites directory.',          'buddypress' ),
-		'members'  => _x( 'Members',  'Page title for the Members directory.',        'buddypress' ),
-		'activate' => _x( 'Activate', 'Page title for the user activation screen.',   'buddypress' ),
-		'register' => _x( 'Register', 'Page title for the user registration screen.', 'buddypress' ),
-	);
+	$page_titles = bp_core_get_directory_page_default_titles();
 
 	$pages_to_create = array();
 	foreach ( array_keys( $components ) as $component_name ) {
@@ -694,6 +687,24 @@ function bp_core_add_page_mappings( $components, $existing = 'keep' ) {
 }
 
 /**
+ * Get the default page titles for BP directory pages.
+ *
+ * @since 2.6.0
+ *
+ * @return array
+ */
+function bp_core_get_directory_page_default_titles() {
+	return array(
+		'activity' => _x( 'Activity', 'Page title for the Activity directory.',       'buddypress' ),
+		'groups'   => _x( 'Groups',   'Page title for the Groups directory.',         'buddypress' ),
+		'sites'    => _x( 'Sites',    'Page title for the Sites directory.',          'buddypress' ),
+		'members'  => _x( 'Members',  'Page title for the Members directory.',        'buddypress' ),
+		'activate' => _x( 'Activate', 'Page title for the user activation screen.',   'buddypress' ),
+		'register' => _x( 'Register', 'Page title for the user registration screen.', 'buddypress' ),
+	);
+}
+
+/**
  * Remove the entry from bp_pages when the corresponding WP page is deleted.
  *
  * Bails early on multisite installations when not viewing the root site.
diff --git src/bp-core/bp-core-update.php src/bp-core/bp-core-update.php
index 081b1ff..3d14425 100644
--- src/bp-core/bp-core-update.php
+++ src/bp-core/bp-core-update.php
@@ -263,6 +263,11 @@ function bp_version_updater() {
 		if ( $raw_db_version < 10440 ) {
 			bp_update_to_2_5();
 		}
+
+		// 2.6.0
+		if ( $raw_db_version < 10772 ) {
+			bp_update_to_2_6();
+		}
 	}
 
 	/* All done! *************************************************************/
@@ -502,6 +507,17 @@ function bp_update_to_2_5() {
 }
 
 /**
+ * 2.6.0 update routine.
+ *
+ * - Save legacy directory titles to the corresponding WP pages.
+ *
+ * @since 2.6.0
+ */
+function bp_update_to_2_6() {
+	bp_260_migrate_directory_page_titles();
+}
+
+/**
  * Updates the component field for new_members type.
  *
  * @since 2.2.0
@@ -550,6 +566,55 @@ function bp_cleanup_friendship_activities() {
 }
 
 /**
+ * Update WP pages so that their post_title matches the legacy component directory title.
+ *
+ * As of 2.6.0, component directory titles come from the `post_title` attribute of the corresponding WP post object,
+ * instead of being hardcoded. To ensure that directory titles don't change for existing installations, we update these
+ * WP posts with the formerly hardcoded titles.
+ *
+ * @since 2.6.0
+ */
+function bp_260_migrate_directory_page_titles() {
+	$bp_pages = bp_core_get_directory_page_ids( 'all' );
+
+	$default_titles = bp_core_get_directory_page_default_titles();
+
+	$legacy_titles = array(
+		'activity' => _x( 'Site-Wide Activity', 'component directory title', 'buddypress' ),
+		'blogs'    => _x( 'Sites', 'component directory title', 'buddypress' ),
+		'groups'   => _x( 'Groups', 'component directory title', 'buddypress' ),
+		'members'  => _x( 'Members', 'component directory title', 'buddypress' ),
+	);
+
+	foreach ( $bp_pages as $component => $page_id ) {
+		if ( ! isset( $legacy_titles[ $component ] ) ) {
+			continue;
+		}
+
+		$page = get_post( $page_id );
+		if ( ! $page ) {
+			continue;
+		}
+
+		// If the admin has changed the default title, don't touch it.
+		if ( isset( $default_titles[ $component ] ) && $default_titles[ $component ] !== $page->post_title ) {
+			continue;
+		}
+
+		// If the saved page title is the same as the legacy title, there's nothing to do.
+		if ( $legacy_titles[ $component ] == $page->post_title ) {
+			continue;
+		}
+
+		// Update the page with the legacy title.
+		wp_update_post( array(
+			'ID' => $page_id,
+			'post_title' => $legacy_titles[ $component ],
+		) );
+	}
+}
+
+/**
  * Redirect user to BP's What's New page on first page load after activation.
  *
  * @since 1.7.0
diff --git src/bp-groups/classes/class-bp-groups-component.php src/bp-groups/classes/class-bp-groups-component.php
index 93bb9b7..d60278c 100644
--- src/bp-groups/classes/class-bp-groups-component.php
+++ src/bp-groups/classes/class-bp-groups-component.php
@@ -168,13 +168,17 @@ class BP_Groups_Component extends BP_Component {
 			'group' => $bp->table_prefix . 'bp_groups_groupmeta',
 		);
 
+		// Fetch the default directory title.
+		$default_directory_titles = bp_core_get_directory_page_default_titles();
+		$default_directory_title  = $default_directory_titles[$this->id];
+
 		// All globals for groups component.
 		// Note that global_tables is included in this array.
 		$args = array(
 			'slug'                  => BP_GROUPS_SLUG,
 			'root_slug'             => isset( $bp->pages->groups->slug ) ? $bp->pages->groups->slug : BP_GROUPS_SLUG,
 			'has_directory'         => true,
-			'directory_title'       => _x( 'Groups', 'component directory title', 'buddypress' ),
+			'directory_title'       => isset( $bp->pages->groups->title ) ? $bp->pages->groups->title : $default_directory_title,
 			'notification_callback' => 'groups_format_notifications',
 			'search_string'         => _x( 'Search Groups...', 'Component directory search', 'buddypress' ),
 			'global_tables'         => $global_tables,
diff --git src/bp-members/classes/class-bp-members-component.php src/bp-members/classes/class-bp-members-component.php
index 73b45e0..712f80d 100644
--- src/bp-members/classes/class-bp-members-component.php
+++ src/bp-members/classes/class-bp-members-component.php
@@ -108,12 +108,16 @@ class BP_Members_Component extends BP_Component {
 			define( 'BP_MEMBERS_SLUG', $this->id );
 		}
 
+		// Fetch the default directory title.
+		$default_directory_titles = bp_core_get_directory_page_default_titles();
+		$default_directory_title  = $default_directory_titles[$this->id];
+
 		// Override any passed args.
 		$args = array(
 			'slug'            => BP_MEMBERS_SLUG,
 			'root_slug'       => isset( $bp->pages->members->slug ) ? $bp->pages->members->slug : BP_MEMBERS_SLUG,
 			'has_directory'   => true,
-			'directory_title' => _x( 'Members', 'component directory title', 'buddypress' ),
+			'directory_title' => isset( $bp->pages->members->title ) ? $bp->pages->members->title : $default_directory_title,
 			'search_string'   => __( 'Search Members...', 'buddypress' ),
 			'global_tables'   => array(
 				'table_name_last_activity' => bp_core_get_table_prefix() . 'bp_activity',
