Playing in their first European semi-final for 45 years, Premier League City produced a cagey first-leg display that offered little menace, although crucially they denied free-scoring Real an away goal.
Ten-times champions Real suffered a setback before kickoff when Cristiano Ronaldo, the leading scorer in this season's competition with 16 goals, was ruled out with a thigh injury.
His spark was badly missed in a turgid first half at City's Etihad Stadium, but Real finally came alive after the break and the hosts needed two instinctive late saves from Hart to keep them in the hunt for the second leg at the Bernabeu next week.
"It's too close to call at the moment," City captain Vincent Kompany said. "We couldn't have wished for more. We have 90 minutes left and we'll look forward to next week."
Neither side managed a shot on target in the opening 45 minutes, but Real gradually upped their tempo after the break with Gareth Bale increasingly influential.
The Welshman curled one effort wide and had a penalty appeal turned down before substitute Jese looped a header against the crossbar with Hart at full stretch.
Hart saved a Casemiro header with his left foot and then shortly after Pepe looked certain to break the deadlock from point-blank range but Hart blocked the shot with his chest.
City striker Sergio Aguero had a quiet night and their creative department was not helped when David Silva limped off with a hamstring injury after 40 minutes.
Manager Manuel Pellegrini said he would not be fit for the return, although the Chilean was confident his side could prevail in the Spanish capital despite Real having racked up 18 goals without conceding at home in this year's competition.
"If you can't win, then the best draw is zero-zero," he said. "This season we have played very well away. Now we go to the Bernabeu with the same attitude as playing at home.
"Real Madrid must attack a little bit more."
The hosts did produce a late flurry after Raheem Sterling joined the fray from the bench and the winger forced a timely interception from Pepe, while Kevin De Bruyne's inswinging free kick forced Keylor Navas into some rare action.