Borussia Dortmund substitute Erling Haaland headed a stoppage-time winner to snatch a 1-0 victory at Fortuna Duesseldorf on Saturday but its title hopes grew slimmer as Bayern Munich kept up its winning run.

The Norwegian teenager, who was brought in on the hour, scored with the last play of the game to lift second-placed Dortmund to 66 points from 31 games.

READ | Erling Haaland will move to Premier League but 'it might take him some time'

Leader Bayern Munich is on 73 after beating Borussia Moenchengladbach 2-1 and needs only one more win from its last three games to secure an eighth straight title.

Dortmund never hit top form and survived several scares before Raphael Guerreiro volleyed home just past the hour. The effort, however, was cancelled out by a VAR review for handball after the ball was deflected onto Guerreiro's shoulder.

Despite the return of defender Mats Hummels the Dortmund backline was far from solid.

Fortuna, in the relegation playoff spot, almost took the lead after twice hitting the post through substitute Steven Skrzybski — first in the 82nd minute with a low shot and eight minutes later again after he broke clear.

But Haaland, back from a knee injury, bagged his 11th goal in 12 league games and made sure of a last-gasp win when he rose high to connect with Manuel Akanji's cross.

The win maintained Dortmund's four-point gap over third-placed RB Leipzig, which won 2-0 at Hoffenheim on Friday.

READ | Bundesliga: Leipzig rescued by VAR then score twice in Hoffenheim win

Werder Bremen enjoyed a big win in the battle to avoid the drop, beating bottom club Paderborn 5-1 away with two goals from Davy Klaassen to join Fortuna on 28 points. Paderborn has 20.

Promoted Union Berlin's 2-1 win at Cologne lifted them to 13th on 35 with another Bundesliga season all but assured.