Kylian Mbappe’s penalty in the 10th minute of stoppage time secured a dramatic 2-1 victory for Real Madrid over lowly Rayo Vallecano to cut Barcelona’s lead at the top of LaLiga.
Real were fast running out of time for a winner when Nobel Mendy’s wild kick in a crowded box felled Brahim Diaz, and Mbappe stepped to comfortably dispatch his 22nd league goal of the season.
Vinicius Junior’s 15th-minute finish had earlier been wiped out by Jorge de Frutos straight after the break.
🏁 FT: @RealMadridEN 2-1 @RayoVallecano ⚽ 15′ @vinijr ⚽ 49′ De Frutos⚽ 90’+10′ @KMbappe (p)@emirates pic.twitter.com/iFTkhEz2X5
— Real Madrid C.F. 🇬🇧🇺🇸 (@realmadriden) February 1, 2026
Rayo finished the contest with nine men after red cards for Pathe Ciss and Pep Chavarria.
Ciss went for an ugly 80th-minute challenge on Dani Ceballos and Chavarria received a second yellow card in the final seconds for pushing Rodrygo over.
In what was an eventful Madrid derby, Real also lost Jude Bellingham to a suspected hamstring injury.
The last-gasp victory sees Real trail Barcelona by a single point after 22 league games.
Rayo remain in 17th spot, one place and one point above the relegation zone.

Real’s defensive shortcomings were exposed in a midweek Champions League defeat by Benfica and were again apparent at the Bernabeu.
Ilias Akhomach squeezed a shot just wide for Rayo before Bellingham’s day ended in the 10th minute, with the England midfielder trudging disconsolately around the pitch after getting back to his feet.
Vinicius ended a LaLiga goal drought that stretched back to October 4 with a beauty.
The Brazilian twisted his way into the Rayo box before lofting the ball over Augusto Batalla and finding the top corner of the net from 16 yards.
Batalla stopped Real doubling their lead with a diving save from Arda Guler and Vinicius slid the rebound wide.

Alvaro Garcia tested Thibaut Courtois before the break and Rayo’s endeavour was rewarded four minutes after the restart.
De Frutos reached Garcia’s clever knockdown inside the box to give Courtois no chance.
Real were increasingly frustrated as Mbappe and Vinicius went to ground and penalty claims were waved away.
But they were fortunate to escape when Andrei Ratiu sprinted clean through and Courtois stood strong to keep the scores level.
➕3⃣ pic.twitter.com/prjTTIoUWw
— Real Madrid C.F. 🇬🇧🇺🇸 (@realmadriden) February 1, 2026
There were little pause for breath as Mbappe raced past Batalla around 25 yards out.
Mbappe had the whole goal to aim at from wide on the left and his effort crashed back off the crossbar.
A poor Ciss lunge saw Rayo reduced to 10 and Real struck the goal frame again five minutes from when Eduardo Camavinga headed Ceballos’ centre onto a post.
Batalla foiled Rodrygo from point-blank range deep into stoppage time, but Real blushes were spared as Mbappe kept his composure from 12 yards.
(function(i,s,o,g,r,a,m){i[‘GoogleAnalyticsObject’]=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,’script’,’//www.google-analytics.com/analytics.js’,’ga’);
ga(‘create’, ‘UA-72310761-1’, ‘auto’, {‘name’: ‘pacontentapi’});
ga(‘pacontentapi.set’, ‘referrer’, location.origin);
ga(‘pacontentapi.set’, ‘dimension1’, ‘By Press Association Sport Staff’);
ga(‘pacontentapi.set’, ‘dimension2’, ‘e00c84e5-81d2-4db9-b062-bfa63836d852’);
ga(‘pacontentapi.set’, ‘dimension3’, ‘paservice:sport,paservice:sport:football,paservice:sport:match-reports’);
ga(‘pacontentapi.set’, ‘dimension6’, ‘story’);
ga(‘pacontentapi.set’, ‘dimension7’, ‘composite’);
ga(‘pacontentapi.set’, ‘dimension8’, null);
ga(‘pacontentapi.set’, ‘dimension9’, ‘sport:football’);
ga(‘pacontentapi.set’, ‘anonymizeIp’, true);
ga(‘pacontentapi.send’, ‘pageview’, { ‘location’: location.href, ‘page’: (location.pathname + location.search + location.hash), ‘title’: ‘Kylian Mbappe scores last-gasp Real Madrid derby winner against Rayo Vallecano’});




