diff --git src/wp-includes/class-wp-widget-factory.php src/wp-includes/class-wp-widget-factory.php
index 0616258..c4398b8 100644
--- src/wp-includes/class-wp-widget-factory.php
+++ src/wp-includes/class-wp-widget-factory.php
@@ -23,6 +23,16 @@ class WP_Widget_Factory {
 	 * @var array
 	 */
 	public $widgets = array();
+	
+	
+	/**
+	 * Base Ids for registered widgets.
+	 *
+	 * @since 4.9
+	 * @access public
+	 * @var array
+	 */
+	public $widget_base_ids = array();
 
 	/**
 	 * PHP5 constructor.
@@ -32,6 +42,7 @@ class WP_Widget_Factory {
 	 */
 	public function __construct() {
 		add_action( 'widgets_init', array( $this, '_register_widgets' ), 100 );
+		add_filter( 'sidebars_widgets', array( $this, '_purge_unregistered_widgets' ) );
 	}
 
 	/**
@@ -102,8 +113,11 @@ class WP_Widget_Factory {
 	public function register( $widget ) {
 		if ( $widget instanceof WP_Widget ) {
 			$this->widgets[ $this->hash_object( $widget ) ] = $widget;
+			$this->widget_base_ids[]  = $widget->id_base;
 		} else {
-			$this->widgets[ $widget ] = new $widget();
+			$instance = new $widget();
+			$this->widgets[ $widget ] = $instance;
+			$this->widget_base_ids[]  = $instance->id_base;
 		}
 	}
 
@@ -120,8 +134,10 @@ class WP_Widget_Factory {
 	public function unregister( $widget ) {
 		if ( $widget instanceof WP_Widget ) {
 			unset( $this->widgets[ $this->hash_object( $widget ) ] );
+			unset( $this->widget_base_ids[ $widget->id_base ] );
 		} else {
 			unset( $this->widgets[ $widget ] );
+			unset( $this->widget_base_ids[ $this->widgets[ $widget ]->id_base ] );
 		}
 	}
 
@@ -149,4 +165,26 @@ class WP_Widget_Factory {
 			$this->widgets[$key]->_register();
 		}
 	}
+	
+	
+	/**
+	 * Utility method to purge any widget instances that are not registered.
+	 *
+	 * @since 4.9
+	 * @access public
+	 * @param $sidebars_widgets
+	 *
+	 * @return array $sidebars_widgets
+	 */
+	public function _purge_unregistered_widgets( $sidebars_widgets ) {
+		foreach ( $sidebars_widgets as $sidebar => $widgets ) {
+			for( $i = 0; $i < count ( $widgets ); $i++ ) {
+				$id_base = _get_widget_id_base( $widgets[ $i ] );
+				if ( ! in_array( $id_base, $this->widget_base_ids, true ) ) {
+					unset( $sidebars_widgets[ $sidebar ][ $i ] );
+				}
+			}
+		}
+		return $sidebars_widgets;
+	}
 }
