Real Madrid, who finished with nine men following the dismissals of Zinedine Zidane and Walter Samuel, fought back from a goal down to beat Villarreal 2-1 at the Bernabeu in Madrid on Saturday.
Second-placed Real moved up to 69 points, three behind Barcelona who travel south to play Malaga on Sunday. Champions League-chasing Villarreal are third on 52 points with a game in hand on Real.
Argentine midfielder Juan Roman Riquelme put Villarreal in front from the penalty spot before the break but Real recovered in the second half.
Ronaldo headed the equaliser on 70 minutes before turning provider for defender Michel Salgado to fire the winner four minutes later.
Real were reduced to 10 men after 72 minutes when Argentina defender Samuel received his second yellow card. The home team then lost Zidane to a straight red in stoppage time.
Villarreal defender Quique Alvarez received his marching orders at the same time after scuffling with Zidane.
Earlier, Osasuna overcame Atletico Madrid 1-0 to record their second victory in four days over the capital club and all but secure their Spanish Primera Liga place.
ALOISI GOAL
The Navarrans, who beat Atletico by the same scoreline in Wednesday's King's Cup semi-final first leg, scored through John Aloisi after four minutes and survived the dismissal of defender Carlos Cuellar eight minutes from time.
Villarreal controlled possession early on and pressed Real back into their own half.
Real rallied and England captain David Beckham, playing on the right while Luis Figo started on the bench for the third consecutive game, had the best chance of the first half in the 28th minute.
Beckham played a one-two with Ronaldo on the edge of the area but fired a low drive wide of the far post.
Villarreal took the lead after a swift counter-attack in the 39th minute.
Attacking midfielder Riquelme released former Manchester United striker Diego Forlan and he was brought down by Francisco Pavon.
Riquelme gave Iker Casillas no chance from the penalty spot.
Samuel missed a free header soon after the restart before Riquelme sprung the offside trap at the other end. He had only Casillas to beat but squared to Forlan who fired into the side-netting.
Villarreal were punished for that glaring miss when Zidane took on three defenders and crossed to the far post for Ronaldo to head the equaliser.
Ronaldo followed up by creating the second goal for Salgado, who shot first time past Villarreal keeper Pepe Reina.
More from rediff