diff --git a/app/controllers/admin/communication/website/menu/items_controller.rb b/app/controllers/admin/communication/website/menu/items_controller.rb
index b996c1f3bced137ce73341731db2647513ac8c8b..35e393a59443812cd1e142da2ce18684929db45f 100644
--- a/app/controllers/admin/communication/website/menu/items_controller.rb
+++ b/app/controllers/admin/communication/website/menu/items_controller.rb
@@ -6,12 +6,14 @@ class Admin::Communication::Website::Menu::ItemsController < Admin::Communicatio
     parent_id = params[:parentId].blank? ? nil : params[:parentId]
     ids = params[:ids] || []
     ids.each.with_index do |id, index|
-      category = @menu.items.find(id)
-      category.update(
+      item = @menu.items.find(id)
+      item.update(
         parent_id: parent_id,
-        position: index + 1
+        position: index + 1,
+        skip_publication_callback: true
       )
     end
+    @menu.force_publish!
   end
 
   def show
diff --git a/app/models/communication/website/menu/item.rb b/app/models/communication/website/menu/item.rb
index 347d3fcfcbb4cfc965568b00052a97137bf8c96f..39f079a918c9584caeeaf63cb0fba2a3ae152110 100644
--- a/app/models/communication/website/menu/item.rb
+++ b/app/models/communication/website/menu/item.rb
@@ -34,9 +34,11 @@
 class Communication::Website::Menu::Item < ApplicationRecord
   include WithTree
 
+  attr_accessor :skip_publication_callback
+
   belongs_to :university
   belongs_to :website, class_name: 'Communication::Website'
-  belongs_to :menu, class_name: 'Communication::Website::Menu', touch: true
+  belongs_to :menu, class_name: 'Communication::Website::Menu'
   belongs_to :parent, class_name: 'Communication::Website::Menu::Item', optional: true
   belongs_to :about, polymorphic: true, optional: true
   has_many :children,
@@ -60,6 +62,7 @@ class Communication::Website::Menu::Item < ApplicationRecord
   validates :about, presence: true, if: :has_about?
 
   before_create :set_position
+  after_commit :force_publish_menu, unless: :skip_publication_callback
 
   scope :ordered, -> { order(position: :asc) }
 
@@ -112,6 +115,10 @@ class Communication::Website::Menu::Item < ApplicationRecord
     kind_page? || kind_program? || kind_news_category? || kind_news_article?
   end
 
+  def force_publish_menu
+    menu.force_publish!
+  end
+
   protected
 
   def set_position