Ajax secured a place in their first European final for 21 years after surviving a huge scare in Lyon. The Dutch side, who played the final six minutes with 10 men, went through 5-4 on aggregate after losing 3-1 on the night, despite taking the lead through the 19-year-old Kasper Dolberg.

Lyon’s in-demand striker Alexandre Lacazette led the fightback with two goals in 79 seconds on the stroke of half-time and Rachid Ghezzal’s header, which deflected in off Nick Viergever, who moments later was sent off, resulted in a nail-biting finish.

The visitors held on, though, to set up a final meeting with Manchester United in Stockholm on 24 May, their first European showpiece since losing the 1996 Champions League final on penalties to Juventus. The Ajax coach, Peter Bosz, claimed the club’s return to a European final was “a victory for football”.

“The guys were great with the tension, had chances and scored with one,” Bosz said. “There was nothing going on until the last minute of the first half, when everything went wrong. Lyon started to believe in it, the crowd were behind them and then you know it is difficult.

“At half-time I said: ‘Do not panic.’ But in the end, especially after the red card for Nick Viergever, we had to survive. We have done that and the final result is beautiful. Call it a victory for football.”

Lyon went into the clash with a mountain to climb, trailing 4-1 from the first leg. For most of the first half Lacazette saw little of the ball and even less sight of Ajax’s goal as the visitors’ youthful side controlled the game. The forward planted one early header wide, with Maxime Gonalons’ glancing header easily saved by André Onana as Lyon struggled to generate the momentum they needed to overcome a three-goal deficit.

Their task was made even more difficult when they switched off in the 27th minute and were caught out by a straightforward clearance from Onana. The goalkeeper’s clearance exposed the hosts, who were left two versus two at the back. Dolberg collected the knockdown to exchange passes with Amin Younes and continued his run untracked to coolly dink a shot over the advancing Anthony Lopes from a narrow angle.

Lyon had no option but to raise the tempo, but it was not until 79 seconds from the end of the half that they broke through when Matthijs de Ligt was adjudged to have fouled Lacazette. The striker picked himself up to send Onana the wrong way from the penalty spot to transform the atmosphere inside the ground.

Lyon responded and with the last kick of the half Lacazette turned in Nabil Fekir’s cross at the far post after Viergever mis-kicked his clearance. Ajax’s young side were clearly rattled and at the start of the second half displayed none of the composure they had in the first.

However, they managed to blunt Lyon’s attacks, with Onana only being called upon to make one genuine save 15 minutes from time when he charged down the substitute Maciej Rybus’s shot from Lacazette’s knockdown.

Ajax’s Donny van de Beek curled a shot against the angle of crossbar and post, which would have finally killed off the hosts, and they were left to face a frantic last 10 minutes when Ghezzal’s header deflected in off Viergever, who moments later was sent off for a second bookable offence.

Maxwel Cornet almost forced extra time with a shot which flew inches wide of the far post in the final minute, but a clearly rattled Ajax managed to hold on.

The Lyon coach, Bruno Genesio, said: “I am very proud of my players. It is a cruel disappointment. The players played a great match, we really rushed Ajax. Unfortunately it was not enough.”

Despite his double strike, Lacazette admitted Lyon needed to be better in front of goal. “We weren’t far away from qualifying. We weren’t clinical enough in front of goal and not effective enough defensively,” said the striker, who has been battling a thigh injury which restricted him to just 15 minutes as a late substitute in Amsterdam a week ago. “It could have been different if I’d been fit to start the first leg.”