Marco Reus and Pierre-Emerick Aubameyang were on target as Borussia Dortmund beat Hoffenheim 2-1 in a dramatic encounter to steal a march on their rivals in the race for automatic Champions League qualification.

The two sides have been jostling over third place in the Bundesliga, which guarantees entry into the Champions League group stages, for much of the season and this was a typically action-packed affair at Signal Iduna Park.

Reus was involved in much of the drama, breaking the deadlock in contentious circumstances, while also picking up a booking that could have been red and winning a first-half penalty that Aubameyang scuffed poorly wide.

Aubameyang made amends with what proved to be a crucial second goal in the 82nd minute to derail Hoffenheim's momentum, although the hosts withstood a nervy ending when Julian Nagelsmann's men hit back through Andrej Kramaric's spot-kick.

However, Hoffenheim, this season's surprise package, could not complete the comeback and now sit two points below Dortmund in fourth position with two matches remaining.

It means Hoffenheim require a favour from either Augsburg or Werder Bremen - opponents for both Dortmund and Hoffenheim - if they are to avoid going into the Champions League play-off round.

It took just four minutes for Reus to fire Dortmund in front, the Germany international running in behind on the left - setting off from a seemingly offside position - and sliding a finish through Oliver Baumann's legs.
 
Reus, who was sent off in the reverse fixture in December, was then perhaps fortunate to only see yellow as he lashed out at Steven Zuber near the right-hand touchline.
 
Hoffenheim's frustration with the officials was heightened after 13 minutes as referee Felix Brych pointed to the spot after Reus' cross from the left struck Pavel Kaderabek's arm, but Aubameyang screwed the penalty horribly wide.

With the profligacy of the home forward keeping Hoffenheim in an already hot-tempered affair, Nagelsmann's side sought a swift response and Sandro Wagner nodded straight at Roman Burki.
 
However, the game's frantic start soon gave way to a more measured spell, reaching half-time without further major incident as both sides lacked fluency in the final third.

Hoffenheim started the second period on the front foot and Kerem Demirbay forced Burki into an unorthodox save with a strike from distance, but the visitors' attacking intent left space at the back for Dortmund to exploit.

Only a smart reaction stop from Baumann denied Reus a second with a fine left-footed volley, before Matthias Ginter drilled an effort over the top.

Reus also lacked accuracy from a good position inside the area, but Dortmund did double their lead with eight minutes remaining when Raphael Guerreiro toe-poked Lukasz Piszczek's centre against the post and Aubameyang was unmarked to turn the rebound into the net and atone for his earlier miss.

But, just as Dortmund looked set to cruise through the remaining minutes, Ginter dragged Wagner to the ground in the box and handed Kramaric an opportunity that he, unlike Aubameyang, would not pass up.

Dortmund saw out the final stages safely, though, as Hoffenheim were unable to spoil the day for Thomas Tuchel's side.

 

Key Opta stats:

- Sven Bender has won his 100th Bundesliga game. He managed the 100 wins in 157 games which is a new club record. The former record was by Kevin Groskreutz who needed 158 games to win 100. 
- Since his comeback on matchday 29 Marco Reus scored in five of his six competitive games.
- Pierre-Emerick Aubameyang missed three of his last four penalties in the Bundesliga. His first five had all found the back of the net.
- Aubameyang scored his 28th goal this season which is a personal record. He is the first African player to score 28 goals in a Bundesliga season.