diff --git a/app/services/ci/expire_pipeline_cache_service.rb b/app/services/ci/expire_pipeline_cache_service.rb
index 15597eb7209f93e9e1681ee939b19a398e7c569c..e0c98e17e8f77245e7bb34d196fdd5c77139c857 100644
--- a/app/services/ci/expire_pipeline_cache_service.rb
+++ b/app/services/ci/expire_pipeline_cache_service.rb
@@ -50,6 +50,10 @@ def each_pipelines_merge_request_path(pipeline)
         yield(pipelines_project_merge_request_path(merge_request))
         yield(merge_request_widget_path(merge_request))
       end
+
+      pipeline.project.merge_requests.by_merged_or_merge_or_squash_commit_sha(pipeline.sha).each do |merge_request|
+        yield(merge_request_widget_path(merge_request))
+      end
     end
 
     def graphql_pipeline_path(pipeline)
diff --git a/spec/services/ci/expire_pipeline_cache_service_spec.rb b/spec/services/ci/expire_pipeline_cache_service_spec.rb
index a74b820de0969b373e951f0dc4a44a9cc320f866..758f923ce92a7c45fd0541724ed4b581198d4146 100644
--- a/spec/services/ci/expire_pipeline_cache_service_spec.rb
+++ b/spec/services/ci/expire_pipeline_cache_service_spec.rb
@@ -6,6 +6,7 @@
   let_it_be(:user) { create(:user) }
   let_it_be(:project) { create(:project) }
   let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
+  let_it_be(:merge_pipeline) { create(:ci_pipeline, :detached_merge_request_pipeline, project: project) }
 
   subject { described_class.new }
 
@@ -45,6 +46,17 @@
       subject.execute(merge_request.all_pipelines.last)
     end
 
+    it 'invalidates Etag caching for merge request that pipeline runs on its merged commit' do
+      merge_request = create(:merge_request, merge_commit_sha: pipeline.sha, source_project: pipeline.project)
+      project = merge_request.target_project
+
+      merge_request_widget_path = "/#{project.full_path}/-/merge_requests/#{merge_request.iid}/cached_widget.json"
+
+      expect_touched_etag_caching_paths(merge_request_widget_path)
+
+      subject.execute(pipeline)
+    end
+
     it 'updates the cached status for a project' do
       expect(Gitlab::Cache::Ci::ProjectPipelineStatus).to receive(:update_for_pipeline).with(pipeline)