The French side made the perfect start, stifling Manchester City’s attacking play and eventually taking the lead after 24 minutes thanks to Maxwel Cornet’s inventive finish from just outside the box.
In the second half, the English side cranked up the pressure, and the pressure eventually told, as Kevin de Bruyne coolly slotted home to level the score before substitute Moussa Dembélé scored two goals to see Lyon through.
Lyon will face Bayern Munich in the semifinal on Wednesday, after the German side advanced to the semifinals on Friday, dispatching Barcelona 8-2.
For the first time since 1990/91, and for the first time in the Champions League era, the semifinal stage will not feature any team from England, Spain or Italy. For the first time in Champions League history, it will feature two teams representing France.
Belgian midfielder de Bruyne said that following another heartbreaking exit from the competition, it is “not good enough.”
“It’s definitely the same stuff. I think the first half wasn’t good enough,” he told BT Sport after the game. “I think we know that.
“We started slow, we had not many options. I think second half, we played really well. We came back 1-1, had a couple of chances and then obviously the 2-1, and then the 3-1 ends the game. It’s a shame for us to go in that way.
“The game was open but they didn’t really create except the two goal chances. Yeah, we need to learn. It’s not good enough.”
With its star players and a big name manager, Manchester City were overwhelmingly favored to beat Lyon.
But the French side had showed its resilience in its second leg against Juventus in the previous round, managing to edge past Cristiano Ronaldo and company despite having almost five months without football.
And its sturdiness was put to the test from kickoff. Manchester City dominated possession from the first whistle, but failed to create any golden opportunities.
And eventually Lyon’s ability to counterattack produced the game’s first goal. A ball played behind the City defence for Karl Toko Ekambi to run on to eventually fell to Maxwel Cornet and, with City keeper Ederson out of his goal, Cornet threaded a magnificent curling shot into the near post from about 20 yards.
The rest of the first half played out just as Lyon and manager Rudi Garcia would have planned. Manchester City dominated possession without creating too many clear-cut chances while Pep Guardiola’s team looked susceptible on the break.
After the half-time break, the game opened up and following an attacking substitution by Guardiola, City began to create chances at will.
And eventually the pressure told, as some nice footwork by England international Raheem Sterling freed him up to lay it back for de Bruyne to finish.
It looked like there would only be one winner. However, Lyon’s own super-sub Dembélé thought differently, latching on to a through ball near half-way and finishing under Ederson. A nervy video assistant referee check followed but after a few minutes of waiting, the goal was given.
Although City was behind, it created the better chances and the best of which fell to Sterling. Some clever dribbling and a cross from Gabriel Jesus left Sterling with an open goal from just five yards out, but he sent ball skyward and over the goal.
And the miss proved costly. Just 59 seconds later, Lyon had scored again, Dembélé pouncing on a poor save from Ederson to send the French club into the final four for the first time in nearly 10 years.
The result means that during Guardiola’s time at the club, Manchester City has failed to make it past the quarterfinal stage of the Champions League.
Despite thinking that his side played well for the majority of the game, Guardiola lamented Manchester City’s inability to play without errors in the Champions League.
“One day we will break this gap of the quarterfinals,” he told BT Sport after the game. “Except the first 25 minutes where we struggled to find out spaces to attack them more fluidly, the players, they play free.”
“And the last 15 minutes of the first half was good. The second half was OK, we were there. I had the feeling we were better, but you have to be perfect in this competition in one game and we weren’t.”
The 2019-20 Champions League semifinals will see two French teams and two German teams compete for a place in the final; the first time since 2012-13 that there are just two different nations represented at this stage.