diff --git a/src/wp-includes/widgets/class-wp-nav-menu-widget.php b/src/wp-includes/widgets/class-wp-nav-menu-widget.php
index 1edaeac464..9972e2a2c7 100644
--- a/src/wp-includes/widgets/class-wp-nav-menu-widget.php
+++ b/src/wp-includes/widgets/class-wp-nav-menu-widget.php
@@ -57,10 +57,30 @@ class WP_Nav_Menu_Widget extends WP_Widget {
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
 
-		$nav_menu_args = array(
-			'fallback_cb' => '',
-			'menu'        => $nav_menu,
-		);
+		$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+		/**
+		 * Filters the HTML format of widgets with navigation links.
+		 *
+		 * @since 5.5.0
+		 *
+		 * @param string $format The type of markup to use in widgets with navigation links.
+		 *                       Accepts 'html5', 'xhtml'.
+		 */
+		$format = apply_filters( 'navigation_widgets_format', $format );
+
+		if ( 'html5' === $format ) {
+			$nav_menu_args = array(
+				'fallback_cb' => '',
+				'menu'        => $nav_menu,
+				'items_wrap'  => '<nav role="navigation"><ul id="%1$s" class="%2$s">%3$s</ul></nav>',
+			);
+		} else {
+			$nav_menu_args = array(
+				'fallback_cb' => '',
+				'menu'        => $nav_menu,
+			);
+		}
 
 		/**
 		 * Filters the arguments for the Navigation Menu widget.
diff --git a/src/wp-includes/widgets/class-wp-widget-archives.php b/src/wp-includes/widgets/class-wp-widget-archives.php
index 2dfd60c7a5..fa2911564b 100644
--- a/src/wp-includes/widgets/class-wp-widget-archives.php
+++ b/src/wp-includes/widgets/class-wp-widget-archives.php
@@ -121,35 +121,54 @@ class WP_Widget_Archives extends WP_Widget {
 /* ]]> */
 </script>
 
-		<?php } else { ?>
-		<ul>
-			<?php
-			wp_get_archives(
-				/**
-				 * Filters the arguments for the Archives widget.
-				 *
-				 * @since 2.8.0
-				 * @since 4.9.0 Added the `$instance` parameter.
-				 *
-				 * @see wp_get_archives()
-				 *
-				 * @param array $args     An array of Archives option arguments.
-				 * @param array $instance Array of settings for the current widget.
-				 */
-				apply_filters(
-					'widget_archives_args',
-					array(
-						'type'            => 'monthly',
-						'show_post_count' => $count,
-					),
-					$instance
-				)
-			);
+		<?php } else {
+			$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+			/**
+			 * Filters the HTML format of widgets with navigation links.
+			 *
+			 * @since 5.5.0
+			 *
+			 * @param string $format The type of markup to use in widgets with navigation links.
+			 *                       Accepts 'html5', 'xhtml'.
+			 */
+			$format = apply_filters( 'navigation_widgets_format', $format );
 			?>
-		</ul>
-			<?php
-		}
 
+			<?php if ( 'html5' === $format ) : ?>
+				<nav role="navigation">
+			<?php endif; ?>
+
+			<ul>
+				<?php
+				wp_get_archives(
+					/**
+					 * Filters the arguments for the Archives widget.
+					 *
+					 * @since 2.8.0
+					 * @since 4.9.0 Added the `$instance` parameter.
+					 *
+					 * @see wp_get_archives()
+					 *
+					 * @param array $args     An array of Archives option arguments.
+					 * @param array $instance Array of settings for the current widget.
+					 */
+					apply_filters(
+						'widget_archives_args',
+						array(
+							'type'            => 'monthly',
+							'show_post_count' => $count,
+						),
+						$instance
+					)
+				);
+				?>
+			</ul>
+			<?php if ( 'html5' === $format ) : ?>
+				</nav>
+			<?php endif; ?>
+
+		<?php
 		echo $args['after_widget'];
 	}
 
