diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index 69a2efebb1f6c5bc5290a206ae2802905c2b01e4..4d748ac5bf85c587586300d01cfae10f98d77bcd 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -254,7 +254,7 @@ def diff_file_path_text(diff_file, max: 60)
   end
 
   def code_navigation_path(diffs)
-    Gitlab::CodeNavigationPath.new(merge_request.project, diffs.diff_refs&.head_sha)
+    Gitlab::CodeNavigationPath.new(merge_request.project, merge_request.diff_head_sha)
   end
 
   def conflicts
diff --git a/app/serializers/diffs_entity.rb b/app/serializers/diffs_entity.rb
index f573bbe838577b35ba7ac019c205cd99c74e7f4d..4bc6644a5cb50f78a58b8cc55aa226691a26c415 100644
--- a/app/serializers/diffs_entity.rb
+++ b/app/serializers/diffs_entity.rb
@@ -79,7 +79,9 @@ class DiffsEntity < Grape::Entity
   end
 
   expose :definition_path_prefix do |diffs|
-    project_blob_path(merge_request.project, diffs.diff_refs&.head_sha)
+    next unless merge_request.diff_head_sha
+
+    project_blob_path(merge_request.project, merge_request.diff_head_sha)
   end
 
   def merge_request
diff --git a/changelogs/unreleased/id-fix-no-route-error.yml b/changelogs/unreleased/id-fix-no-route-error.yml
new file mode 100644
index 0000000000000000000000000000000000000000..85061ed731e9e73e9ccb86e9b67c9a10728817da
--- /dev/null
+++ b/changelogs/unreleased/id-fix-no-route-error.yml
@@ -0,0 +1,5 @@
+---
+title: Fix viewing blobs for broken MRs
+merge_request: 52483
+author:
+type: fixed
diff --git a/spec/serializers/diffs_entity_spec.rb b/spec/serializers/diffs_entity_spec.rb
index 7569493573b9c836a9a4944176b407247b738149..a7446f14745745b22485481402151e1a6bfff860 100644
--- a/spec/serializers/diffs_entity_spec.rb
+++ b/spec/serializers/diffs_entity_spec.rb
@@ -3,10 +3,11 @@
 require 'spec_helper'
 
 RSpec.describe DiffsEntity do
-  let(:user) { create(:user) }
-  let(:project) { create(:project, :repository) }
+  let_it_be(:user) { create(:user) }
+  let_it_be(:project) { create(:project, :repository) }
+  let_it_be(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) }
+
   let(:request) { EntityRequest.new(project: project, current_user: user) }
-  let(:merge_request) { create(:merge_request_with_diffs, target_project: project, source_project: project) }
   let(:merge_request_diffs) { merge_request.merge_request_diffs }
   let(:options) do
     { request: request, merge_request: merge_request, merge_request_diffs: merge_request_diffs }
@@ -30,6 +31,14 @@
       )
     end
 
+    context 'broken merge request' do
+      let(:merge_request) { create(:merge_request, :invalid, target_project: project, source_project: project) }
+
+      it 'renders without errors' do
+        expect { subject }.not_to raise_error
+      end
+    end
+
     context "when a commit_id is passed" do
       let(:commits) { merge_request.commits }
       let(:entity) do