Leon Goretzka scored a stunning scissor-kick against his former club as Bayern Munich moved to within one point of Bundesliga leaders RB Leipzig following a thumping 5-0 home win over Schalke.
Earlier, Leipzig slipped to a first defeat in 14 matches in all competitions as they lost 2-0 at Eintracht Frankfurt, with a superb strike from Almamy Toure and stoppage-time second from Filip Kostic securing victory.
Borussia Monchengladbach are only two points off the top after Florian Neuhaus' audacious 45-yard chip sealed a 3-1 win against Mainz.
Elsewhere, Paderborn boosted their survival hopes with a 2-0 win at Freiburg, Jurgen Klinsmann's Hertha Berlin came from behind to beat Wolfsburg 2-1 and Union Berlin secured a sixth home win of the season with a 2-0 victory against Augsburg.
Goalkeeper Marc-Andre Ter Stegen produced a string of top saves to keep Barcelona in the game in the first half, denying Maxi Gomez from the penalty spot after Gerard Pique had brought down Jose Gaya in the area, before tipping another Gomez shot onto the crossbar.
But Valencia drew first blood three minutes into the second half thanks to a Jordi Alba own goal, before Gomez made the points safe 13 minutes from time.
Asier Villalibre scored his first LaLiga goal but it was not enough for Athletic Bilbao to take maximum points as Raul De Tomas' third goal in as many games earned Espanyol a point from a 1-1 draw marred by allegations of racist abuse towards Bilbao's Inaki Williams.
Luuk De Jong and Nolito scored for Sevilla as they moved up to third with a comfortable 2-0 win at home to Granada, while teenage striker Fernando Nino scored just a minute into his debut to snatch Villarreal a 2-1 win at Alaves.
Josip Ilicic scored a hat-trick – including a quickly-taken free-kick from almost on the halfway line – as Atalanta crushed Torino 7-0 in Serie A.
The Slovenia international made it nine goals in his last six matches, with Robin Gosens, fit-again forward Duvan Zapata and sub Luis Muriel (2) also on the scoresheet.
Torino had Armando Izzo sent off for a second booking in the 77th minute, by which time the visitors were cruising, and Sasa Lukic followed in stoppage time.
An inspired display from goalkeeper Bartlomiej Dragowski earned Fiorentina a point in a goalless draw against Genoa.
The Pole saved a penalty from Domenico Criscito and preserved a point late on with a fine stop to deny Andrea Pinamonti.
Bologna eased to a 3-1 win at SPAL in the early afternoon kick-off.
In Ligue 1, second-placed Marseille could only draw 0-0 at home to Angers.
Nemanja Radonjic had the hosts' best chances but they could not find a goal and sit seven points behind leaders Paris St Germain.
Montpellier moved up to fourth with a 2-1 win over 10-man Dijon.
Mounir Chouiar was sent off for two bookable offences in the 54th minute and the home side took full advantage, with Florent Mollet opening the scoring two minutes later and Andy Delort adding a second seven minutes later.
Mama Balde pulled one back late on but Montpellier saw the game out.
Strasbourg are seventh after a 3-1 win at Monaco, while Brest, Metz and St Etienne were also winners.