diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 64d3d1f3505ad450c0808c9150e7cd5c63ebd3c8..5a396bb932ccd0e4be05d81b0f564f3d372d6635 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1033,6 +1033,10 @@ static void axis_is_at_home(int axis) {
     min_pos[axis] = base_min_pos(axis) + home_offset[axis];
     max_pos[axis] = base_max_pos(axis) + home_offset[axis];
   #endif
+
+  #if defined(ENABLE_AUTO_BED_LEVELING) && Z_HOME_DIR < 0
+    if (axis == Z_AXIS) current_position[Z_AXIS] += zprobe_zoffset;
+  #endif
 }
 
 /**
@@ -2041,10 +2045,6 @@ inline void gcode_G28() {
     if (code_seen(axis_codes[Z_AXIS]) && code_has_value())
       current_position[Z_AXIS] = code_value();
 
-    #if defined(ENABLE_AUTO_BED_LEVELING) && (Z_HOME_DIR < 0)
-      if (home_all_axis || homeZ) current_position[Z_AXIS] += zprobe_zoffset;  // Add Z_Probe offset (the distance is negative)
-    #endif
-
     sync_plan_position();
 
   #endif // else DELTA