Index: src/bp-activity/bp-activity-notifications.php
===================================================================
--- src/bp-activity/bp-activity-notifications.php
+++ src/bp-activity/bp-activity-notifications.php
@@ -55,7 +55,7 @@
 				$text   = sprintf( __( 'You have %1$d new replies', 'buddypress' ), (int) $total_items );
 				$amount = 'multiple';
 			} else {
-				$link = add_query_arg( 'nid', (int) $id, bp_activity_get_permalink( $activity_id ) );
+				$link = add_query_arg( 'rid', (int) $id, bp_activity_get_permalink( $activity_id ) );
 				$text = sprintf( __( '%1$s commented on one of your updates', 'buddypress' ), $user_fullname );
 			}
 		break;
@@ -70,8 +70,8 @@
 				$text   = sprintf( __( 'You have %1$d new comment replies', 'buddypress' ), (int) $total_items );
 				$amount = 'multiple';
 			} else {
-				$link = add_query_arg( 'nid', (int) $id, bp_activity_get_permalink( $activity_id ) );
-				$text = sprintf( __( '%1$s replied to one your activity comments', 'buddypress' ), $user_fullname );
+				$link = add_query_arg( 'crid', (int) $id, bp_activity_get_permalink( $activity_id ) );
+				$text = sprintf( __( '%1$s replied to one of your activity comments', 'buddypress' ), $user_fullname );
 			}
 		break;
 	}
@@ -226,9 +226,10 @@
 add_action( 'bp_activity_clear_new_mentions', 'bp_activity_remove_screen_notifications', 10, 1 );
 
 /**
- * Mark at-mention notification as read when user visits the activity with the mention.
+ * Mark notifications as read when a user visits an activity permalink.
  *
  * @since 2.0.0
+ * @since 3.2.0 Marks replies to parent update and replies to an activity comment as read.
  *
  * @param BP_Activity_Activity $activity Activity object.
  */
@@ -239,6 +240,29 @@
 
 	// Mark as read any notifications for the current user related to this activity item.
 	bp_notifications_mark_notifications_by_item_id( bp_loggedin_user_id(), $activity->id, buddypress()->activity->id, 'new_at_mention' );
+
+	$comment_id = 0;
+	// For replies to a parent update.
+	if ( ! empty( $_GET['rid'] ) ) {
+		$comment_id = (int) $_GET['rid'];
+
+	// For replies to an activity comment.
+	} elseif ( ! empty( $_GET['crid'] ) ) {
+		$comment_id = (int) $_GET['crid'];
+	}
+
+	// Mark individual activity reply notification as read.
+	if ( ! empty( $comment_id ) ) {
+		BP_Notifications_Notification::update(
+			array(
+				'is_new' => false
+			),
+			array(
+				'user_id' => bp_loggedin_user_id(),
+				'id'      => $comment_id
+			)
+		);
+	}
 }
 add_action( 'bp_activity_screen_single_activity_permalink', 'bp_activity_remove_screen_notifications_single_activity_permalink' );
 
Index: tests/phpunit/testcases/activity/notifications.php
===================================================================
--- tests/phpunit/testcases/activity/notifications.php
+++ tests/phpunit/testcases/activity/notifications.php
@@ -364,6 +364,41 @@
 
 		$expected_commenter = array( $u3 );
 		$this->assertEquals( $expected_commenter, wp_list_pluck( $u2_notifications, 'secondary_item_id' ) );
+
+		// Attempt to mark 'update_reply' notifications as read for user 1.
+		foreach ( $u1_notifications as $i => $n ) {
+			$n = bp_activity_format_notifications( $n->component_action, $n->item_id, $n->secondary_item_id, 1, 'array', $n->id );
+			if ( ! empty( $n['link'] ) ) {
+				// Remove redirecter for unit tests.
+				$n['link'] = str_replace( '/p/', '/', $n['link'] );
+
+				// Attempt to clear the notification by going to the activity permalink.
+				$this->go_to( $n['link'] );
+			}
+		}
+
+		// Assert that notifications for user 1 are cleared and empty.
+		$this->assertEmpty( BP_Notifications_Notification::get( array(
+			'user_id' => $this->u1,
+		) ) );
+
+		// Attempt to mark 'comment_reply' notifications as read for user 2.
+		$this->set_current_user( $this->u2 );
+		foreach ( $u2_notifications as $i => $n ) {
+			$n = bp_activity_format_notifications( $n->component_action, $n->item_id, $n->secondary_item_id, 1, 'array', $n->id );
+			if ( ! empty( $n['link'] ) ) {
+				// Remove redirecter for unit tests.
+				$n['link'] = str_replace( '/p/', '/', $n['link'] );
+
+				// Attempt to clear the notification by going to the activity permalink.
+				$this->go_to( $n['link'] );
+			}
+		}
+
+		// Assert that notifications for user 2 are cleared and empty.
+		$this->assertEmpty( BP_Notifications_Notification::get( array(
+			'user_id' => $this->u2,
+		) ) );
 	}
 
 	/**
