diff --git src/wp-includes/media.php src/wp-includes/media.php
index 0ba67a9..405a989 100644
--- src/wp-includes/media.php
+++ src/wp-includes/media.php
@@ -972,6 +972,11 @@ function wp_calculate_image_srcset( $image_name, $size_array, $image_meta, $atta
 		return false;
 	}
 
+	// Don't add srcset attributes to animated gifs. See #28474.
+	if ( 'image/gif' === $image_sizes['thumbnail']['mime-type'] && false !== strpos( $image_name, $image_meta['file'] ) ) {
+		return false;
+	}
+
 	// Add full size to the '$image_sizes' array.
 	$image_sizes['full'] = array(
 		'width'  => $image_meta['width'],
diff --git tests/phpunit/tests/media.php tests/phpunit/tests/media.php
index aa6cab4..81442b6 100644
--- tests/phpunit/tests/media.php
+++ tests/phpunit/tests/media.php
@@ -949,4 +949,43 @@ EOF;
 		// The content filter should return the image unchanged.
 		$this->assertSame( $image_html, wp_make_content_images_responsive( $image_html ) );
 	}
+
+	/**
+	 * @ticket 33641
+	 * @ticket 34528
+	 */
+	function test_wp_calculate_image_srcset_animated_gifs() {
+		// Mock meta for an animated gif.
+		$image_meta = array(
+			'width' => 1200,
+			'height' => 600,
+			'file' => 'animated.gif',
+			'sizes' => array(
+				'thumbnail' => array(
+					'file' => 'animated-150x150.gif',
+					'width' => 150,
+					'height' => 150,
+					'mime-type' => 'image/gif'
+				),
+				'medium' => array(
+					'file' => 'animated-300x150.gif',
+					'width' => 300,
+					'height' => 150,
+					'mime-type' => 'image/gif'
+				),
+				'large' => array(
+					'file' => 'animated-1024x512.gif',
+					'width' => 1024,
+					'height' => 512,
+					'mime-type' => 'image/gif'
+				),
+			)
+		);
+
+		$image_name = 'http://' . WP_TESTS_DOMAIN . '/wp-content/uploads/' . $image_meta['file'];
+		// Test with soft resized size array.
+		$size_array = array(900, 450);
+
+		$this->assertFalse( wp_calculate_image_srcset( $image_name, $size_array, $image_meta ) );
+	}
 }
