Moussa Dembélé came off the bench to score twice and sink the last English club in the competition.
Article top media content
Lyon booked a semi-final against Bayern after Moussa Dembélé's late goals saw off Manchester City in Lisbon.
Match in brief
An open contest burst into life in the 24th minute when Marçal's long pass sent Karl Toko Ekambi away. Eric García did superbly to thwart the Lyon striker but the ball broke kindly for Maxwel Cornet to sweep past Ederson. Anthony Lopes saved from Rodri while Cornet's last-ditch challenge denied Raheem Sterling as City tried to level before the break.
City continued to look toothless in the second half until Sterling darted in behind the Lyon defence and cut the ball back for Kevin De Bruyne to arrow into the corner. Josep Guardiola's side were now in the ascendancy but their defensive frailty proved their undoing again as Houssem Aouar's pass released substitute Moussa Dembélé to restore Lyon's lead.
City's fate was sealed in a crazy minute as Sterling fired over an unguarded net after Gabriel Jesus had squared; Lyon went straight down the other end and Dembélé tapped in the clincher following Ederson's parry.
Man of the match: Moussa Dembélé (Lyon)
Roberto Martínez, UEFA technical observer: "He was ready to kill the game. It was a fantastic team performance with Cornet and Aouar also at a high level, but having the killer touch at the right time decided this tie."
Simon Hart, Man. City reporter
City fall short once more in their pursuit of the big one. Guardiola's change of formation will be a major talking point and City did not impose themselves in the first period at all, lacking their usual creativity. Not even De Bruyne's moment of magic was enough as a defence that has leaked goals in big games all season long did the same once again.
David Crossan, Lyon reporter
Garcia's hunch that this game might be won off the bench was proved right as substitute Dembélé scored a double on another memorable night for this season's surprise package. Remember Lyon need to win the competition to have European football next season. The late goals were reward for their commitment and refusal to crack after the City equaliser. Nobody will give Lyon a chance against Bayern but they won't care as they've upset the form book before.
Moussa Dembélé, Lyon striker: "When you are on the bench it's not always easy. When you come on you want to bring what you can to the party and I did that today. The team spirit has changed and we're a top team."
Maxwel Cornet, Lyon midfielder: "You don't get to play in a UEFA Champions League quarter-final every day. Tonight it was against City and fortune smiled on me again against them. I think what should be remembered is the great work we put in as a team this evening."
Kevin De Bruyne, Manchester City midfielder: "It's a different year, same stuff. First half wasn't good enough, second half we played really well. We came back to 1-1 and had a couple of chances. It was then 2-1 and 3-1. The second half we played well had them under pressure. We were more offensive. Lyon didn't really create but we need to learn."
- Lyon have reached their second UEFA Champions League semi-final – they lost the other 4-0 on aggregate to Bayern in 2009/10.
- For the first time in the UEFA Champions League era, there will be no semi-finalists from England, Spain or Italy. There will be two from France – also a first.
- Lyon have never lost a match against an English club having opened the scoring (W6 D5).
- Moussa Dembélé has scored seven UEFA Champions League goals in 25 matches – four of them against Manchester City.
- Maxwel Cornet has scored four goals in three games against Manchester City for Lyon.
Man. City: Ederson; Walker, García, Laporte, Cancelo; Fernandinho (Mahrez 56), Gündoğan, Rodri (D Silva 84); De Bruyne, Jesus, Sterling
Lyon: Lopes; Denayer, Marcelo, Marçal; Dubois (Tete 74), Caqueret, Guimarães (Mendes 70), Aouar, Cornet; Depay (Dembélé 75), Ekambi (Reine-Adélaïde 87)
Lyon will take on Bayern in the semi-finals. Their single-leg tie will kick off at 21:00 CET on Wednesday 19 August and be held at the Estádio José Alvalade in Lisbon.