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..42946d25e0 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..94db519071 100644
--- a/src/wp-includes/widgets/class-wp-widget-archives.php
+++ b/src/wp-includes/widgets/class-wp-widget-archives.php
@@ -121,33 +121,56 @@ 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 );
+
+			if ( 'html5' === $format ) {
+				?>
+				<nav role="navigation">
+				<?php
+			}
 			?>
-		</ul>
+			<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
+			}
 		}
 
 		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 60bf6ef819..b485a75dd9 100644
--- a/src/wp-includes/widgets/class-wp-widget-categories.php
+++ b/src/wp-includes/widgets/class-wp-widget-categories.php
@@ -111,24 +111,46 @@ 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 );
+
+			if ( 'html5' === $format ) {
+				?>
+				<nav role="navigation">
+				<?php
+			}
 			?>
-		</ul>
+			<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
+			}
 		}
 
 		echo $args['after_widget'];
diff --git a/src/wp-includes/widgets/class-wp-widget-meta.php b/src/wp-includes/widgets/class-wp-widget-meta.php
index 33742b368d..b21e33abf5 100644
--- a/src/wp-includes/widgets/class-wp-widget-meta.php
+++ b/src/wp-includes/widgets/class-wp-widget-meta.php
@@ -53,6 +53,25 @@ class WP_Widget_Meta extends WP_Widget {
 			echo $args['before_title'] . $title . $args['after_title'];
 		}
 		?>
+			<?php
+            $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 role="navigation">
+				<?php
+			}
+            ?>
 			<ul>
 			<?php wp_register(); ?>
 			<li><?php wp_loginout(); ?></li>
@@ -82,6 +101,11 @@ class WP_Widget_Meta extends WP_Widget {
 			?>
 			</ul>
 			<?php
+			if ( 'html5' === $format ) {
+				?>
+				</nav>
+				<?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..41d5083561 100644
--- a/src/wp-includes/widgets/class-wp-widget-pages.php
+++ b/src/wp-includes/widgets/class-wp-widget-pages.php
@@ -89,11 +89,34 @@ 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 );
+			
+			if ( 'html5' === $format ) {
+				?>
+				<nav role="navigation">
+				<?php
+			}
 			?>
-		<ul>
-			<?php echo $out; ?>
-		</ul>
+			<ul>
+				<?php echo $out; ?>
+			</ul>
 			<?php
+			if ( 'html5' === $format ) {
+				?>
+				</nav>
+				<?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 e9da5c1bdc..b906d586f4 100644
--- a/src/wp-includes/widgets/class-wp-widget-recent-comments.php
+++ b/src/wp-includes/widgets/class-wp-widget-recent-comments.php
@@ -125,6 +125,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.)
@@ -143,6 +159,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..b36836c42b 100644
--- a/src/wp-includes/widgets/class-wp-widget-recent-posts.php
+++ b/src/wp-includes/widgets/class-wp-widget-recent-posts.php
@@ -89,6 +89,24 @@ class WP_Widget_Recent_Posts 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 ) {
+			?>
+			<nav role="navigation">
+			<?php
+		}
 		?>
 		<ul>
 			<?php foreach ( $r->posts as $recent_post ) : ?>
@@ -110,6 +128,11 @@ class WP_Widget_Recent_Posts extends WP_Widget {
 			<?php endforeach; ?>
 		</ul>
 		<?php
+		if ( 'html5' === $format ) {
+			?>
+			</nav>
+			<?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 4e2810a178..c9ec5b8df1 100644
--- a/src/wp-includes/widgets/class-wp-widget-rss.php
+++ b/src/wp-includes/widgets/class-wp-widget-rss.php
@@ -94,7 +94,26 @@ 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 ) ) {
