diff --git a/app/services/favourite_service.rb b/app/services/favourite_service.rb
index 98f08d32b87ddace6ac509aebc4cd8aaffa50592..ab7f8aea12431f7d0f642d7c3d3ac076b5e61e52 100644
--- a/app/services/favourite_service.rb
+++ b/app/services/favourite_service.rb
@@ -5,7 +5,7 @@ class FavouriteService < BaseService
   # @return [Favourite]
   def call(account, status)
     favourite = Favourite.create!(account: account, status: status)
-    account.ping!(account_url(account, format: 'atom'), [Rails.configuration.x.hub_url])
+    HubPingWorker.perform_async(account.id)
 
     if status.local?
       NotificationMailer.favourite(status, account).deliver_later unless status.account.blocking?(account)
diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb
index f44d533980e4e0898ccb6b34a22dca7fa0857111..4caf55078e579a979bda5485f68b83e717c61224 100644
--- a/app/services/follow_service.rb
+++ b/app/services/follow_service.rb
@@ -17,7 +17,7 @@ class FollowService < BaseService
     end
 
     merge_into_timeline(target_account, source_account)
-    source_account.ping!(account_url(source_account, format: 'atom'), [Rails.configuration.x.hub_url])
+    HubPingWorker.perform_async(source_account.id)
     follow
   end
 
diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index 6e53c7e526fcb7e5a4c5272ea94b192b3a6f2c1c..5cac6b70aace7d27a2e1cf42d786f553c72e61ea 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -10,7 +10,7 @@ class PostStatusService < BaseService
     attach_media(status, media_ids)
     process_mentions_service.call(status)
     DistributionWorker.perform_async(status.id)
-    account.ping!(account_url(account, format: 'atom'), [Rails.configuration.x.hub_url])
+    HubPingWorker.perform_async(account.id)
     status
   end
 
diff --git a/app/services/reblog_service.rb b/app/services/reblog_service.rb
index 56c59cb18e8e84a680477fae9c2adcfffcec352c..627d4e0e81c5fac4cb2fcb6da08fd6b5e46276d0 100644
--- a/app/services/reblog_service.rb
+++ b/app/services/reblog_service.rb
@@ -6,7 +6,7 @@ class ReblogService < BaseService
   def call(account, reblogged_status)
     reblog = account.statuses.create!(reblog: reblogged_status, text: '')
     DistributionWorker.perform_async(reblog.id)
-    account.ping!(account_url(account, format: 'atom'), [Rails.configuration.x.hub_url])
+    HubPingWorker.perform_async(account.id)
 
     if reblogged_status.local?
       NotificationMailer.reblog(reblogged_status, account).deliver_later unless reblogged_status.account.blocking?(account)
diff --git a/app/workers/hub_ping_worker.rb b/app/workers/hub_ping_worker.rb
new file mode 100644
index 0000000000000000000000000000000000000000..57d716c97faed9d60f1fdbb3c20aaff91036e0a4
--- /dev/null
+++ b/app/workers/hub_ping_worker.rb
@@ -0,0 +1,9 @@
+class HubPingWorker
+  include Sidekiq::Worker
+  include RoutingHelper
+
+  def perform(account_id)
+    account = Account.find(account_id)
+    account.ping!(account_url(account, format: 'atom'), [Rails.configuration.x.hub_url])
+  end
+end