diff --git a/lib/banzai/filter/footnote_filter.rb b/lib/banzai/filter/footnote_filter.rb
index 9752797643705e92ec19dd41a8329c8cf649ceab..de133774dfa7fbdbbdb263e3ea4f3b4034c4173d 100644
--- a/lib/banzai/filter/footnote_filter.rb
+++ b/lib/banzai/filter/footnote_filter.rb
@@ -29,21 +29,30 @@ module Banzai
         # Sanitization stripped off the section wrapper - add it back in
         first_footnote.parent.wrap('<section class="footnotes">')
         rand_suffix = "-#{random_number}"
+        modified_footnotes = {}
 
         doc.css('sup > a[id]').each do |link_node|
           ref_num       = link_node[:id].delete_prefix(FOOTNOTE_LINK_ID_PREFIX)
           footnote_node = doc.at_css("li[id=#{fn_id(ref_num)}]")
-          backref_node  = footnote_node.at_css("a[href=\"##{fnref_id(ref_num)}\"]")
 
-          if ref_num =~ INTEGER_PATTERN && footnote_node && backref_node
-            link_node[:href]    += rand_suffix
-            link_node[:id]      += rand_suffix
-            footnote_node[:id]  += rand_suffix
-            backref_node[:href] += rand_suffix
+          if INTEGER_PATTERN.match?(ref_num) && (footnote_node || modified_footnotes[ref_num])
+            link_node[:href] += rand_suffix
+            link_node[:id]   += rand_suffix
 
             # Sanitization stripped off class - add it back in
             link_node.parent.append_class('footnote-ref')
-            backref_node.append_class('footnote-backref')
+
+            unless modified_footnotes[ref_num]
+              footnote_node[:id] += rand_suffix
+              backref_node        = footnote_node.at_css("a[href=\"##{fnref_id(ref_num)}\"]")
+
+              if backref_node
+                backref_node[:href] += rand_suffix
+                backref_node.append_class('footnote-backref')
+              end
+
+              modified_footnotes[ref_num] = true
+            end
           end
         end
 
diff --git a/spec/lib/banzai/filter/footnote_filter_spec.rb b/spec/lib/banzai/filter/footnote_filter_spec.rb
index 2e50e4e23518e08ead859f544cb38cc770192c9b..c6dcb4e46fd5df07cba88a5c54128e74b6866d60 100644
--- a/spec/lib/banzai/filter/footnote_filter_spec.rb
+++ b/spec/lib/banzai/filter/footnote_filter_spec.rb
@@ -11,6 +11,7 @@ describe Banzai::Filter::FootnoteFilter do
   let(:footnote) do
     <<~EOF
       <p>first<sup><a href="#fn1" id="fnref1">1</a></sup> and second<sup><a href="#fn2" id="fnref2">2</a></sup></p>
+      <p>same reference<sup><a href="#fn1" id="fnref1">1</a></sup></p>
       <ol>
       <li id="fn1">
       <p>one <a href="#fnref1">鈫�</a></p>
@@ -25,6 +26,7 @@ describe Banzai::Filter::FootnoteFilter do
   let(:filtered_footnote) do
     <<~EOF
       <p>first<sup class="footnote-ref"><a href="#fn1-#{identifier}" id="fnref1-#{identifier}">1</a></sup> and second<sup class="footnote-ref"><a href="#fn2-#{identifier}" id="fnref2-#{identifier}">2</a></sup></p>
+      <p>same reference<sup class="footnote-ref"><a href="#fn1-#{identifier}" id="fnref1-#{identifier}">1</a></sup></p>
       <section class="footnotes"><ol>
       <li id="fn1-#{identifier}">
       <p>one <a href="#fnref1-#{identifier}" class="footnote-backref">鈫�</a></p>