diff --git a/src/wp-includes/widgets/class-wp-widget-categories.php b/src/wp-includes/widgets/class-wp-widget-categories.php
index 0d53139cc9..236086cf56 100644
--- a/src/wp-includes/widgets/class-wp-widget-categories.php
+++ b/src/wp-includes/widgets/class-wp-widget-categories.php
@@ -109,23 +109,44 @@ class WP_Widget_Categories extends WP_Widget {
 
 			<?php
 		} else {
-			?>
-		<ul>
-			<?php
-			$cat_args['title_li'] = '';
+			$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
 
 			/**
-			 * Filters the arguments for the Categories widget.
+			 * Filters the HTML format of widgets with navigation links.
 			 *
-			 * @since 2.8.0
-			 * @since 4.9.0 Added the `$instance` parameter.
+			 * @since 5.5.0
 			 *
-			 * @param array $cat_args An array of Categories widget options.
-			 * @param array $instance Array of settings for the current widget.
+			 * @param string $format The type of markup to use in widgets with navigation links.
+			 *                       Accepts 'html5', 'xhtml'.
 			 */
-			wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
+			$format = apply_filters( 'navigation_widgets_format', $format );
 			?>
-		</ul>
+
+			<?php if ( 'html5' === $format ) : ?>
+				<nav role="navigation">
+			<?php endif; ?>
+
+			<ul>
+				<?php
+				$cat_args['title_li'] = '';
+
+				/**
+				 * Filters the arguments for the Categories widget.
+				 *
+				 * @since 2.8.0
+				 * @since 4.9.0 Added the `$instance` parameter.
+				 *
+				 * @param array $cat_args An array of Categories widget options.
+				 * @param array $instance Array of settings for the current widget.
+				 */
+				wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
+				?>
+			</ul>
+
+			<?php if ( 'html5' === $format ) : ?>
+				</nav>
+			<?php endif; ?>
+
 			<?php
 		}
 
