diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb
index eac34efdc9..f99d949c39 100644
--- a/app/lib/activitypub/activity/undo.rb
+++ b/app/lib/activitypub/activity/undo.rb
@@ -135,7 +135,12 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity
     if shortcode.present?
       emoji_tag = @object['tag'].is_a?(Array) ? @object['tag']&.first : @object['tag']
 
-      emoji = CustomEmoji.find_by(shortcode: shortcode, domain: @account.domain) if emoji_tag.present? && emoji_tag['id'].present?
+      emoji = nil
+      if emoji_tag.present? && emoji_tag['id'].present?
+        domain = URI.split(emoji_tag['id'])[2]
+        domain = nil if domain == Rails.configuration.x.local_domain || domain == Rails.configuration.x.web_domain
+        emoji = CustomEmoji.find_by(shortcode: shortcode, domain: domain) if emoji_tag.present? && emoji_tag['id'].present?
+      end
 
       emoji_reaction = @original_status.emoji_reactions.where(account: @account, name: shortcode, custom_emoji: emoji).first
 
diff --git a/spec/lib/activitypub/activity/undo_spec.rb b/spec/lib/activitypub/activity/undo_spec.rb
index feda725654..cd12c5bd0c 100644
--- a/spec/lib/activitypub/activity/undo_spec.rb
+++ b/spec/lib/activitypub/activity/undo_spec.rb
@@ -5,7 +5,8 @@ require 'rails_helper'
 RSpec.describe ActivityPub::Activity::Undo do
   subject { described_class.new(json, sender) }
 
-  let(:sender) { Fabricate(:account, domain: 'example.com') }
+  let(:sender_domain) { 'example.com' }
+  let(:sender) { Fabricate(:account, domain: sender_domain) }
 
   let(:json) do
     {
@@ -218,6 +219,8 @@ RSpec.describe ActivityPub::Activity::Undo do
       let(:status) { Fabricate(:status) }
 
       let(:content) { '😀' }
+      let(:name) { '😀' }
+      let(:tag) { nil }
       let(:object_json) do
         {
           id: 'bar',
@@ -225,20 +228,69 @@ RSpec.describe ActivityPub::Activity::Undo do
           actor: ActivityPub::TagManager.instance.uri_for(sender),
           object: ActivityPub::TagManager.instance.uri_for(status),
           content: content,
+          tag: tag,
         }
       end
+      let(:custom_emoji) { nil }
 
       before do
         Fabricate(:favourite, account: sender, status: status)
-        Fabricate(:emoji_reaction, account: sender, status: status, name: content)
+        Fabricate(:emoji_reaction, account: sender, status: status, name: name, custom_emoji: custom_emoji)
       end
 
       it 'delete emoji reaction' do
         subject.perform
-        reaction = EmojiReaction.find_by(account: sender, status: status)
-        expect(reaction).to be_nil
+        expect(sender.emoji_reacted?(status)).to be false
         expect(sender.favourited?(status)).to be true
       end
+
+      context 'with custom emoji' do
+        let(:content) { ':tinking:' }
+        let(:name) { 'tinking' }
+        let(:tag) do
+          {
+            id: custom_emoji_uri,
+            type: 'Emoji',
+            icon: {
+              url: 'http://example.com/emoji.png',
+            },
+            name: name,
+          }
+        end
+        let(:custom_emoji_domain) { 'example.com' }
+        let(:custom_emoji_uri) { "https://#{custom_emoji_domain}/aaa" }
+        let(:custom_emoji) { Fabricate(:custom_emoji, uri: custom_emoji_uri, domain: custom_emoji_domain, shortcode: name) }
+
+        it 'delete emoji reaction' do
+          subject.perform
+          expect(sender.emoji_reacted?(status)).to be false
+          expect(sender.favourited?(status)).to be true
+        end
+
+        context 'when third server' do
+          let(:sender_domain) { 'foo.bar' }
+
+          it 'delete emoji reaction' do
+            subject.perform
+            expect(sender.emoji_reacted?(status)).to be false
+            expect(sender.favourited?(status)).to be true
+          end
+        end
+
+        context 'when local' do
+          let(:custom_emoji_domain) { 'cb6e6126.ngrok.io' }
+
+          before do
+            custom_emoji.update(domain: nil, uri: nil)
+          end
+
+          it 'delete emoji reaction' do
+            subject.perform
+            expect(sender.emoji_reacted?(status)).to be false
+            expect(sender.favourited?(status)).to be true
+          end
+        end
+      end
     end
   end
 end