diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp
index 3cac779d30eba2ca9e8e9a1e83ac3ad67eee7511..376740b9f2e1893704f253b3a36ab87db9fe3f47 100644
--- a/Marlin/temperature.cpp
+++ b/Marlin/temperature.cpp
@@ -67,8 +67,11 @@ float Temperature::current_temperature[HOTENDS] = { 0.0 },
       Temperature::current_temperature_bed = 0.0;
 int16_t Temperature::current_temperature_raw[HOTENDS] = { 0 },
         Temperature::target_temperature[HOTENDS] = { 0 },
-        Temperature::current_temperature_bed_raw = 0,
-        Temperature::target_temperature_bed = 0;
+        Temperature::current_temperature_bed_raw = 0;
+
+#if HAS_HEATER_BED
+  int16_t Temperature::target_temperature_bed = 0;
+#endif
 
 #if ENABLED(TEMP_SENSOR_1_AS_REDUNDANT)
   float Temperature::redundant_temperature = 0.0;
diff --git a/Marlin/temperature.h b/Marlin/temperature.h
index 0e911a70cc60ceedd2cc221b2b2b9d699b9117d4..c75349681a2613e227b92f561f0dc09db9e8a2e9 100644
--- a/Marlin/temperature.h
+++ b/Marlin/temperature.h
@@ -92,6 +92,10 @@ enum ADCSensorState {
 
 #define ACTUAL_ADC_SAMPLES max(int(MIN_ADC_ISR_LOOPS), int(SensorsReady))
 
+#if !HAS_HEATER_BED
+  constexpr int16_t target_temperature_bed = 0;
+#endif
+
 class Temperature {
 
   public:
@@ -100,8 +104,11 @@ class Temperature {
                  current_temperature_bed;
     static int16_t current_temperature_raw[HOTENDS],
                    target_temperature[HOTENDS],
-                   current_temperature_bed_raw,
-                   target_temperature_bed;
+                   current_temperature_bed_raw;
+
+    #if HAS_HEATER_BED
+      static int16_t target_temperature_bed;
+    #endif
 
     static volatile bool in_temp_isr;
 
@@ -382,9 +389,17 @@ class Temperature {
     }
 
     static void setTargetBed(const int16_t celsius) {
-      target_temperature_bed = celsius;
-      #if WATCH_THE_BED
-        start_watching_bed();
+      #if HAS_HEATER_BED
+        target_temperature_bed =
+          #ifdef BED_MAXTEMP
+            min(celsius, BED_MAXTEMP)
+          #else
+            celsius
+          #endif
+        ;
+        #if WATCH_THE_BED
+          start_watching_bed();
+        #endif
       #endif
     }