Dortmund win derby to go eight points clear
Described by coach Jurgen Klopp as "greedy", Dortmund charged eight points clear of Bayern Munich, who were held 0-0 at home by Mainz, and need two points from their final three games to clinch the crown.
Dortmund have now beaten the second and third-placed teams in the space of four days following their 1-0 victory over Bayern on Wednesday.
Jefferson Farfan gave Schalke an early lead in the Ruhr derby but Lukasz Piszczek equalised in the 17th minute of a physical, unattractive game.
Sebastian Kehl took advantage of poor defending to score the winner in the 63rd minute as Dortmund completed the Bundesliga double over third-placed Schalke and extended their unbeaten league run to 25 games, a record for a single season.
"It's madness. We couldn't imagine beforehand that we would achieve this," Klopp said of his low-profile Dortmund side.
"Today was a character test of the highest level. But this team is never satisfied and is incredibly greedy."
Bayern struggled to break down mid-table Mainz and their best efforts came late in the first half when Anatoliy Tymoshchuk hit the post and Ivica Olic missed an excellent chance from close range.
The Bavarians, who host Real Madrid in a Champions League semi-final first leg on Tuesday, were jeered off the pitch by an otherwise subdued 69,000 crowd at the Allianz Arena.
"We had our chances, it's the sort of game you have to win 1-0," said Bayern coach Jupp Heynckes. "Anyone who has played football can comprehend what it is like to play every three or four days."
Captain Bastian Schweinsteiger said: "Now we have to concentrate on Tuesday. We have to cross new barriers but with the fans behind us we can pull it off."
Dortmund, who last tasted league defeat against Hanover in September, have 72 points from 31 games.
Bayern are on 64 points while Schalke, still on course for a place in next season's Champions League, have 57.
Second from bottom Hertha Berlin scored three goals, had a player sent off and survived a penalty miss - all in a 15-minute period during a 3-3 draw at Bayer Leverkusen.
Elsewhere, struggling Hamburg SV secured a much-needed 1-0 victory over Hannover 96 while bottom club Kaiserslautern's 2-0 defeat at home to Nuremberg left them all but relegated.
Augsburg boosted their survival hopes with a 2-1 victory at VfL Wolfsburg.
Hamburg, the only ever-present team in the Bundesliga since it was founded in 1963, are 14th on 34 points, one ahead of Augsburg.
The 140th Ruhr derby began in dramatic style as Peru forward Farfan picked up a loose ball and blasted his shot through a crowd of players to give Schalke a ninth-minute lead.
Piszczek replied eight minutes later, the Pole smashing in a