diff --git a/src/wp-admin/js/updates.js b/src/wp-admin/js/updates.js
index e1d963a..c0a36da 100644
--- a/src/wp-admin/js/updates.js
+++ b/src/wp-admin/js/updates.js
@@ -2033,7 +2033,7 @@
 		 * @since 4.6.0
 		 */
 		$pluginInstallSearch.on( 'keyup input', _.debounce( function( event, eventtype ) {
-			var $searchTab = $( '.plugin-install-search' ), data, searchLocation;
+			var $searchTab = $( '.plugin-install-search' ), data, searchLocation, currentLocation = location.href, urlSearchString = wp.urlParam( 's', currentLocation );
 
 			data = {
 				_ajax_nonce: wp.updates.ajaxNonce,
@@ -2042,7 +2042,7 @@
 				type:        $( '#typeselector' ).val(),
 				pagenow:     pagenow
 			};
-			searchLocation = location.href.split( '?' )[ 0 ] + '?' + $.param( _.omit( data, [ '_ajax_nonce', 'pagenow' ] ) );
+			searchLocation = currentLocation.split( '?' )[ 0 ] + '?' + $.param( _.omit( data, [ '_ajax_nonce', 'pagenow' ] ) );
 
 			// Clear on escape.
 			if ( 'keyup' === event.type && 27 === event.which ) {
@@ -2056,7 +2056,8 @@
 				wp.updates.searchTerm = data.s;
 			}
 
-			if ( window.history && window.history.pushState ) {
+
+			if ( urlSearchString != event.target.value && window.history && window.history.pushState ) {
 				window.history.pushState( null, '', searchLocation );
 			}
 
@@ -2106,6 +2107,7 @@
 		 * @since 4.6.0
 		 */
 		$pluginSearch.on( 'keyup input', _.debounce( function( event ) {
+			var currentLocation = location.href, urlSearchString = wp.urlParam( 's', currentLocation );
 			var data = {
 				_ajax_nonce: wp.updates.ajaxNonce,
 				s:           event.target.value,
@@ -2123,7 +2125,7 @@
 				wp.updates.searchTerm = data.s;
 			}
 
-			if ( window.history && window.history.pushState ) {
+			if ( urlSearchString != event.target.value &&  window.history && window.history.pushState ) {
 				window.history.pushState( null, '', location.href.split( '?' )[ 0 ] + '?s=' + data.s );
 			}
 
@@ -2298,5 +2300,23 @@
 		 * @since 4.2.0
 		 */
 		$( window ).on( 'beforeunload', wp.updates.beforeunload );
+
+		/**
+		 * Window popstate for search plugins
+		 */
+		$( window ).on( 'popstate', function ( event ) {
+
+			var bodyElem = $( 'body' ), currentLocation = location.href, urlSearchString = wp.urlParam( 's', currentLocation );
+
+			if ( bodyElem.hasClass( "plugins-php" ) ) {
+				$pluginSearch.val( urlSearchString );
+				$pluginSearch.trigger( 'input' );
+			}
+
+			if ( bodyElem.hasClass( "plugin-install-php" ) ) {
+				$pluginInstallSearch.val( urlSearchString );
+				$pluginInstallSearch.trigger( 'input' );
+			}
+		} );
 	} );
 })( jQuery, window.wp, _.extend( window._wpUpdatesSettings, window._wpUpdatesItemCounts || {} ) );
diff --git a/src/wp-includes/js/wp-util.js b/src/wp-includes/js/wp-util.js
index 527441d..d90d615 100644
--- a/src/wp-includes/js/wp-util.js
+++ b/src/wp-includes/js/wp-util.js
@@ -35,6 +35,27 @@ window.wp = window.wp || {};
 		};
 	});
 
+	/**
+	 * wp.urlParam( name, url )
+	 *
+	 * Fetch parameters from given URL
+	 *
+	 * @param  {string} name   A parameter name to fetch value from url.
+	 *                       For example, "param1" for example.com?param1=value1&param2=value2
+	 *
+	 * @param  {string} url   Url to fetch parameters
+	 *                       For example, example.com?param1=value1&param2=value2
+	 *
+	 * @return {string}    Return value of given parameter name from url
+	 */
+	wp.urlParam = function ( name, url ) {
+		var results = new RegExp( '[\?&]' + name + '=([^&#]*)' ).exec( url );
+		if ( 'undefined' === typeof results || null == results ) {
+			return "";
+		}
+		return results[1] || "";
+	};
+
 	// wp.ajax
 	// ------
 	//
