Real Madrid held off a determined fightback by Borussia Dortmund to secure a place in the semi-finals of the Champions League.

Real won the first leg 3-0 and should have sealed the tie, but Angel Di Maria's early penalty was saved.

From then on, the hosts took control as Marco Reus rounded Iker Casillas and then rifled in from close range to put the hosts close to forcing extra-time.

Henrikh Mkhitaryan hit the post, but Real held on to progress.

The Spanish side were overwhelming favourites to progress before kick-off, but they were second best throughout to a superb Dortmund side at Signal Iduna Park.

Real Madrid march on

  • Real Madrid have now reached the semi-finals of the Champions League in four consecutive years

Real are all too aware of Dortmund's free-scoring capabilities at home, having suffered a 4-1 defeat that ultimately cost them a place in last year's Champions League final.

Robert Lewandowski scored all four of Dortmund's goals on that occasion and he returned to the German side's starting line-up for this game after missing the first leg through suspension.

But before he even had chance to make an impression, Real should have been ahead. They were awarded a penalty when full-back Lukasz Piszczek was adjudged to have handled Fabio Coentrao's cross inside the area, but Di Maria hit the resulting spot-kick straight at goalkeeper Roman Weidenfellar.

That, though, was to prove to be the visitors' only real chance of the first half as Dortmund set about staging what would have been a remarkable comeback.

They took the lead when Pepe weakly headed Piszczek's long ball out of defence short of Casillas. Reus raced in to steal possession before knocking the ball past the Real goalkeeper and slotting into the empty net.

With Cristiano Ronaldo, who injured his knee in the first leg, on the bench and Gareth Bale, Karim Benzema and Di Maria struggling to make an impression, Dortmund continued to attack a clearly rattled Real backline. Lewandowski felt he should have been awarded a penalty when he fell inside the area as he challenged for the ball with Sergio Ramos.

Only Deportivo La Coruna have come back from a three-goal deficit in the Champions League, when they beat AC Milan 4-0 in 2004. Real coach Carlo Ancelotti was in charge of the Milan side then and he must have feared history was to repeat itself when Reus scored again.

The Germany international fed a pass to Lewandowski just inside the area and, though the striker's shot struck the bottom of the far post, Reus raced onto the rebound and smashed it into the roof of the net.

Real improved after the break, with Bale in particular imposing himself on the game as he twice threatened, first forcing a good save from Weidenfeller before curling a low effort just wide of the far post after breaking into the box.

However, only the woodwork prevented Dortmund from levelling the tie as Reus's smart ball slipped in Mkhitaryan, who rounded Casillas but hit the post.

Dortmund had just one more chance to level the tie as Mkhitaryan received the ball unmarked in the middle of the area, but his shot was straight at Casillas.

Real Madrid coach Carlo Ancelotti:

"We played a very slow game, with many errors and no confidence. After the penalty a bit of fear crept into the team.

"Every game is difficult at this stage and we saw that today. It was a night of struggling, of suffering but at the end we are just happy to have made it into the semis."

"Cristiano Ronaldo was fine, we didn't want to risk him, because of the intensity of the tie, and we didn't have to.

"Hopefully he's better soon and he is ready for the semi-final. It's not a big problem because if it were, he wouldn't have been on the bench. He has time to recover and could play on Saturday."

Borussia Dortmund coach Jurgen Klopp:

"You could make a video of this game and show it to the teams that lose a first leg 3-0.

"My players wanted to go through but we were missing that one goal we did not score in Madrid last week.

"The lads gave it everything they had and I have no idea how many kilometres they ran today."

Check out a photo gallery of Tuesday's Champions League action on the BBC Sport Facebook page. 

Lineup, Bookings (8) & Substitutions (4)

