Real Madrid
Thibaut Courtois Did what he does: produced excellent saves, particularly from Cancelo, to keep Madrid alive. 8
Dani Carvajal Defended superbly and attacked to devastating effect, delivering the cross for the equaliser. 8
Nacho Replaced the injured Alaba and didn’t put a foot wrong, as ever. 8
Éder Militão Lives on edge but somehow that suits the lunacy. Exhausted by the end having run himself into the ground. 8
Ferland Mendy Produced a miraculous goalline clearance that set up an even greater miracle. 8
Fede Valverde Has enough energy for everyone: defender, midfielder and attacker in one. Tireless again. 9
Luka Modric Played as a No 10 but biggest roar came when he chased down De Bruyne. Departure momentarily deflated this place. 6
Casemiro That cloak of invisibility still works: fortunate to escape two (dark) yellows. Tired noticeably. 5
Toni Kroos Deflected free-kick curled just over. Unable to run the game, the first man withdrawn again, and it worked again. 5
Vinícius Júnior Appealed for fans to get on their feet after 45 seconds and was still doing so 120 minutes later. 8
Karim Benzema Unable to take the kind of chances with which he carried Madrid here; was never going to miss the penalty. 8
Substitutes
Rodrygo (for Kroos 68) Just incredible. Scored two and provided the pass that rescued Real Madrid yet again, 10; Marco Asensio (for Casemiro 75) Came on to help lead the final charge, an extra striker as Madrid sought and found a miracle, 7; Eduardo Camavinga (for Modric 75) Always comes on, always to enormous effect – makes Madrid a better team, an extraordinary career awaits, 8; Jesús Vallejo (for Militão 115); Dani Ceballos (for Benzema 104); Lucas Vázquez (for Vinícius 115).
Manchester City
Ederson Warned early for time-wasting. Denied Madrid a third goal in added time, couldn’t save the penalty in extra time. 5
Kyle Walker Showed his speed in vital tackle on an escaping Vinicíus but started to struggle. 7
Rúben Dias Steady, strong presence, until he was drawn into the foul that gave away the penalty that won this. 6
Aymeric Laporte An unnecessary confrontation earned an early yellow in an uneasy start, but improved. 6
João Cancelo Returning from injury and perhaps it showed, unable to threaten on either side and uneasy defensively. 6
Kevin De Bruyne Smoothly moving through the space in midfield, his passing crisp. City’s best player, surprisingly withdrawn. 8
Rodri A calm, tidy if not enormously influential presence in the middle, alert when Madrid threatened. 6
Bernardo Silva Superb run, if partly unopposed, and set up what looked like being the winning goal. 6
Riyad Mahrez Spent a difficult night with Guardiola in his ear and then thought he had won it with a smashing finish. 6
Gabriel Jesus Flashed a shot just past the top corner early on. Moved from middle to left, offering an outlet. 6
Phil Foden Moved in from the left to false 9, but unable to decisively influence this or really escape Madrid. 5
Substitutes
Oleksandr Zinchenko (for Walker 72); Ilkay Gündogan (for De Bruyne 72); Jack Grealish (for Jesus 78) Had two clear chances that would surely have confirmed City’s passage to the final, 5; Fernandinho (for Mahrez 85) Came on to see the game out and saw it become revived instead, 6; Raheem Sterling (for Rodri 99).