Two goals by Lionel Messi inspired leaders Barcelona to a 4-2 victory at Mallorca after the hosts had threatened to derail their visitors' bid for a 10th win in this season's La Liga.
Barcelona were cruising at 3-0 up at half-time thanks to goals from Xavi, Messi and Cristian Tello.
However, Mallorca scored twice in four second-half minutes through Michael Pereira and a Victor Casadesus penalty but Messi struck to bring the hosts' comeback to a halt.
Young substitute Alvaro Morata earned Real Madrid a near-farcical 2-1 win over Levante at a waterlogged Estadi Ciutat de Valencia.
Cristiano Ronaldo fired Real into a first-half lead but was injured and substituted at half-time by coach Jose Mourinho. Levante's Angel Rodriguez, on as a substitute early in the second half, equalised for the home side in the 62nd minute.
Xabi Alonso missed a penalty but then delivered the free-kick for Morata, who had only been on the pitch for two minutes after replacing Mesut Ozil, to head the winner.
The match was contested in almost unplayable conditions, with the ball barely bouncing or rolling on the sodden surface.
Atletico Madrid moved back to within three points of Barcelona after easing to a 2-0 victory over Getafe.
Adrian Lopez opened the scoring with his first league goal of the season midway through the first half, with Atletico doubling their lead two minutes before half-time as Arda Turan was allowed to run through on goal and slot coolly past Miguel Angel Moya, despite having controlled the ball with his hand.
Valencia claimed their first away point in five league games with a 1-1 draw at Valladolid.
Aly Cissokho had headed the visitors into the lead after just 15 minutes but the French defender went from hero to villain in the second half when he brought down Omar Ramos to concede a penalty and was shown a red card for denying a clear goalscoring opportunity.
Victor Perez confidently converted the spot-kick to extend Valladolid's unbeaten run to four games.
First-half goals from Oscar de Marcos and Markel Susaeta were enough to hand Athletic Bilbao a 2-1 win over Sevilla as the hosts withstood a late flurry to take all three points.
De Marcos put the hosts ahead at San Mames with a neat side-footed finish from Jon Aurtenetxe's cross in the 27th minute and Susaeta made it two with the last attack of the half as Andres Palop could only help his powerful drive into the net.
However, a grandstand finish was ensured when Athletic were reduced to 10 men as Ander Herrera was shown a second yellow card 14 minutes from time, and two minutes later Alvaro Negredo reduced the arrears from the penalty spot.
Real Sociedad ended a run of four matches without a win in the La Liga and moved out of the bottom three with a deserved victory at Malaga.
Carlos Vela gave the visitors the lead in the opening minute and, although that was cancelled out by Javier Saviola before the interval, Xabi Prieto scored the decisive goal after 59 minutes.
Defeat leaves Malaga in fifth place, 10 points behind leaders Barcelona.
Basement side Osasuna ended a run of five straight away defeats with an emphatic 3-0 win at fellow strugglers Espanyol.
The visitors took the lead through Alvaro Cejudo midway through the first half.
Kike Sola grabbed another in the 63rd minute before Manuel Omwu added further gloss to the scoreline 12 minutes from time.
Helder Postiga scored twice as Real Zaragoza hit back from two goals down to beat 10-man Deportivo La Coruna 5-3 in a topsy-turvy game at La Romareda.
The visitors had gone into an early 2-0 lead thanks to goals from Bruno Gama and Riki, but Apono brought Zaragoza back into the game from the penalty spot before half-time.
Pizzi was then shown a second yellow card for diving four minutes into the second period, and the hosts made their man advantage pay in spectacular style as Paco Montanes and Alvaro Gonzalez put them 3-2 in front before Postiga bulleted in two headers.
Rodolfo Bodipo got one back for Depor in the last attack of the game but it mattered little.
Rayo Vallecano also produced a second-half comeback to beat 10-man Celta Vigo 3-2.
Iago Aspas had fired the visitors into a two-goal lead in the first half, but the game swung in Rayo's favour five minutes before half-time when defender Gustavo Cabral was shown a second yellow card.
Leo Baptistao and Tito then headed the hosts back on level terms after the break and Piti sealed the comeback with a penalty eight minutes from time.
Sunday's La Liga Fixtures
Saturday's La Liga Results
Friday's La Liga Results