Borussia Dortmund

  • 01 Weidenfeller
  • 26 Piszczek (Aubameyang - 81' Booked )
  • 37 Durm
  • 21 Kirch
  • 02 Friedrich
  • 15 Hummels
  • 11 Reus Booked
  • 10 Mkhitaryan
  • 09 Lewandowski
  • 14 Jojic
  • 19 Großkreutz Booked

Substitutes

  • 07 Hofmann
  • 17 Aubameyang
  • 18 Sahin
  • 20 Langerak
  • 23 Schieber
  • 25 Papastathopoulos
  • 34 Ducksch

Real Madrid

  • 01 Casillas
  • 15 Carvajal Booked
  • 05 Fábio Coentrão
  • 14 Alonso Booked
  • 03 Pepe
  • 04 Ramos Booked
  • 24 Illarramendi (Isco - 45' )
  • 19 Modric
  • 09 Benzema Booked (Varane - 92' )
  • 22 Di María (Casemiro - 73' Booked )
  • 11 Bale

Substitutes

  • 02 Varane
  • 07 Ronaldo
  • 16 Casemiro
  • 18 Nacho
  • 21 Morata
  • 23 Isco
  • 25 López
Ref: Damir Skomina

Match Stats

Shots

12 10

On target

6 5

Corners

4 2

Fouls

10 10

Live Text Commentary

Full time

Full Time Match ends, Borussia Dortmund 2, Real Madrid 0.

90:00 +2:35 Full time

Full Time Second Half ends, Borussia Dortmund 2, Real Madrid 0.

90:00 +2:30

Attempt saved. Gareth Bale (Real Madrid) left footed shot from outside the box is saved in the bottom left corner. Assisted by Isco.

90:00 +1:26 Substitution

Substitution Substitution, Real Madrid. Raphael Varane replaces Karim Benzema.

90:00 +1:24 Booking

Booking Karim Benzema (Real Madrid) is shown the yellow card.

90:00 +0:37

Hand ball by Mats Hummels (Borussia Dortmund).

89:58

Attempt missed. Isco (Real Madrid) right footed shot from the left side of the box misses to the right. Assisted by Xabi Alonso.

89:29

Attempt saved. Gareth Bale (Real Madrid) left footed shot from the centre of the box is saved in the centre of the goal. Assisted by Karim Benzema with a through ball.

88:05

Corner, Borussia Dortmund. Conceded by Daniel Carvajal.

87:48

Foul by Daniel Carvajal (Real Madrid).

87:48

Manuel Friedrich (Borussia Dortmund) wins a free kick in the defensive half.

82:30 Booking

Booking Casemiro (Real Madrid) is shown the yellow card for a bad foul.

82:28

Foul by Casemiro (Real Madrid).

82:28

Erik Durm (Borussia Dortmund) wins a free kick in the defensive half.

81:50 Booking

Booking Pierre-Emerick Aubameyang (Borussia Dortmund) is shown the yellow card.

81:39

Attempt missed. Karim Benzema (Real Madrid) right footed shot from outside the box misses to the left. Assisted by Luka Modric.

80:55 Substitution

Substitution Substitution, Borussia Dortmund. Pierre-Emerick Aubameyang replaces Lukasz Piszczek.

79:56

Offside, Borussia Dortmund. Robert Lewandowski tries a through ball, but Marco Reus is caught offside.

79:16

Attempt missed. Isco (Real Madrid) right footed shot from outside the box misses to the left.

79:14

Attempt saved. Karim Benzema (Real Madrid) left footed shot from outside the box is saved in the bottom left corner. Assisted by Gareth Bale.

77:12

Foul by Daniel Carvajal (Real Madrid).

77:12

Erik Durm (Borussia Dortmund) wins a free kick in the defensive half.

74:51 Booking

Booking Marco Reus (Borussia Dortmund) is shown the yellow card.

74:40

Marco Reus (Borussia Dortmund) has gone down, but that's a dive.

72:41 Substitution

Substitution Substitution, Real Madrid. Casemiro replaces Ángel Di María.

69:56

Corner, Borussia Dortmund. Conceded by Fábio Coentrão.

69:53

Attempt saved. Kevin Großkreutz (Borussia Dortmund) right footed shot from the centre of the box is saved in the bottom right corner. Assisted by Henrikh Mkhitaryan.

67:51

Attempt saved. Henrikh Mkhitaryan (Borussia Dortmund) right footed shot from the centre of the box is saved in the centre of the goal.

67:14 Booking

Booking Daniel Carvajal (Real Madrid) is shown the yellow card for a bad foul.

67:07

Foul by Daniel Carvajal (Real Madrid).

67:07

Henrikh Mkhitaryan (Borussia Dortmund) wins a free kick on the left wing.

64:37

Attempt missed. Lukasz Piszczek (Borussia Dortmund) right footed shot from the right side of the box is too high.

64:34

Attempt blocked. Kevin Großkreutz (Borussia Dortmund) right footed shot from the centre of the box is blocked. Assisted by Henrikh Mkhitaryan.

64:30

Henrikh Mkhitaryan (Borussia Dortmund) hits the left post with a left footed shot from the centre of the box. Assisted by Marco Reus with a through ball.

63:42

Delay over. They are ready to continue.

63:06

Delay in match Daniel Carvajal (Real Madrid) because of an injury.

63:06

Delay in match Kevin Großkreutz (Borussia Dortmund) because of an injury.

62:56

Daniel Carvajal (Real Madrid) wins a free kick in the defensive half.

62:56

Foul by Kevin Großkreutz (Borussia Dortmund).

58:32

Attempt missed. Gareth Bale (Real Madrid) left footed shot from the right side of the box misses to the left. Assisted by Luka Modric.

58:02

Foul by Ángel Di María (Real Madrid).

58:02

Kevin Großkreutz (Borussia Dortmund) wins a free kick in the defensive half.

54:36

Foul by Daniel Carvajal (Real Madrid).

54:36

Robert Lewandowski (Borussia Dortmund) wins a free kick on the left wing.

52:19

Luka Modric (Real Madrid) wins a free kick in the attacking half.

52:19

Foul by Robert Lewandowski (Borussia Dortmund).

48:56

Xabi Alonso (Real Madrid) wins a free kick in the defensive half.

48:56

Foul by Robert Lewandowski (Borussia Dortmund).

48:17

Attempt missed. Ángel Di María (Real Madrid) left footed shot from outside the box is too high. Assisted by Daniel Carvajal.

48:10

Attempt saved. Gareth Bale (Real Madrid) left footed shot from outside the box is saved in the centre of the goal. Assisted by Ángel Di María.

45:00 Substitution

Substitution Substitution, Real Madrid. Isco replaces Asier Illarramendi.

45:00

Second Half begins Borussia Dortmund 2, Real Madrid 0.

45:00 +1:05 Half time

Half Time First Half ends, Borussia Dortmund 2, Real Madrid 0.

41:14

Corner, Borussia Dortmund. Conceded by Fábio Coentrão.

41:12

Attempt blocked. Marco Reus (Borussia Dortmund) right footed shot from outside the box is blocked.

36:16 Goal scored

Goal! Goal! Borussia Dortmund 2, Real Madrid 0. Marco Reus (Borussia Dortmund) right footed shot from the centre of the box to the centre of the goal.

36:14

Attempt saved. Robert Lewandowski (Borussia Dortmund) right footed shot from the centre of the box is saved in the bottom right corner. Assisted by Marco Reus.

33:00

Sergio Ramos (Real Madrid) wins a free kick in the defensive half.

33:00

Foul by Lukasz Piszczek (Borussia Dortmund).

32:11

Attempt missed. Manuel Friedrich (Borussia Dortmund) header from the centre of the box misses to the right. Assisted by Marco Reus with a cross following a corner.

31:46

Corner, Borussia Dortmund. Conceded by Iker Casillas.

31:44

Attempt saved. Mats Hummels (Borussia Dortmund) header from the centre of the box is saved in the top left corner. Assisted by Marco Reus with a cross.

30:49 Booking

Booking Xabi Alonso (Real Madrid) is shown the yellow card for a bad foul.

30:31

Foul by Xabi Alonso (Real Madrid).

30:31

Marco Reus (Borussia Dortmund) wins a free kick in the attacking half.

28:10

Foul by Xabi Alonso (Real Madrid).

28:10

Milos Jojic (Borussia Dortmund) wins a free kick in the attacking half.

26:46 Booking

Booking Sergio Ramos (Real Madrid) is shown the yellow card for a bad foul.

26:23

Sergio Ramos (Real Madrid) wins a free kick in the defensive half.

26:23

Foul by Robert Lewandowski (Borussia Dortmund).

23:29 Goal scored

Goal! Goal! Borussia Dortmund 1, Real Madrid 0. Marco Reus (Borussia Dortmund) right footed shot from the centre of the box to the centre of the goal.

21:54

Gareth Bale (Real Madrid) wins a free kick in the defensive half.

21:54

Foul by Oliver Kirch (Borussia Dortmund).

18:27

Attempt missed. Henrikh Mkhitaryan (Borussia Dortmund) right footed shot from the centre of the box is close, but misses to the left. Assisted by Marco Reus.

16:22

Corner, Real Madrid. Conceded by Erik Durm.

16:18

Penalty saved! Ángel Di María (Real Madrid) fails to capitalise on this great opportunity, left footed shot saved in the bottom right corner.

15:32

Penalty conceded by Lukasz Piszczek (Borussia Dortmund) with a hand ball in the penalty area.

13:10

Pepe (Real Madrid) wins a free kick in the defensive half.

13:10

Dangerous play by Robert Lewandowski (Borussia Dortmund).

9:49

Corner, Real Madrid. Conceded by Erik Durm.

8:36

Foul by Karim Benzema (Real Madrid).

8:36

Oliver Kirch (Borussia Dortmund) wins a free kick in the defensive half.

7:07

Foul by Xabi Alonso (Real Madrid).

7:07

Marco Reus (Borussia Dortmund) wins a free kick in the attacking half.

0:00

First Half begins.

0:00

Lineups are announced and players are warming up.

Live data and text provided by our data suppliers