Atletico Madrid stumbled again at the top of LaLiga with defeat to Athletic Bilbao as Barcelona closed to within two points.
Atletico had reignited their title push with back-to-back victories over Eibar and Huesca but fell to a 2-1 loss against Bilbao.
Alejandro Berenguer Remiro put Bilbao ahead in the eighth minute, Stefan Savic looked to have secured a point for Atletico with a 77th-minute equaliser but Inigo Martinez restored the Basque side's lead four minutes from time.
Earlier, Barca – who have a game in hand on both Atletico and Real Madrid – were 2-1 winners at Villarreal.
Villareal's Samuel Chukwueze handed his side the lead in the 26th minute but a quickfire double from Antoine Griezmann turned things around before Manu Trigueros was sent off for a lunging tackle on Lionel Messi.
There were bizarre scenes in Seville, where the final whistle blew for a 2-1 win for the hosts against Granada only for the referee to realise he had failed to add on the final minute of stoppage time.
He ordered the players back onto the pitch to play out the remaining 60 seconds, but Sevilla held on to secure Champions League qualification.
Ivan Rakitic had given the hosts the lead with a 16th-minute penalty and Lucas Ocampos doubled the advantage early in the second half. That looked set to be that until Roberto Soldado pulled one back from the spot just before the first final whistle.
Enes Unal scored twice for Getafe in a crucial 2-0 victory over fellow strugglers Huesca while Celta Vigo were 2-1 winners over Osasuna.
In the Bundesliga, second-placed RB Leipzig returned to winning ways with a 2-0 victory over Stuttgart.
Leipzig were beaten by Cologne in midweek but found themselves playing against 10 men after only 14 minutes when Naouirou Ahamada was sent off, and they capitalised with goals from Amadou Haidara and an Emil Forsberg penalty.
Borussia Monchengladbach thumped struggling Arminia Bielefeld 5-0, with three goals coming in the first 20 minutes.
In Serie A, Atalanta climbed into second place, 11 points behind Inter Milan, with a thumping 5-0 victory over Bologna.
The Bergamo team, who have won five of their last six matches, leapfrogged AC Milan ahead of their match on Monday.
Ruslan Malinovskiy put them ahead in the 22nd minute and they were two up at half-time through Luis Fernando Muriel Fruto's penalty.
Jerdy Schouten's sending off shortly after half-time made Bologna's task even harder, and Atalanta capitalised fully with three further goals.
Earlier, Inter edged a 1-0 victory over Hellas Verona, Matteo Darmian scoring the goal 14 minutes from time.
Fourth-placed Juventus were held to a 1-1 draw by Fiorentina. Dusan Vlahovic gave the Florentine side the lead from the penalty spot but it was cancelled out by Alvaro Morata just after half-time.
Cagliari boosted their hopes of avoiding relegation with an impressive 3-2 victory over Roma while Benevento dropped into the bottom three following a 4-2 defeat by Udinese.
In Ligue 1, Lille jumped back above Paris St Germain to the top of the table by coming from two goals down to beat fourth-placed Lyon 3-2.
Lyon led through Islam Slimani and a Jose Fonte own goal but Burak Yilmaz levelled on the stroke of half-time, Jonathan David grabbed a 60th-minute equaliser and Yilmaz scored the winner five minutes from time.
Wissam Ben Yedder scored a late goal as third-placed Monaco defeated Angers 1-0 while Lens climbed to fifth with a 2-1 victory over struggling Nimes despite being down to 10 men for more than an hour following Issiaga Sylla's red card.
Nantes gave themselves a lifeline at the bottom with a 2-1 victory over Strasbourg but Dijon's relegation was confirmed after they were thumped 5-1 by Rennes, who scored four times in the last 20 minutes.
Lorient pulled away from danger with a 4-1 victory over Bordeaux, Terem Moffi scoring a hat-trick, while Nice were 3-1 winners against Montpellier.