diff --git src/wp-includes/default-filters.php src/wp-includes/default-filters.php
index 1faa084..98f7b32 100644
--- src/wp-includes/default-filters.php
+++ src/wp-includes/default-filters.php
@@ -388,6 +388,12 @@ add_action( 'admin_menu', '_add_post_type_submenus' );
 add_action( 'before_delete_post', '_reset_front_page_settings_for_post' );
 add_action( 'wp_trash_post',      '_reset_front_page_settings_for_post' );
 
+// Post meta
+add_action( 'updated_postmeta',  '_collect_updated_post_meta_post_ids', 10, 2 );
+add_action( 'deleted_post_meta', '_collect_updated_post_meta_post_ids', 10, 2 );
+add_action( 'added_post_meta',   '_collect_updated_post_meta_post_ids', 10, 2 );
+add_action( 'shutdown',          'update_post_modified_dates' );
+
 // Post Formats
 add_filter( 'request', '_post_format_request' );
 add_filter( 'term_link', '_post_format_link', 10, 3 );
diff --git src/wp-includes/post.php src/wp-includes/post.php
index 6535d4b..63f4499 100644
--- src/wp-includes/post.php
+++ src/wp-includes/post.php
@@ -5535,6 +5535,65 @@ function clean_post_cache( $post ) {
 }
 
 /**
+ * Internal function that collects all updated post IDs when meta was changed.
+ *
+ * Modified post date will be updated later on the shutdown hook.
+ *
+ * @since 4.5
+ * @access private
+ *
+ * @see update_post_modified_dates()
+ * @global array $updated_post_ids List of posts whose meta data has changed.
+ *
+ * @param int|array $meta_id Single modified meta ID or array of such.
+ * @param int       $post_id Post ID.
+ */
+function _collect_updated_post_meta_post_ids( $meta_id, $post_id ) {
+	global $updated_post_ids;
+
+	$updated_post_ids = (array) $updated_post_ids;
+	$updated_post_ids[] = (int) $post_id;
+}
+
+/**
+ * Helper function for updating the post modified date.
+ *
+ * Iterates over the IDS of all posts whose meta data has changed.
+ *
+ * @since 4.5.0
+ *
+ * @global array $updated_post_ids List of posts whose meta data has changed.
+ */
+function update_post_modified_dates() {
+	global $updated_post_ids;
+
+	$updated_post_ids = array_unique( (array) $updated_post_ids );
+
+	// Check if there are any posts with modified meta data.
+	if ( ! empty( $updated_post_ids ) ) {
+		global $wpdb;
+
+		// Update the post_modified dates for each modified post.
+		$wpdb->query(
+			$wpdb->prepare(
+				"UPDATE $wpdb->posts
+					SET `post_modified` = %s,
+					`post_modified_gmt` = %s
+					WHERE `ID` IN(" . implode( ',', $updated_post_ids ) . ")",
+				current_time( 'mysql' ),
+				current_time( 'mysql', 1 )
+			)
+		);
+
+		foreach ( $updated_post_ids as $post_id ) {
+			clean_post_cache( $post_id );
+		}
+	}
+
+	$updated_post_ids = array();
+}
+
+/**
  * Call major cache updating functions for list of Post objects.
  *
  * @since 1.5.0
diff --git tests/phpunit/tests/meta/postModifiedDate.php tests/phpunit/tests/meta/postModifiedDate.php
new file mode 100644
index 0000000..1f8d619
--- /dev/null
+++ tests/phpunit/tests/meta/postModifiedDate.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * @group meta
+ */
+class Tests_Meta_Post_Modified_Date extends WP_UnitTestCase {
+	protected static $posts;
+
+	public static function wpSetUpBeforeClass( $factory ) {
+		self::$posts = $factory->post->create_many( 3, array(
+			'post_date'     => '2000-01-01 00:00:00',
+			'post_date_gmt' => '2000-01-01 00:00:00',
+		) );
+	}
+
+	public static function wpTearDownAfterClass() {
+		foreach ( self::$posts as $post ) {
+			wp_delete_post( $post );
+		}
+	}
+
+	/**
+	 * @ticket 24266
+	 */
+	function test_add_post_meta_changes_post_modified_date() {
+		foreach ( self::$posts as $post ) {
+			add_post_meta( $post, '_some_meta', 'abc' );
+		}
+
+		update_post_modified_dates();
+
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( current_time( 'mysql' ), get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( current_time( 'mysql', 1 ), get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+		}
+	}
+
+	/**
+	 * @ticket 24266
+	 */
+	function test_add_unique_post_meta_changes_post_modified_date() {
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( '2000-01-01 00:00:00', get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( '2000-01-01 00:00:00', get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+			add_post_meta( $post, '_some_meta', 'abc', true );
+		}
+
+		update_post_modified_dates();
+
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( current_time( 'mysql' ), get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( current_time( 'mysql', 1 ), get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+		}
+	}
+
+	/**
+	 * @ticket 24266
+	 */
+	function test_update_post_meta_changes_post_modified_date() {
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( '2000-01-01 00:00:00', get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( '2000-01-01 00:00:00', get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+			update_post_meta( $post, '_some_meta', 'abc' );
+		}
+
+		update_post_modified_dates();
+
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( current_time( 'mysql' ), get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( current_time( 'mysql', 1 ), get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+		}
+	}
+
+	/**
+	 * @ticket 24266
+	 */
+	function test_delete_post_meta_changes_post_modified_date() {
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( '2000-01-01 00:00:00', get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( '2000-01-01 00:00:00', get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+			add_post_meta( $post, '_some_meta', 'abc' );
+		}
+
+		$GLOBALS['update_post_ids'] = array();
+
+		foreach ( self::$posts as $post ) {
+			delete_post_meta( $post, '_some_meta' );
+		}
+
+		update_post_modified_dates();
+
+		foreach ( self::$posts as $post ) {
+			$this->assertSame( current_time( 'mysql' ), get_post_modified_time( 'Y-m-d H:i:s', false, $post ) );
+			$this->assertSame( current_time( 'mysql', 1 ), get_post_modified_time( 'Y-m-d H:i:s', true, $post ) );
+		}
+	}
+}
diff --git tests/phpunit/tests/post/meta.php tests/phpunit/tests/post/meta.php
index 82c5c12..255dfb5 100644
--- tests/phpunit/tests/post/meta.php
+++ tests/phpunit/tests/post/meta.php
@@ -235,6 +235,5 @@ class Tests_Post_Meta extends WP_UnitTestCase {
 
 		//Check they exists
 		$this->assertEquals($funky_meta, get_post_meta($this->post_id, 'test_funky_post_meta', true));
-
 	}
 }
