Joe Hart kept Manchester City's hopes of reaching their first Champions League final alive with two brilliant late saves that ensured their semi-final first leg with Real Madrid finished goalless.
With star striker Cristiano Ronaldo missing because of a thigh injury, a cautious Real side offered little goal threat until the closing stages.
But in the last 20 minutes, Jese headed against the bar for the Spanish side before Hart brilliantly denied Casemiro and Pepe from corners.
Hart showed great reactions to keep out Casemiro's header with his foot but his block to deny Pepe, who was unmarked and five yards from goal, is the standout reason City will travel to Spain next week with a precious clean sheet.
The closest City came to a goal of their own was when Keylor Navas tipped over Kevin de Bruyne's dipping free-kick in stoppage time.
That was Navas' only save of a game that was billed as a shootout between two attacking sides but was, in fact, a game largely devoid of goalmouth action.
City will take the positives from denying Real an away goal but England's last remaining representatives in Europe's elite competition still face a huge task if they are to reach the final, in Milan on 28 May.
Their failure to score at home means former Real boss Manuel Pellegrini does not have a lead to take back to the Bernabeu, where Zinedine Zidane's side have not conceded a goal in the Champions League all season.
No Ronaldo, no Real threat
The news Ronaldo's thigh muscle was deemed too tight for him to play was clearly a massive boost for City before their first Champions League semi-final.
Without their 47-goal top scorer, a Real side that had scored 133 goals in their previous 46 games this season seemed reluctant to commit men forward and struggled to create chances.
Gareth Bale, playing his first game in England since his £85m move to Real from Spurs in 2013, was unable to provide the spark in Ronaldo's absence.
Bale did get the better of Gael Clichy early on down the right but failed to find a team-mate with his crosses and his finishing was also below his usual standards.
The Wales winger cut in to send one curling shot bouncing wide in the second half but disappointed with a free-kick from the edge of the box which he fired against the City wall.
Both of Real's late chances came from set-pieces and they struggled to open up City.
City also shot-shy
The home side were not helped by David Silva being forced off by injury before half-time and were short of their customary zip in the final third.
Sergio Aguero was starved of service and only managed one shot at goal, which came when he fired over from the edge of the box at the start of the second half.
The former Atletico Madrid striker has now played Real 13 times in his career and has still never beaten them, but will get another chance on Wednesday, 4 May.
In truth, City's whole attack will have to do better in the second leg.
De Bruyne, who started in the number 10 role but ended up on the left after Silva's injury, was also short of inspiration, Jesus Navas made few inroads down the right and Kelechi Iheanacho's pace had little impact.
Man of the match — Joe Hart
Post-match reaction
Manchester City boss Manuel Pellegrini:
"We played a very intense game and defended well. We tried to create until David Silva got injured then we lost the ball too much. If you cannot win then a 0-0 draw is good.
"We knew they were going to play a slow game and that is why we pressed as a team. When we had the ball, we could not make the difference. We could not score."
Manchester City captain Vincent Kompany:
"It is too close to call at the moment — 0-0 is a very dangerous scoreline.
"From the moment we manage to score in Madrid, it will be very different.
"It is hard to keep a clean sheet against such an attacking team. We can be proud of what we have achieved in this first leg."
What next?
The first leg of the other semi-final, between Atletico Madrid and Bayern Munich, takes place in Spain on Wednesday.
Before their trip to Madrid, City travel to Southampton on Sunday in a 16:30 BST kick-off. With three league games remaining, Pellegrini's side are still in need of Premier League points to secure a top-four finish that will make sure of Champions League football next season too.
Real, third in La Liga and a point behind leaders Barcelona, are already certain of their Champions League place but are still in the title race. They also have an away game this weekend — against Real Sociedad at 15:00 BST on Saturday.
Stats of the day
The first goal attempt of the game — by City defender Nicolas Otamendi — came after 27 minutes, the latest in any Champions League game this season.
Real Madrid were involved in only their ninth goalless draw in their 223rd Champions League game.
They have won just 43% of their Champions League games without Ronaldo since 2009-10 (3/7), and 71% with him.
This was just the fourth Champions League game this season without a first-half shot on target.
City have managed only three shots on target in total their past three Champions League home games (one in each).
Aguero has now gone 432 minutes without having a shot on target in the Champions League.
De Bruyne completed just 62.8% of his passes, the lowest figure for any outfield player.