Leaders Real Madrid did just enough to earn a sixth consecutive Primera Liga win, as defender Sergio Ramos returned from injury to secure a 1-0 victory at city rivals Getafe.
• European gallery
Ramos celebrated his match-winining return at the Coliseum Alfonso Perez after 18 minutes, muscling in to head home a Mesut Ozil corner from six yards.
While Madrid failed to add to the veteran defender's goal they were rarely threatened and were not made to pay for the second-half profligacy of Karim Benzema. Getafe, unbeaten in six league games before the match, offered little as an attacking force,
Lionel Messi scored one goal and set up another as Barcelona stayed seven points behind Real Madrid with a 2-1 victory over Real Sociedad at the Nou Camp - but Pep Guardiola's men were made to work hard for their triumph.
Messi's fine pass led to youngster Cristian Tello opening the scoring early on and the Argentina international doubled his side's lead in the 72nd minute with his 23rd league goal of the campaign.
However, Sociedad, who had caused Barcelona several problems at the back during the match, pulled a goal back immediately through substitute Carlos Vela to leave the home side facing a nervy finale.
Barcelona held on for the win though to ensure that Madrid, who beat Getafe earlier in the evening, would not edge any further ahead in the title fight.
Juan Albin scored a stoppage-time equaliser as Espanyol rescued a point in a thrilling 3-3 draw against Athletic Bilbao at San Mames.
Athletic had dominated the early stages and deservedly took the lead when Oscar de Marcos battled his way through the Espanyol defence to fire under Kiko Casilla.
The lead lasted only seven minutes though as Ndri Romaric curled in from outside the area before Espanyol went in front just after half-time thanks to a wonder strike from Vladimir Weiss.
Athletic's threat from set-pieces turned the game around again as Fernando Llorente headed in Markel Susaeta's free-kick before Javi Marquez nodded home seven minutes later to put the hosts 3-2 ahead.
However, the drama did not end there as Albin latched onto Kalu Uche's through-ball in the 93rd minute to power a ferocious shot past Gorka Iraizoz and maintain Espanyol's two-point advantage over Athletic in the race for a Champions League place.
Levante's hopes of catching city rivals Valencia in third place suffered another setback as they were held to a 1-1 draw at home by struggling Racing Santander.
Arouna Kone put the hosts in front midway through the first half with a close-range header, but they wasted further chances to extend their lead, and relegation-threatened Racing drew level through Manuel Arana's leveller on the hour mark.
Chori Castro scored the only goal of the game as nine-man Real Mallorca held on to beat Real Betis 1-0.
Tomer Hemed and Michael Pereira were denied by Betis keeper Espinosa Casto early on before Castro curled in a wonderful free-kick on 23 minutes. Victor Casadesus came within inches of extending the lead before referee Carlos Velasco Carballo took centre stage in the second period by brandishing three red cards.
Mario was first to go for the visitors before Mallorca duo Ivan Ramis and Victor followed suit for two bookable offences, but even with the extra man for the final few minutes Betis rarely threatened to find an equaliser.