diff --git src/bp-messages/actions/notices.php src/bp-messages/actions/notices.php
index 8a70e56cb..d39a3811a 100644
--- src/bp-messages/actions/notices.php
+++ src/bp-messages/actions/notices.php
@@ -91,4 +91,48 @@ function bp_messages_action_edit_notice() {
 
 	bp_core_redirect( $redirect_to );
 }
-add_action( 'bp_actions', 'bp_messages_action_edit_notice' );
\ No newline at end of file
+add_action( 'bp_actions', 'bp_messages_action_edit_notice' );
+
+/**
+ * Handle user dismissal of sitewide notices.
+ *
+ * @since 9.0.0
+ *
+ * @return bool False on failure.
+ */
+function bp_messages_action_dismiss_notice() {
+
+	// Bail if not viewing a notice dismissal URL.
+	if ( ! bp_is_messages_component() || ! bp_is_current_action( 'notices' ) || 'dismiss' !== sanitize_key( bp_action_variable( 0 ) ) ) {
+		return false;
+	}
+
+	// Bail if the current user isn't logged in.
+	if ( ! is_user_logged_in() ) {
+		return false;
+	}
+
+	// Check the nonce.
+	check_admin_referer( 'messages_dismiss_notice' );
+
+	// Dismiss the notice.
+	$success = bp_messages_dismiss_sitewide_notice();
+
+	// User feedback.
+	if ( $success ) {
+		$feedback = __( 'Notice has been dismissed.', 'buddypress' );
+		$type     = 'success';
+	} else {
+		$feedback = __( 'There was a problem dismissing the notice.', 'buddypress');
+		$type     = 'error';
+	}
+
+	// Add feedback message.
+	bp_core_add_message( $feedback, $type );
+
+	// Redirect.
+	$redirect_to = trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() );
+
+	bp_core_redirect( $redirect_to );
+}
+add_action( 'bp_actions', 'bp_messages_action_dismiss_notice' );
diff --git src/bp-messages/bp-messages-functions.php src/bp-messages/bp-messages-functions.php
index 5cd08b510..07b45fb3b 100644
--- src/bp-messages/bp-messages-functions.php
+++ src/bp-messages/bp-messages-functions.php
@@ -739,3 +739,56 @@ function bp_messages_personal_data_exporter( $email_address, $page ) {
 		'done' => true,
 	);
 }
+
+/**
+ * Dismiss a sitewide notice for a user.
+ *
+ * @since 9.0.0
+ *
+ * @param int $user_id   ID of the user to dismiss the notice for.
+ *                       Defaults to the logged-in user.
+ * @param int $notice_id ID of the notice to be dismissed.
+ *                       Defaults to the currently active notice.
+ * @return bool False on failure, true if notice is dismissed
+ *              (or was already dismissed).
+ */
+function bp_messages_dismiss_sitewide_notice( $user_id = 0, $notice_id = 0 ) {
+	$retval = false;
+	if ( ! $user_id ) {
+		$user_id = bp_loggedin_user_id();
+	}
+	// Bail if no user is set.
+	if ( ! $user_id ) {
+		return $retval;
+	}
+
+	if ( $notice_id ) {
+		$notice = new BP_Messages_Notice( $notice_id );
+	} else {
+		$notice = BP_Messages_Notice::get_active();
+	}
+	// Bail if no notice is set.
+	if ( empty( $notice->id ) ) {
+		return $retval;
+	}
+
+	// Fetch the user's closed notices and add the new item.
+	$closed_notices = bp_get_user_meta( $user_id, 'closed_notices', true );
+	if ( empty( $closed_notices ) || ! is_array( $closed_notices ) ) {
+		$closed_notices = array();
+	}
+
+	if ( in_array( (int) $notice->id, $closed_notices, true ) ) {
+		// The notice has already been dismissed, so there's nothing to do.
+		$retval = true;
+	} else {
+		// Add the notice to the closed_notices meta.
+		$closed_notices[] = (int) $notice->id;
+		$closed_notices   = array_map( 'absint', array_unique( $closed_notices ) );
+		$success          = bp_update_user_meta( $user_id, 'closed_notices', $closed_notices );
+		// The return value from update_user_meta() could be an integer or a boolean.
+		$retval = (bool) $success;
+	}
+
+	return $retval;
+}
diff --git src/bp-messages/bp-messages-template.php src/bp-messages/bp-messages-template.php
index d6971563f..28fd25e9d 100644
--- src/bp-messages/bp-messages-template.php
+++ src/bp-messages/bp-messages-template.php
@@ -1310,6 +1310,35 @@ function bp_message_activate_deactivate_text() {
 		return apply_filters( 'bp_message_activate_deactivate_text', $text );
 	}
 
