Real leave it late to see off Osasuna
The world's most expensive player rescued his team, heading in Gonzalo Higuain's cross from a metre out, for his second of the night and 22nd of the campaign.
Real made life difficult for themselves against mid-table visitors twice going behind to goals from Carlos Aranda and Krisztian Vadocz. Ronaldo and Marcelo grabbed the equalisers before the break.
Barca have 90 points after beating Villarreal 4-1 away on Saturday and are one point ahead of Real, with three matches to play.
"It seemed like an easy game on paper but it turned out to be tough. This often happens in these types of games. You have to show plenty of fighting spirit to win," Ronaldo told Spanish television.
"The win was the most important thing because we still have hopes of beating Barcelona to the title, though they won't give it up easily."
Real made an awful start when defender Raul Albiol failed to control a ball and allowed Aranda to break away and score after only seven minutes.
Ronaldo put them level in the 25th after streaking off the left flank to score from the edge of the area, but the hosts' were found wanting at the back again from an Osasuna throw in.
They failed to clear the ball and Vadocz smashed a spectacular volley past Iker Casillas in the 43rd, though Real only needed a minute to equalise this time, Marcelo nodding in from close range.
A nail-biting second half had Casillas saving point-blank from Aranda and Osasuna's Masoud missing an open goal before Ronaldo rose above the mediocrity to keep the title race alive with his late strike.
In the late game, Real Mallorca kept up their push for a place in the Champions League next season, retaking fourth place from Sevilla with a 3-1 win over Athletic Bilbao at San Mames.
Gonzalo Castro, Nunes and Aritz Aduriz scored the goals that moved the islanders on to 59 points two ahead of Sevilla, who had earlier won a dress rehearsal for the King's Cup final by beating Atletico Madrid 3-1 at home.
Any doubts that Atletico would be taking it easy after also reaching the Europa League final three days ago, were dispelled in a frenetic opening, even though they had fielded a weakened side.
Brazil's Luis Fabiano put Sevilla ahead from a corner in the fifth minute and almost immediately Portugal's Tiago volleyed the visitors level after a free kick.
Two disputed penalties, scored by Alvaro Negredo in the 12th and 39th minutes, put the hosts back in control and they held firm to take a psychological advantage into the Cup final at the Nou Camp on May 19.