diff --git src/bp-core/bp-core-filters.php src/bp-core/bp-core-filters.php
index a351ac4..d8a54bf 100644
--- src/bp-core/bp-core-filters.php
+++ src/bp-core/bp-core-filters.php
@@ -646,6 +646,24 @@ function bp_core_activation_signup_user_notification( $user, $user_email, $key,
 add_filter( 'wpmu_signup_user_notification', 'bp_core_activation_signup_user_notification', 1, 4 );
 
 /**
+ * Check what is the best filter to render the document title
+ * for BuddyPress pages
+ *
+ * @since  2.4.0
+ *
+ * @return string the appropriate filter
+ */
+function bp_do_document_title() {
+	$filter = 'wp_title';
+
+	if ( function_exists( 'wp_get_document_title' ) ) {
+		$filter = 'document_title_parts';
+	}
+
+	return $filter;
+}
+
+/**
  * Filter the page title for BuddyPress pages.
  *
  * @since 1.5.0
@@ -790,37 +808,70 @@ function bp_modify_page_title( $title = '', $sep = '&raquo;', $seplocation = 'ri
 
 	// Append the site title to title parts if theme supports title tag
 	if ( true === $title_tag_compatibility ) {
-		$title_parts[] = $blogname;
+		$title_parts['site'] = $blogname;
 
 		if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
-			$title_parts[] = sprintf( __( 'Page %s', 'buddypress' ), max( $paged, $page ) );
+			$title_parts['page'] = sprintf( __( 'Page %s', 'buddypress' ), max( $paged, $page ) );
 		}
 	}
 
-	// Pad the separator with 1 space on each side
-	$prefix = str_pad( $sep, strlen( $sep ) + 2, ' ', STR_PAD_BOTH );
+	if ( ! is_array( $title ) ) {
+		// Pad the separator with 1 space on each side
+		$prefix = str_pad( $sep, strlen( $sep ) + 2, ' ', STR_PAD_BOTH );
 
-	// Join the parts together
-	$new_title = join( $prefix, array_filter( $title_parts ) );
+		// Join the parts together
+		$new_title = join( $prefix, array_filter( $title_parts ) );
 
-	// Append the prefix for pre `title-tag` compatibility
-	if ( false === $title_tag_compatibility ) {
-		$new_title = $new_title . $prefix;
-	}
+		// Append the prefix for pre `title-tag` compatibility
+		if ( false === $title_tag_compatibility ) {
+			$new_title = $new_title . $prefix;
+		}
 
-	/**
-	 * Filters the page title for BuddyPress pages.
-	 *
-	 * @since  1.5.0
-	 *
-	 * @param  string $new_title   The BuddyPress page title.
-	 * @param  string $title       The original WordPress page title.
-	 * @param  string $sep         The title parts separator.
-	 * @param  string $seplocation Location of the separator (left or right).
-	 */
-	return apply_filters( 'bp_modify_page_title', $new_title, $title, $sep, $seplocation );
+		/**
+		 * Filters the page title for BuddyPress pages.
+		 *
+		 * @since  1.5.0
+		 *
+		 * @param  string $new_title   The BuddyPress page title.
+		 * @param  string $title       The original WordPress page title.
+		 * @param  string $sep         The title parts separator.
+		 * @param  string $seplocation Location of the separator (left or right).
+		 */
+		return apply_filters( 'bp_modify_page_title', $new_title, $title, $sep, $seplocation );
+	} else {
+		// Remove site & page to only keep the title of the viewed page
+		$bp_title_parts = array_diff_key( $title_parts, array( 'site' => false, 'page' => false ) );
+
+		// Get the new separator
+		$sep = apply_filters( 'document_title_separator', '-' );
+
+		// Build the new title, we don't need to sanitize it, as WordPress will take care of this.
+		$new_title = array( 'title' => join( " $sep ", $bp_title_parts ) );
+
+		// Add the page argument if needed
+		if ( isset( $title_parts['page'] ) ) {
+			$new_title['page'] = $title_parts['page'];
+		}
+
+		// Add the site argument if needed
+		if ( isset( $title_parts['site'] ) ) {
+			$new_title['site'] = $title_parts['site'];
+		}
+
+		/**
+		 * Filters the document title for BuddyPress pages.
+		 *
+		 * @since  2.4.0
+		 *
+		 * @param  array  $new_title   The BuddyPress page title.
+		 * @param  array  $title       The original WordPress page title.
+		 * @param  string $sep         The title separator
+		 * @param  array  $title_parts The BuddyPress title parts
+		 */
+		return apply_filters( 'bp_modify_document_title', $new_title, $title, $sep, $title_parts );
+	}
 }
-add_filter( 'wp_title', 'bp_modify_page_title', 20, 3 );
+add_filter( bp_do_document_title(), 'bp_modify_page_title', 20, 3 );
 add_filter( 'bp_modify_page_title', 'wptexturize'     );
 add_filter( 'bp_modify_page_title', 'convert_chars'   );
 add_filter( 'bp_modify_page_title', 'esc_html'        );