+/**
+ * Output the URL for dismissing the current notice for the current user.
+ *
+ * @since 9.0.0
+ * @return string URL for dismissing the current notice for the current user.
+ */
+function bp_message_notice_dismiss_link() {
+	echo esc_url( bp_get_message_notice_dismiss_link() );
+}
+	/**
+	 * Get the URL for dismissing the current notice for the current user.
+	 *
+	 * @since 9.0.0
+	 * @return string URL for dismissing the current notice for the current user.
+	 */
+	function bp_get_message_notice_dismiss_link() {
+
+		$link = wp_nonce_url( trailingslashit( bp_loggedin_user_domain() . bp_get_messages_slug() . '/notices/dismiss/' ), 'messages_dismiss_notice' );
+
+		/**
+		 * Filters the URL for dismissing the current notice for the current user.
+		 *
+		 * @since 9.0.0
+		 *
+		 * @param string $link URL for dismissing the current notice.
+		 */
+		return apply_filters( 'bp_get_message_notice_dismiss_link', $link );
+	}
+
 /**
  * Output the messages component slug.
  *
@@ -1359,7 +1388,7 @@ function bp_message_get_notices() {
 			?>
 			<div id="message" class="info notice" rel="n-<?php echo esc_attr( $notice->id ); ?>">
 				<strong><?php bp_message_notice_subject( $notice ); ?></strong>
-				<button type="button" id="close-notice" class="bp-tooltip" data-bp-tooltip="<?php esc_attr_e( 'Dismiss this notice', 'buddypress' ) ?>"><span class="bp-screen-reader-text"><?php _e( 'Dismiss this notice', 'buddypress' ) ?></span> <span aria-hidden="true">&Chi;</span></button>
+				<a href="<?php bp_message_notice_dismiss_link(); ?>" id="close-notice" class="bp-tooltip button" data-bp-tooltip="<?php esc_attr_e( 'Dismiss this notice', 'buddypress' ) ?>"><span class="bp-screen-reader-text"><?php _e( 'Dismiss this notice', 'buddypress' ) ?></span> <span aria-hidden="true">&Chi;</span></a>
 				<?php bp_message_notice_text( $notice ); ?>
 				<?php wp_nonce_field( 'bp_messages_close_notice', 'close-notice-nonce' ); ?>
 			</div>
diff --git src/bp-templates/bp-legacy/buddypress-functions.php src/bp-templates/bp-legacy/buddypress-functions.php
index c27a6597d..2316ab487 100644
--- src/bp-templates/bp-legacy/buddypress-functions.php
+++ src/bp-templates/bp-legacy/buddypress-functions.php
@@ -1623,15 +1623,7 @@ function bp_legacy_theme_ajax_close_notice() {
 		echo "-1<div id='message' class='error'><p>" . __( 'There was a problem closing the notice.', 'buddypress' ) . '</p></div>';
 
 	} else {
-		$user_id    = get_current_user_id();
-		$notice_ids = bp_get_user_meta( $user_id, 'closed_notices', true );
-		if ( ! is_array( $notice_ids ) ) {
-			$notice_ids = array();
-		}
-
-		$notice_ids[] = (int) $_POST['notice_id'];
-
-		bp_update_user_meta( $user_id, 'closed_notices', $notice_ids );
+		bp_messages_dismiss_sitewide_notice( bp_loggedin_user_id(), (int) $_POST['notice_id'] );
 	}
 
 	exit;
diff --git src/bp-templates/bp-legacy/css/buddypress-rtl.css src/bp-templates/bp-legacy/css/buddypress-rtl.css
index df05d6fc6..d99591d63 100644
--- src/bp-templates/bp-legacy/css/buddypress-rtl.css
+++ src/bp-templates/bp-legacy/css/buddypress-rtl.css
@@ -1428,7 +1428,9 @@ fieldset.create-site label {
 }
 
 .bp-site-wide-message #message button,
-.admin-bar-on #message button {
+.bp-site-wide-message #message a.button,
+.admin-bar-on #message button,
+.admin-bar-on #message a.button {
 	font-size: 0.8em;
 	padding: 2px 4px;
 	position: absolute;
@@ -1436,7 +1438,8 @@ fieldset.create-site label {
 	top: 0;
 }
 
-.admin-bar-on #message button {
+.admin-bar-on #message button,
+.admin-bar-on #message a.button {
 	left: 10px;
 	top: 7px;
 }
diff --git src/bp-templates/bp-legacy/css/buddypress.css src/bp-templates/bp-legacy/css/buddypress.css
index 32d669fe9..be7270d71 100644
--- src/bp-templates/bp-legacy/css/buddypress.css
+++ src/bp-templates/bp-legacy/css/buddypress.css
@@ -1428,7 +1428,9 @@ fieldset.create-site label {
 }
 
 .bp-site-wide-message #message button,
-.admin-bar-on #message button {
+.bp-site-wide-message #message a.button,
+.admin-bar-on #message button,
+.admin-bar-on #message a.button {
 	font-size: 0.8em;
 	padding: 2px 4px;
 	position: absolute;
@@ -1436,7 +1438,8 @@ fieldset.create-site label {
 	top: 0;
 }
 
-.admin-bar-on #message button {
+.admin-bar-on #message button,
+.admin-bar-on #message a.button {
 	right: 10px;
 	top: 7px;
 }
diff --git src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php
index 61912fb9b..92164cf80 100644
--- src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php
+++ src/bp-templates/bp-nouveau/buddypress/common/notices/template-notices.php
@@ -12,7 +12,7 @@
 
 	<?php if ( bp_nouveau_has_dismiss_button() ) : ?>
 
-		<button type="button" class="bp-tooltip" data-bp-tooltip="<?php echo esc_attr_x( 'Close', 'button', 'buddypress' ); ?>" aria-label="<?php esc_attr_e( 'Close this notice', 'buddypress' ); ?>" data-bp-close="<?php bp_nouveau_dismiss_button_type(); ?>"><span class="dashicons dashicons-dismiss" aria-hidden="true"></span></button>
+		<a href="<?php bp_message_notice_dismiss_link(); ?>" class="bp-tooltip" data-bp-tooltip="<?php echo esc_attr_x( 'Close', 'button', 'buddypress' ); ?>" aria-label="<?php esc_attr_e( 'Close this notice', 'buddypress' ); ?>" data-bp-close="<?php bp_nouveau_dismiss_button_type(); ?>"><span class="dashicons dashicons-dismiss" aria-hidden="true"></span></a>
 
 	<?php endif; ?>
 </aside>
diff --git src/bp-templates/bp-nouveau/includes/messages/ajax.php src/bp-templates/bp-nouveau/includes/messages/ajax.php
index 7c5f396f8..1ab7b4259 100644
--- src/bp-templates/bp-nouveau/includes/messages/ajax.php
+++ src/bp-templates/bp-nouveau/includes/messages/ajax.php
@@ -766,24 +766,17 @@ function bp_nouveau_ajax_dismiss_sitewide_notice() {
 	}
 
 	// Mark the active notice as closed.
-	$notice = BP_Messages_Notice::get_active();
-
-	if ( ! empty( $notice->id ) ) {
-		$user_id = bp_loggedin_user_id();
-
-		$closed_notices = bp_get_user_meta( $user_id, 'closed_notices', true );
-
-		if ( empty( $closed_notices ) ) {
-			$closed_notices = array();
-		}
-
-		// Add the notice to the array of the user's closed notices.
-		$closed_notices[] = (int) $notice->id;
-		bp_update_user_meta( $user_id, 'closed_notices', array_map( 'absint', array_unique( $closed_notices ) ) );
+	$success = bp_messages_dismiss_sitewide_notice();
 
+	if ( $success ) {
 		wp_send_json_success( array(
 			'feedback' => '<div class="bp-feedback info"><span class="bp-icon" aria-hidden="true"></span><p>' . __( 'Sitewide notice dismissed', 'buddypress' ) . '</p></div>',
 			'type'     => 'success',
 		) );
+	} else {
+		wp_send_json_error( array(
+			'feedback' => '<div class="bp-feedback info"><span class="bp-icon" aria-hidden="true"></span><p>' . __( 'There was a problem dismissing that sitewide notice', 'buddypress' ) . '</p></div>',
+			'type'     => 'error',
+		) );
 	}
 }
