Real Madrid edged crosstown rival Getafe 1-0 as the league leaders maintained their seven-point cushion over defending champion Barcelona on a Saturday marked by near freezing temperatures across Spain.
Barcelona responded to Madrid's earlier victory with a closer-than-comfort 2-1 win of its own over Real Sociedad to stay undefeated at Camp Nou stadium this season.
Madrid dominated possession at Alfonso Perez Coliseum, but Getafe - the only team to beat Barcelona in any competition this season - held firm in defense to keep alive its chances until the final whistle.
"It was an evenly matched game against a rival that always plays us tough,'' goalscorer Sergio Ramos said. "But you have to know how to suffer and at the end you get the reward.''
With Barcelona coach Pep Guardiola resting some starters for Wednesday's Copa del Rey semifinal against Valencia, Lionel Messi set up youth player Cristian Tello for Barcelona's opener and then added another before Sociedad substitute Carlos Vela halved the deficit.
"I'm happy for the goal and because the coach had faith in me, but also for the win because the team needed it,'' Tello said. "The league is very long and there are a lot of points left, so we have to be there when Madrid stumbles.''
Getafe, which entered the game unbeaten in six rounds, had an excellent opportunity to grab the lead three minutes in, but young forward Abdel Barrada volleyed over the bar from point-blank range.
That would be one of the few times the hosts threatened Iker Casillas' net as Madrid quickly grabbed the lead in the 18th when Ramos turned Mesut Oezil's corner kick into the far side of the net with a powerful header. The assist took the Germany midfielder's league-high tally to 12 on the season.
Madrid's lack of finishing touch almost cost it in the 72nd when defender Pepe clearly blocked Diego Castro's shot with his arm before collapsing to the ground as if knocked unconscious, but the referee ignored Getafe's call for a penalty.
"I didn't see it,'' said Madrid assistant coach Aitor Karanka, who again spoke for head coach Jose Mourinho. "If we had been more in tune we would have won by a wider margin.''
Barcelona's game against Sociedad followed a similar pattern, with the European champions owning both the ball and scoring opportunities but unable to decide the game early on.
Facing injuries to Spanish internationals Andres Iniesta, Pedro Rodriguez and David Villa, Guardiola again turned to Barcelona's youth team and gave the nod to Tello along with winger Isaac Cuenca.
And it fell to Tello to start the scoring when he ran onto Messi's pass and rolled a right-footed strike under the oncoming Claudio Bravo for the ninth-minute goal.
Barcelona, led by a Messi anxious for his first goal in four games, pressed hard to extend the lead.
Tello thought he had a brace in the 68th when he fired in Cuenca's rebound that had come off the crossbar, but it was waived off after the referee ruled Dani Alves offside when the ball hit him on the goalline before finding the net.
"I want to thank everyone who came out tonight with this weather,'' Guardiola said. "And second, I want to congratulate Cristian and Isaac. It isn't easy to play under so much pressure.''
Messi finally broke through in the 72nd when he made a diagonal run to meet Dani Alves' lob and whipped it into the net with a left-footed shot for his 23rd goal in league play.
But just when Barcelona looked likely to cruise to another comfortable home win, Vela got behind the defense and coolly fired by goalkeeper Victor Valdes two minutes later to keep nerves high until the end.
Sergio Busquets went on as a late substitute to shore up Barcelona's midfield, but lasted only 10 minutes before having to be carried off with a deep cut in his right leg after a collision with another player.
Elsewhere, Espanyol substitute Juan Albin scored in stoppage time as his team rallied twice to draw 3-3 at Athletic Bilbao.
Levante held onto fourth place despite a 1-1 draw with Racing Santander, level on points with Espanyol and two clear of Bilbao.
Mallorca edged Real Betis 1-0 as both teams finished with 10 men after Betis' Pedro Mario and Mallorca's Ivan Ramis were each booked twice.
On Sunday, it's: Sporting Gijon vs. Osasuna, Sevilla vs. Villarreal, Zaragoza vs. Rayo Vallecano, and Atletico Madrid vs. Valencia.
Malaga hosts Granada on Monday.