Schalke, one off the bottom of the table, managed to keep Dortmund at bay for 55 minutes until Manuel Akanji broke their resistance.
The win was a relief for Dortmund after their 3-1 defeat to Lazio in the Champions League on Tuesday and lifted them to third in the table with 12 points, behind Bayern Munich in second on goal difference.
Schalke, without a league win since beating Borussia Moenchengladbach on Jan. 17 and without a goal in their last three derbies, have one point.
Only 300 fans watched the game at Dortmund's 80,000 capacity stadium after local authorities lowered the limit due to a surge in COVID-19 cases.
Dortmund finally broke through from a corner when Guerreiro's shot was saved by Frederik Roennow and Akanji, who has recovered from a COVID-19 infection, was quickest to the rebound.
A superb combination between Haaland and Jadon Sancho led to the second six minutes later. The Norwegian played the ball to Sancho who raced forward and sent a perfect through ball to Haaland who lofted it over Roennow.
Hummels completed the win with a powerful header from Guerreiro's corner in the 78th minute.