Memphis Depay and Philippe Coutinho scored late on at Villarreal as Barcelona won 3-1 to finally end their winless streak away from home under new coach Xavi.
Prior to Saturday's game, only three teams across the division had picked up fewer points on the road this season, after Barcelona were winless in their first five league matches away from the Nou Camp.
The long-awaited win came in Xavi's third match in charge since replacing Ronald Koeman.
Frenkie de Jong broke through for the visitors minutes after half-time when he turned in a rebound.
But Villarreal equalised through substitute Samuel Chukwueze 15 minutes from time and were pressing for a winner themselves when Depay struck against the run of play two minutes from time.
Depay brought down a long goal kick from Marc-Andre ter Stegen, dribbled around Rulli and coolly put the ball between the legs of defender Pervis Estpuinan on the line.
Coutinho sealed the three points in stoppage time when he converted a penalty he had earned himself.
Barcelona remain in seventh place, but reduced the gap to early leaders Real Madrid to seven points.
Rayo Vallecano continued to impress as the promoted team fought back to draw 1-1 at Valencia.
Rayo, who have the league's best home record, inched into fifth place after taking the point on the road.
Iago Aspas and Santi Mina scored as Celta Vigo won 2-1 at Alaves, while Mallorca and Getafe drew 0-0 on the Balearic Islands.
Serie A: Juventus' misery compounded by Atalanta
There was more misery for Juventus as they were jeered off following a 1-0 home defeat by Atalanta, four days after losing 4-0 at Chelsea in the Champions League.
Duvan Zapata scored the only goal in Turin, with a powerful effort in the 28th minute which went in off the underside of the crossbar.
Juventus almost levelled in the second half but Adrien Rabiot's effort was denied by a fingertip save from Juan Musso.
Juventus players Federico Chiesa and Weston McKennie went off injured during the match, to cap a miserable night for the Bianconeri.
Inter Milan kept up the pressure on the top two in Serie A as the defending champions won 2-0 at Venezia.
Hakan Calhanoglu opened the scoring in the first half, before Lautaro Martinez sealed the result with a stoppage-time penalty. Third-placed Inter moved to within two points of AC Milan and Napoli. Napoli hoss Lazio on Sunday, while Milan welcomes Sassuolo to the San Siro.
Both teams struggled to create chances in the early stages and Inter's best opportunity came in the 30th minute when Venezia goalkeeper Sergio Romero did well to parry an Ivan Perisic header.
Inter took the lead six minutes later as Calhanoglu unleashed a powerful effort from outside the area which flew into the bottom-left corner.
Venezia almost levelled shortly after with a screamer from Mattia Aramu that Inter goalkeeper Samir Handanovic kept out.
Inter had several opportunities to double their lead before eventually doing so in stoppage time. Venezia left-back Ridgeciano Haps was penalised for a handball, and Martinez fired the resulting spot kick into the bottom-left corner.
Elsewhere, two late goals saw Empoli complete an extraordinary turnaround and beat Fiorentina 2-1.
Fiorentina seemed to be heading for the win after Dusan Vlahovic's 57th-minute opener but substitute Filippo Bandinelli levelled three minutes from time, and Andrea Pinamonti netted the winner in the final minute of the game.
Sampdoria came from behind to beat Hellas Verona 3-1.
Bundesliga: Haaland scores on return from injury
Erling Haaland scored on his comeback with a second-half volley as Borussia Dortmund came from a goal down to beat VfL Wolfsburg 3-1 in the Bundesliga.
The Norwegian striker scored in the 81st minute after coming on as a second-half substitute following his recovery from a hip flexor muscle injury that had sidelined him since mid-October.
With their sixth win in the last seven league matches, Dortmund - having crashed out of the Champions League on Wednesday after a 3-1 loss to Sporting Lisbon - moved up to 30 points, one behind Bayern Munich, who beat Arminia Bielefeld later in the day.
The Bundesliga's top two teams face each other next weekend.
"A lot has happened in the past few days. But we played a good game and the result stands above everything else," Dortmund's Julian Brandt said.
"We are extremely happy. Now we have a good full week to prepare for Bayern and we will go into that game with a lot of confidence."
The Wolves took a second-minute lead through Wout Weghorst, who headed in at the near post to complete a textbook break that had left the Dortmund back line exposed.
The Ruhr valley club levelled with an Emre Can penalty in the 35th minute after captain Marco Reus was brought down in the box by Wolfsburg's Maxence Lacroix.
Donyell Malen put them in front by rifling in from a Reus pass to score for the third consecutive game in all competitions.
There was more good news for Dortmund, with Haaland making a second-half substitute appearance and looking as sharp as ever ahead of the big game against the Bavarians.
He needed only eight minutes on the pitch to bag his 10th league goal in seven appearances, volleying in from close range to become the youngest ever player to reach 50 Bundesliga goals at 21 years and 128 days.
Bayern laboured for long periods against a defensive-minded Bielefeld team, who had earned a 3-3 draw on their previous visit to Munich.
Substitute Jamal Musiala provided the key with a brilliant diagonal pass forward to Thomas Muller, who laid it off for Leroy Sane to fire in the winner from outside the penalty area in the 71st minute.
It ensured Bayern set a record of 102 Bundesliga goals in a calendar year, previously held by Cologne who plundered 101 in 1977.
Sebastian Andersson scored in injury time as Cologne beat Borussia Monchengladbach 4-1 in their Rhine derby in front of 50,000 fans.
Augsburg substitute Michael Gregoritsch scored in the seventh minute of injury time to salvage a 1-1 draw at Hertha Berlin, and extend the hosts' winless run to four games.
Elsewhere, Hoffenheim routed bottom side Greuther Furth 6-3 away, while Bochum came from behind to beat visitors Freiburg 2-1. Milos Pantovic scored the winner from barely inside the Freiburg half.
Ligue 1: Bottom side Metz stun second-placed Nice
Bottom side Metz stunned second-placed Nice 1-0 in Ligue 1.
Nice's second straight defeat at Allianz Riviera Stadium could see Rennes, who play on Sunday, jump above them into second place.
The hosts gave a listless performance in the first half and Metz capitalised on a lack of urgency to take the lead in the 31st minute when Fabien Centonze converted a low cross from Nicolas de Preville.
Goalkeeper Alexandre Oukidja protected Metz's lead by saving Andy Delort's close-range header with his legs on the stroke of half-time, before pushing behind a cross-cum-shot from Pablo Rosario in the 63rd minute.
Champions Lille failed to convert a late penalty and remained in the bottom half of the Ligue 1 table when they were held to a 1-1 home draw by 10-man Nantes on Saturday.
The result left Lille stuck in 12th spot, with 18 points from 15 matches, one point behind their visitors who remained in 11th.
Jonathan David had his 80th-minute penalty saved by Alban Lafont after Fabio had given away the spot kick, and been sent off, for tugging on the shirt of Mehmet Celik.
It was an unconvincing effort from the Canadian international and proved a comfortable stop for the Nantes goalkeeper.
Lille, whose domestic form has contrasted with their Champions League exploits where they top their group with one game to play, went ahead early when veteran Burak Yilmaz crashed home a right-footed shot.
The ninth-minute goal was set up by Jonathan Bamba and suggested Lille could break a spiral of disappointing Ligue 1 form.
But, as had happened six times previously this season, they failed to hold on to their lead as Nantes equalised in the 24th minute.
Ludovic Blas shrugged off the defensive attention of both Tiago Djalo and captain Jose Fonte to squeeze his shot inside the post and make it 1-1.
Nantes might have taken the lead six minutes later but the effort of former Manchester United full-back Fabio cannoned back off the upright.
Nantes's Pedro Chirivella missed a good chance with some 30 minutes left before Lille came back strongly to dominate the closing stages but squandered their chance to take all three points.