diff --git a/src/wp-includes/widgets/class-wp-widget-meta.php b/src/wp-includes/widgets/class-wp-widget-meta.php
index 33742b368d..e838d2828c 100644
--- a/src/wp-includes/widgets/class-wp-widget-meta.php
+++ b/src/wp-includes/widgets/class-wp-widget-meta.php
@@ -52,12 +52,29 @@ class WP_Widget_Meta extends WP_Widget {
 		if ( $title ) {
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
-		?>
-			<ul>
+
+		$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+		/**
+		 * Filters the HTML format of widgets with navigation links.
+		 *
+		 * @since 5.5.0
+		 *
+		 * @param string $format The type of markup to use in widgets with navigation links.
+		 *                       Accepts 'html5', 'xhtml'.
+		 */
+        $format = apply_filters( 'navigation_widgets_format', $format );
+
+		<?php if ( 'html5' === $format ) : ?>
+			<nav role="navigation">
+		<?php endif; ?>
+
+		<ul>
 			<?php wp_register(); ?>
 			<li><?php wp_loginout(); ?></li>
 			<li><a href="<?php echo esc_url( get_bloginfo( 'rss2_url' ) ); ?>"><?php _e( 'Entries feed' ); ?></a></li>
 			<li><a href="<?php echo esc_url( get_bloginfo( 'comments_rss2_url' ) ); ?>"><?php _e( 'Comments feed' ); ?></a></li>
+
 			<?php
 			/**
 			 * Filters the "WordPress.org" list item HTML in the Meta widget.
@@ -80,10 +97,15 @@ class WP_Widget_Meta extends WP_Widget {
 
 			wp_meta();
 			?>
-			</ul>
-			<?php
 
-			echo $args['after_widget'];
+		</ul>
+
+		<?php if ( 'html5' === $format ) : ?>
+			</nav>
+		<?php endif; ?>
+
+		<?php
+		echo $args['after_widget'];
 	}
 
 	/**
diff --git a/src/wp-includes/widgets/class-wp-widget-pages.php b/src/wp-includes/widgets/class-wp-widget-pages.php
index 94af11d658..fa0daeffe2 100644
--- a/src/wp-includes/widgets/class-wp-widget-pages.php
+++ b/src/wp-includes/widgets/class-wp-widget-pages.php
@@ -89,10 +89,32 @@ class WP_Widget_Pages extends WP_Widget {
 			if ( $title ) {
 				echo $args['before_title'] . $title . $args['after_title'];
 			}
+
+			$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+			/**
+			 * Filters the HTML format of widgets with navigation links.
+			 *
+			 * @since 5.5.0
+			 *
+			 * @param string $format The type of markup to use in widgets with navigation links.
+			 *                       Accepts 'html5', 'xhtml'.
+			 */
+			$format = apply_filters( 'navigation_widgets_format', $format );
 			?>
-		<ul>
-			<?php echo $out; ?>
-		</ul>
+
+			<?php if ( 'html5' === $format ) : ?>
+				<nav role="navigation">
+			<?php endif; ?>
+
+			<ul>
+				<?php echo $out; ?>
+			</ul>
+
+			<?php if ( 'html5' === $format ) : ?>
+				</nav>
+			<?php endif; ?>
+
 			<?php
 			echo $args['after_widget'];
 		}
diff --git a/src/wp-includes/widgets/class-wp-widget-recent-comments.php b/src/wp-includes/widgets/class-wp-widget-recent-comments.php
index fd8ae05fdc..b53494a6f8 100644
--- a/src/wp-includes/widgets/class-wp-widget-recent-comments.php
+++ b/src/wp-includes/widgets/class-wp-widget-recent-comments.php
@@ -123,6 +123,22 @@ class WP_Widget_Recent_Comments extends WP_Widget {
 		$recent_comments_id = ( $first_instance ) ? 'recentcomments' : "recentcomments-{$this->number}";
 		$first_instance     = false;
 
+		$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+		/**
+		 * Filters the HTML format of widgets with navigation links.
+		 *
+		 * @since 5.5.0
+		 *
+		 * @param string $format The type of markup to use in widgets with navigation links.
+		 *                       Accepts 'html5', 'xhtml'.
+		 */
+		$format = apply_filters( 'navigation_widgets_format', $format );
+
+		if ( 'html5' === $format ) {
+			$output .= '<nav role="navigation">';
+		}
+
 		$output .= '<ul id="' . esc_attr( $recent_comments_id ) . '">';
 		if ( is_array( $comments ) && $comments ) {
 			// Prime cache for associated posts. (Prime post term cache if we need it for permalinks.)
@@ -141,6 +157,11 @@ class WP_Widget_Recent_Comments extends WP_Widget {
 			}
 		}
 		$output .= '</ul>';
+
+		if ( 'html5' === $format ) {
+			$output .= '</nav>';
+		}
+
 		$output .= $args['after_widget'];
 
 		echo $output;
diff --git a/src/wp-includes/widgets/class-wp-widget-recent-posts.php b/src/wp-includes/widgets/class-wp-widget-recent-posts.php
index 9767e3b4fc..672115c1ee 100644
--- a/src/wp-includes/widgets/class-wp-widget-recent-posts.php
+++ b/src/wp-includes/widgets/class-wp-widget-recent-posts.php
@@ -84,12 +84,31 @@ class WP_Widget_Recent_Posts extends WP_Widget {
 			return;
 		}
 		?>
+
 		<?php echo $args['before_widget']; ?>
+
 		<?php
 		if ( $title ) {
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
+
+		$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+		/**
+		 * Filters the HTML format of widgets with navigation links.
+		 *
+		 * @since 5.5.0
+		 *
+		 * @param string $format The type of markup to use in widgets with navigation links.
+		 *                       Accepts 'html5', 'xhtml'.
+		 */
+		$format = apply_filters( 'navigation_widgets_format', $format );
 		?>
+
+		<?php if ( 'html5' === $format ) : ?>
+			<nav role="navigation">
+		<?php endif; ?>
+
 		<ul>
 			<?php foreach ( $r->posts as $recent_post ) : ?>
 				<?php
@@ -109,6 +128,10 @@ class WP_Widget_Recent_Posts extends WP_Widget {
 				</li>
 			<?php endforeach; ?>
 		</ul>
+		<?php if ( 'html5' === $format ) : ?>
+			</nav>
+		<?php endif; ?>
+
 		<?php
 		echo $args['after_widget'];
 	}
diff --git a/src/wp-includes/widgets/class-wp-widget-rss.php b/src/wp-includes/widgets/class-wp-widget-rss.php
index 385bccfd7e..591b88f555 100644
--- a/src/wp-includes/widgets/class-wp-widget-rss.php
+++ b/src/wp-includes/widgets/class-wp-widget-rss.php
@@ -94,7 +94,29 @@ class WP_Widget_RSS extends WP_Widget {
 		if ( $title ) {
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
+
+		$format = current_theme_supports( 'html5', 'navigation' ) ? 'html5' : 'xhtml';
+
+		/**
+		 * Filters the HTML format of widgets with navigation links.
+		 *
+		 * @since 5.5.0
+		 *
+		 * @param string $format The type of markup to use in widgets with navigation links.
+		 *                       Accepts 'html5', 'xhtml'.
+		 */
+		$format = apply_filters( 'navigation_widgets_format', $format );
+
+		if ( 'html5' === $format ) {
+			echo '<nav role="navigation">';
+		}
+
 		wp_widget_rss_output( $rss, $instance );
+
+		if ( 'html5' === $format ) {
+			echo '</nav>';
+		}
+
 		echo $args['after_widget'];
 
 		if ( ! is_wp_error( $rss ) ) {
