Max Meyer put the hosts ahead in the 59th minute after Sead Kolasinac's long-range effort hit the woodwork and Klaas-Jan Huntelaar, back in the side after injury, had his rebound saved by Kevin Trapp.
Trapp denied the Dutch striker again seven minutes later by saving his penalty but the hosts kept pouring forward in a one-sided affair with Brazil coach Felipe Scolari in the stands of the Auf Schalke arena.
Schalke hit the bar again through Leon Goretzka in the 81st but winger Jefferson Farfan, also returning from injury after a six-week absence, curled a superb free kick into the top corner to seal the win in stoppage time.
"I was not satisfied at all in the first half because we did a lot of things wrong," said Schalke coach Jens Keller, whose future at the club has been the subject of specualtion during a rollercoaster season which has produced a strong finish.
Schalke are unbeaten in seven league games and have won all four of their last home matches.
"I told my players exactly that at half time but after that we improved greatly. A lot of respect for that," Keller told reporters.
As for Huntelaar's fourth spot-kick miss out of his last six, Keller said: "The chances of him taking another penalty are diminishing."
Schalke have 58 points with four games left, trailing only on goal difference behind Dortmund who travel to champions and bitter rivals Bayern Munich on Saturday.
Fourth-placed Borussia Moenchengladbach, who host struggling VfB Stuttgart on Saturday, are 10 points off second spot.
- Sports & Recreation
- Klaas-Jan Huntelaar
- Jens Keller