Mainz beat Nuremberg to cut Dortmund's lead
Goals from Andre Schuerrle, Nikolce Noveski and Sami Allagui moved Mainz on to 30 points from 14 games, with Dortmund hosting bottom team Borussia Moenchengladbach on Saturday.
After losing three matches in a row, surprise package Mainz have now won their last two league games to regain the momentum they built up after winning a record-equalling seven games at the start of the season.
"It was clear this would not be an easy game and that is the way it turned out," said Mainz coach Thomas Tuchel on a freezing evening with the pitch covered in a thin layer of snow.
"But we stayed patient and compact, although the 3-0 does not really reflect the game and it is a bit too high," said the league's youngest manager at 37.
Mainz did not have many chances in an evenly balanced first half but they caught Nuremberg's defence napping when Schuerrle tapped in from close range in the 27th minute for the lead.
The visitors almost levelled three minutes after the restart when Ilkay Gundogan thundered a drive just over the bar.
However, soon after Christian Fuchs again turned provider, the Austrian whipping a low free kick from the left into the box for Noveski to slide home from close range to grab his first goal of the season in the 54th.
Nuremberg went close again when Jense Hegeler's header hit the bar in the 72nd before Mainz sealed the win as Allagui was picked out by goalkeeper Christian Wetklo.
The substitute clipped the ball over a defender and then chipped visiting keeper Raphael Schaefer for his third goal in two games four minutes from time.
Nuremberg have now lost three games in a row to drop to 10th on 18 points and, with a tough schedule until the winter break against Dortmund, Hoffenheim and Hanover, they could lose even more ground after a good start to the season.
On Saturday, third-placed Bayer Leverkusen, on 25 points, travel to fifth-placed Hoffenheim while struggling champions Bayern Munich, in eighth, host Eintracht Frankfurt.