diff --git a/includes/class-main.php b/includes/class-main.php
index b68c9495a3e611ef269def1ea3df5114d3a13d7b..68672c29fccc1f957cfe4b777622915ea923bcfa 100644
--- a/includes/class-main.php
+++ b/includes/class-main.php
@@ -245,18 +245,19 @@ class Main {
 	 * @param array  $extra_keys  Optional. Array of additional action keys to remove from redirect URL.
 	 */
 	public static function do_admin_redirect( $return_key, $succeeded = false, $extra_keys = array() ) {
-		$redirect = wp_unslash( $_SERVER['REQUEST_URI'] );
+		$redirect = wp_get_referer();
+
+		if ( ! $redirect ) {
+			$redirect = wp_unslash( $_SERVER['REQUEST_URI'] );
+			$redirect = remove_query_arg( array( '_wp_http_referer', '_wpnonce' ), $redirect );
+		}
 
 		// Remove arguments that could re-trigger this bulk action.
-		$action_keys = array( '_wp_http_referer', '_wpnonce', 'action', 'action2', 'bulk_edit' );
+		// Taken from wp-admin/edit.php.
+		$action_keys = array( 'action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view' );
 		$action_keys = array_merge( $action_keys, $extra_keys );
 		$redirect    = remove_query_arg( $action_keys, $redirect );
 
-		// Also remove bulk action's arguments, to avoid a resubmit
-		$args = array( 'post', 'sticky', '_status' );
-		$args = array_merge( $args, self::get_supported_vars() );
-		$redirect = remove_query_arg( $args, $redirect );
-
 		// Add a flag for the admin notice.
 		$redirect = add_query_arg( $return_key, $succeeded ? 1 : -1, $redirect );