Index: src/bp-activity/bp-activity-embeds.php
===================================================================
--- src/bp-activity/bp-activity-embeds.php
+++ src/bp-activity/bp-activity-embeds.php
@@ -267,7 +267,7 @@
 			$float_width = 350;
 
 			// Set up thumb.
-			$content = sprintf( '<div class="thumb" style="max-width:%1$spx">%2$s<a href="%3$s" rel="nofollow" onclick="top.location.href=\'%3$s\'"><img src="%4$s" alt="" /></a></div>', $thumb_width, $play_icon, esc_url( $url ), esc_url( $thumbnail ) );
+			$content = sprintf( '<div class="thumb" style="max-width:%1$spx">%2$s<a href="%3$s" rel="nofollow" onclick="top.location.href=\'%3$s\'"><img loading="lazy" src="%4$s" alt="" /></a></div>', $thumb_width, $play_icon, esc_url( $url ), esc_url( $thumbnail ) );
 
 			// Show title.
 			if ( isset( $oembed->title ) ) {
Index: src/bp-activity/bp-activity-filters.php
===================================================================
--- src/bp-activity/bp-activity-filters.php
+++ src/bp-activity/bp-activity-filters.php
@@ -93,6 +93,9 @@
 add_filter( 'bp_get_activity_latest_update_excerpt', 'bp_activity_make_nofollow_filter' );
 add_filter( 'bp_get_activity_feed_item_description', 'bp_activity_make_nofollow_filter' );
 
+add_filter( 'bp_get_activity_content_body', 'bp_core_add_loading_lazy_attribute' );
+add_filter( 'bp_activity_comment_content',  'bp_core_add_loading_lazy_attribute' );
+
 add_filter( 'pre_comment_content',                   'bp_activity_at_name_filter' );
 add_filter( 'the_content',                           'bp_activity_at_name_filter' );
 add_filter( 'bp_activity_get_embed_excerpt',         'bp_activity_at_name_filter' );
Index: src/bp-core/bp-core-filters.php
===================================================================
--- src/bp-core/bp-core-filters.php
+++ src/bp-core/bp-core-filters.php
@@ -59,6 +59,9 @@
 add_filter( 'bp_email_set_content_plaintext', 'wp_strip_all_tags', 6 );
 add_filter( 'bp_email_set_subject', 'sanitize_text_field', 6 );
 
+// Avatars.
+add_filter( 'bp_core_fetch_avatar', 'bp_core_add_loading_lazy_attribute' );
+
 /**
  * Template Compatibility.
  *
@@ -899,6 +902,24 @@
 	return $edit_link;
 }
 
+/**
+ * Add 'loading="lazy"' attribute into images and iframes.
+ *
+ * @since 7.0.0
+ *
+ * @string $content Content to inject attribute into.
+ * @return string
+ */
+function bp_core_add_loading_lazy_attribute( $content = '' ) {
+	if ( false === strpos( $content, '<img ' ) && false === strpos( $content, '<iframe ' ) ) {
+		return $content;
+	}
+
+	$content = str_replace( '<img ',    '<img loading="lazy" ',    $content );
+	$content = str_replace( '<iframe ', '<iframe loading="lazy" ', $content );
+	return $content;
+}
+
 /**
  * Should BuddyPress load the mentions scripts and related assets, including results to prime the
  * mentions suggestions?
Index: src/bp-groups/bp-groups-blocks.php
===================================================================
--- src/bp-groups/bp-groups-blocks.php
+++ src/bp-groups/bp-groups-blocks.php
@@ -110,7 +110,7 @@
 		$avatar_container = sprintf(
 			'<div class="item-header-avatar">
 				<a href="%1$s">
-					<img src="%2$s" alt="%3$s" class="avatar">
+					<img loading="lazy" src="%2$s" alt="%3$s" class="avatar">
 				</a>
 			</div>',
 			esc_url( $group_link ),
Index: src/bp-groups/classes/class-bp-groups-component.php
===================================================================
--- src/bp-groups/classes/class-bp-groups-component.php
+++ src/bp-groups/classes/class-bp-groups-component.php
@@ -892,7 +892,7 @@
 				) );
 
 				if ( empty( $bp->bp_options_avatar ) ) {
-					$bp->bp_options_avatar = '<img src="' . esc_url( bp_core_avatar_default_thumb() ) . '" alt="' . esc_attr__( 'No Group Profile Photo', 'buddypress' ) . '" class="avatar" />';
+					$bp->bp_options_avatar = '<img loading="lazy" src="' . esc_url( bp_core_avatar_default_thumb() ) . '" alt="' . esc_attr__( 'No Group Profile Photo', 'buddypress' ) . '" class="avatar" />';
 				}
 			}
 		}
Index: src/bp-members/bp-members-blocks.php
===================================================================
--- src/bp-members/bp-members-blocks.php
+++ src/bp-members/bp-members-blocks.php
@@ -106,7 +106,7 @@
 		$avatar_container = sprintf(
 			'<div class="item-header-avatar">
 				<a href="%1$s">
-					<img src="%2$s" alt="%3$s" class="avatar">
+					<img loading="lazy" src="%2$s" alt="%3$s" class="avatar">
 				</a>
 			</div>',
 			esc_url( $member_link ),
Index: src/bp-members/bp-members-filters.php
===================================================================
--- src/bp-members/bp-members-filters.php
+++ src/bp-members/bp-members-filters.php
@@ -21,6 +21,9 @@
 // Filter the user registration URL to point to BuddyPress's registration page.
 add_filter( 'register_url', 'bp_get_signup_page' );
 
+// Avatars.
+add_filter( 'bp_get_signup_avatar', 'bp_core_add_loading_lazy_attribute' );
+
 /**
  * Load additional sign-up sanitization filters on bp_loaded.
  *
