Cristiano Ronaldo netted his 18th and 19th La Liga goals of the season as Real Madrid survived some late pressure to win 3-2 at city rivals Getafe on Monday and trim the gap to leaders Barcelona back to two points.
Portugal forward Ronaldo struck in each half either side of a Mesut Ozil effort to keep Real hard on the heels of champions Barca, who had stretched their lead to five with Sunday's 2-1 home win over promoted Levante.
Real coach Jose Mourinho gave midfielder Kaka a run-out in the final 15 minutes for the Brazil playmaker's first appearance this season following post-World Cup knee surgery.
They had taken an 11th-minute lead at the Coliseum when Angel Di Maria went to ground in the penalty area and Ronaldo blasted the spot kick past Getafe keeper Jordi Codina.
Di Maria played Ozil through for Real's second in the 19th before Dani Parejo dribbled past Alvaro Arbeloa and Lassana Diarra and lashed a shot past Real's Iker Casillas 10 minutes later.
Ronaldo looked to have made the game safe 12 minutes into the second half with a smart finish from Karim Benzema's pass, which put him two goals clear of Barca forward Lionel Messi on the La Liga scoring charts.
However, the dismissal of Real defender Arbeloa in the 82nd minute for a second yellow card lifted the home side.
Substitute Juan Albin hammered home a loose ball in the 85th to give Getafe hope but they were unable to find the equaliser.
Real have 44 points from 17 matches, behind Barca on 46, while Villarreal stay third on 36 after they beat Almeria 2-0 in the earlier kickoff.
Mourinho was unusually critical of his players at his post-match news conference, saying they had lacked their usual focus in defence.
"Usually we are much more concentrated, much more compact and we gave our opponent a lot of space," the Portuguese said.
"My team needs to defend better and I didn't like them much today," he added.
In Monday's earlier kickoffs, Jose Catala and Borja Valero grabbed the goals as Villarreal cemented their grip on third, while Atletico Madrid missed the chance to climb above Espanyol into fifth when they were held 0-0 at home by Racing Santander.
Atletico are sixth with 27 points from 17 matches, one behind Espanyol who lost 2-1 at fourth-placed Valencia (31) on Sunday.
A late goal from midfielder Braulio snatched a 2-1 triumph for Real Zaragoza over visiting Real Sociedad that lifted them off the bottom of the table into 18th, level on 13 points with 19th-placed Almeria. Real Mallorca were 3-0 winners at home to Hercules and are ninth.