Luis Suarez’s 88th-minute winner against Osasuna has left Atletico Madrid on the brink of clinching the LaLiga title for only the second time since 1996.
Diego Simeone’s side were staring at a shock defeat after Ante Budimir headed the visitors in front with just 14 minutes remaining.
But substitute Renan Lodi netted for Atletico in the 82nd minute before Suarez’s late decider.
Atletico, who were champions in 2014 under Simeone, head into the concluding round of fixtures next Sunday with a two-point advantage over Real Madrid in second.
Real Madrid kept alive their hopes of retaining their title following a 1-0 win at Athletic Bilbao, Nacho Fernandez scoring the only goal of the game midway through the second half. Real host Villarreal on the final day, while Atletico travel to Real Valladolid.
Santi Mina shattered Barcelona’s dwindling hopes of winning the title as his brace for Celta Vigo condemned Lionel Messi and company to a 2-1 defeat at the Nou Camp.
Messi briefly dragged Barca to within two points of Atletico when he put his side ahead, but Santi’s double created an insurmountable gap for Ronald Koeman’s men.
The result means the Catalan club will finish outside the top two for the first time since 2008 as their Madrid rivals Real and Atletico are now out of reach.
Elsewhere in Spain, Eibar were relegated from La Liga following a 4-1 defeat at Valencia. The result leaves them three points behind Huesca, who lost 1-0 away at Real Betis, with a worse head-to-head record.
Elche won 3-1 at Cadiz to provide themselves with a chance of staying up. Carlos Bacca scored a hat-trick as Villarreal secured a 4-0 win against 10-man Sevilla, while Real Sociedad also scored four times in a 4-1 home win against Valladolid.
Takefusa Kubo struck in the 84th minute in a 2-1 triumph for Getafe against Levante, while Alaves ran out 4-2 victors against Granada.
Ligue 1 – PSG take title race to final day
PSG routed Reims 4-0 to take the Ligue 1 title race to the last day, as Lille drew 0-0 at home to St Etienne, giving them just a one point lead at the top.
Both teams are away next weekend, with PSG at Brest and Lille facing Angers.
PSG coasted after Reims had defender Yunis Abdelhamid sent off in the 11th minute for a handball. Neymar converted the penalty with a staggered run-up followed by a typically casual shot which sent the goalkeeper the wrong way.
Kylian Mbappe doubled the lead midway through the first half after a mistake from defender Thomas Foket, who sent the ball in his own penalty area straight to Mbappe for a league-leading 26th goal and 40th overall this season.
Marquinhos netted with a trademark downward header midway through the second half and Moise Kean completed the scoring in the last minute.
Lille struggled to break down an organized St Etienne side, but came close to scoring in the 36th minute when Luiz Araujo’s shot sailed just wide after he latched onto striker Burak Yilmaz’s astute pass.
Lille almost won during injury time but Yusuf Yazici’s free kick hit the post and Yilmaz’s shot from the rebound was blocked by a defender.
Monaco beat seventh-place Rennes 2-1 with Aleksandr Golovin setting up striker Wissam Ben Yedder’s 21st league goal of the campaign and adding the second goal with a slightly deflected strike.
Brazil midfielder Lucas Paqueta grabbed two goals and star forward Memphis Depay one as Lyon coasted to a 5-2 win at Nimes, who was relegated by the defeat.
Houssem Aouar added the fourth following a fine team move and substitute Islam Slimani headed in the fifth from close range for Lyon.
Marseille moved into pole position for fifth and a Europa League place by beating Angers 3-2, but only after the visitors rallied from 2-0 down.
Arkadiusz Milik then netted an injury-time penalty to complete a hat trick and take his tally to nine in 15 games since joining on loan from Napoli. Marseille are three points ahead of sixth-place Lens, which lost 3-0 at Bordeaux.
Nantes won 4-0 at Dijon for a fourth straight victory, but remained in the relegation play-off position after Lorient won 2-1 at home to Metz to stay in 17th. Ludovic Ajorque scored both goals in Strasbourg’s 2-0 win at Nice.
Serie A – Race for top four heats up
AC Milan squandered the chance to secure a long-awaited return to the Champions League as goalkeeper Gianluigi Donnarumma came to their rescue in a 0-0 draw at home to Cagliari.
Victory over the 16th-placed Sardinians would have assured Milan of a top-four finish and their first appearance in European football’s top club competition since 2013/14 next season.
But Stefano Pioli’s side toiled to a disappointing draw that leaves them third on 76 points going into the final round, level with Napoli in fourth but above them on head-to-head record, and one point ahead of fifth-placed Juventus.
Napoli captain Lorenzo Insigne scored to help his side beat 10-man Fiorentina 2-0 as they chase a Champions League spot.
Napoli will be guaranteed a place in next seasons Champions League if they win their final game of the season at home to Hellas Verona next Sunday.
The breakthrough came after 57 minutes when Napoli were awarded a penalty for a shirt pull at a corner following a VAR review, and Viola substitute Bartlomiej Dragowski was shown a straight red card for protesting the decision.
Insigne’s tame spot kick was saved but he fired home the rebound, and the Italy winger was close to a second when denied by the woodwork again with a low shot that struck the post.
Napoli doubled their advantage on the 67th minute when Insigne laid off a pass to Zielinski, whose first-time strike took a big deflection off Lorenzo Venuti on its way in and was awarded as an own goal to wrap up the points.
Already-relegated Parma capitulated 3-1 at home to local rivals Sassuolo, while Benevento will almost certainly join the Crociati in Serie B following their 1-1 home draw against Crotone.
Elsewhere, Fabio Quagliarella, 38, rolled back the years to fire Sampdoria to a 1-0 win at Udinese.
Bundesliga – Dortmund secure Champions League football
Borussia Dortmund secured Champions League football for next season as they continued their fine recent form with a 3-1 win at Mainz.
Raphael Guerreiro, Marco Reus and Julian Brandt struck to earn newly-crowned DFB-Pokal winners Dortmund a seventh successive win in all competitions, before Robin Quaison netted a stoppage-time consolation from the penalty spot for Mainz.
RB Leipzig – who are already guaranteed to finish second behind champions Bayern Munich – fought back to draw 2-2 at home to Wolfsburg.
Maximilian Philipp’s first-half double looked set to earn Wolfsburg victory, but Justin Kluivert and Marcel Sabitzer salvaged a point for the hosts.