diff --git a/lib/banzai/reference_parser/base_parser.rb b/lib/banzai/reference_parser/base_parser.rb
index dabf71d6aeb29c95ee20dea067ab76e23e1cb0c6..c2503fa2adc231bfa895535427decf4c6a0c5fac 100644
--- a/lib/banzai/reference_parser/base_parser.rb
+++ b/lib/banzai/reference_parser/base_parser.rb
@@ -136,7 +136,8 @@ module Banzai
 
         nodes.each_with_object({}) do |node, hash|
           if node.has_attribute?(attribute)
-            hash[node] = objects_by_id[node.attr(attribute).to_i]
+            obj = objects_by_id[node.attr(attribute).to_i]
+            hash[node] = obj if obj
           end
         end
       end
diff --git a/spec/lib/banzai/reference_parser/base_parser_spec.rb b/spec/lib/banzai/reference_parser/base_parser_spec.rb
index a3141894c74589b483b5d1bd1f48fe0acce1ebd5..d5746107ee19ac3495f3fc82e05f30da2b9e8dcf 100644
--- a/spec/lib/banzai/reference_parser/base_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/base_parser_spec.rb
@@ -114,8 +114,27 @@ describe Banzai::ReferenceParser::BaseParser, lib: true do
       expect(hash).to eq({ link => user })
     end
 
-    it 'returns an empty Hash when the list of nodes is empty' do
-      expect(subject.grouped_objects_for_nodes([], User, 'data-user')).to eq({})
+    it 'returns an empty Hash when entry does not exist in the database' do
+      link = double(:link)
+
+      expect(link).to receive(:has_attribute?).
+          with('data-user').
+          and_return(true)
+
+      expect(link).to receive(:attr).
+          with('data-user').
+          and_return('1')
+
+      nodes = [link]
+      bad_id = user.id + 100
+
+      expect(subject).to receive(:unique_attribute_values).
+          with(nodes, 'data-user').
+          and_return([bad_id.to_s])
+
+      hash = subject.grouped_objects_for_nodes(nodes, User, 'data-user')
+
+      expect(hash).to eq({})
     end
   end