Dortmund eased past their neighbours in a fiery Ruhr valley derby after the start was briefly delayed due to flares lit in the stands, and are a point behind along with Bayer Leverkusen, winners 2-1 over Augsburg.
Dortmund, whose visiting fans lit flares in the stands prompting the referee to delay the start, silenced the 60,000 crowd with a lightning quick five-move break completed by Pierre-Emerick Aubameyang in the 14th minute.
Schalke's Kevin-Prince Boateng missed the biggest chance to level when his penalty was saved by keeper Roman Weidenfeller.
A sublime left-footed drive from Nuri Sahin six minutes after the restart gave Dortmund a two-goal lead before Max Meyer pulled one back for the hosts but Jakub Blaszczykowski completed the win in the 74th minute leaving Schalke in fifth on 14 points.
Mario Mandzukic scored twice as a nervous Bayern Munich struggled past Hertha Berlin 3-2.
Substitute Mandzukic, who had come on for injured Arjen Robben in the 26th minute, headed in three minutes later to cancel out a quick Hertha lead through Adrian Ramos.
Bayern, who had 35 efforts on goal in their 4-0 Champions League win over Viktoria Plzen on Wednesday, needed almost 20 minutes to get their first shot on target with keeper Thomas Kraft punching Toni Kroos' powerful drive wide.
Aggressive Hertha came close to a second goal with Anis Ben-Hatira's sensational 30 metre chip over keeper Manuel Neuer that bounced off the bar but Mandzukic levelled the score with a well-timed header at the far post.
The Croat added another goal in the 51st and fellow substitute Mario Goetze's headed in three minutes later. Ben-Hatira set up a nervous second half, cutting the deficit in the 58th but Hertha, the first team in the league to score twice against Bayern this season, were unable to find an equaliser.
The victory stretched Bayern's unbeaten league run to 35 games, one short of the record held by Hamburg SV and last season's treble winners lead the standings with 26 points.
Hanover 96 slumped to a 4-1 defeat against Hoffenheim and had two players sent off, including striker Mame Diouf, who set a Bundesliga record for the fastest dismissal for two bookings after being shown two yellow cards in the opening 12 minutes.
Mainz 05 moved up to 10th spot after grabbing their first win in seven games, a 2-0 victory over promoted Eintracht Braunschweig, who remain in bottom place on four points.