Striker Portu scored twice as Girona fought back to beat Barcelona 4-2 and hand Real Madrid the LaLiga title.
Barca ran out at the Estadio Municipal de Montilivi knowing anything other than victory would leave them unable to catch the leaders, who had earlier eased to a 3-0 win over lowly Cadiz.
In the event, they led 1-0 and 2-1 as Andreas Christensen and Roberto Lewandowski from the penalty spot struck either side of Artem Dovbyk’s fourth-minute equaliser.
However, Portu levelled 20 minutes into the second half and, after Miguel Gutierrez had put the home side ahead, sealed a win which sparked celebrations in Madrid and lifted his side above the Catalans into second place.
Earlier, Jude Bellingham scored two minutes after coming off the bench to help ease the leaders to victory over relegation-haunted Cadiz.
It was goalless at half-time at the Bernabeu, but Brahim Diaz broke the deadlock six minutes after the restart and England international Bellingham, a 66th-minute replacement for Arda Guler, made it 2-0 with his 22nd goal of the season before Joselu wrapped up the win deep into injury time.
Defeat left Cadiz five points shy of safety with four games remaining.
If Girona are already assured of a top-four finish, Atletico Madrid still have work to do despite Rodrigo Riquelme cementing them in fourth place with a 1-0 win at Real Mallorca.
Meanwhile, Alex Suarez’s own goal and Sheraldo Becker’s strike handed Real Sociedad a 2-0 home win over Las Palmas.
In the Bundesliga, Jeong Woo-yeong and Silas struck late to fire Stuttgart to a 3-1 victory over Bayern Munich and claim a guaranteed top-four spot.
Leonidas Stergiou had given third-placed Stuttgart a 29th-minute lead which was cancelled out by Harry Kane from the penalty spot, but Jeong struck with seven minutes remaining and Silas made sure in stoppage time to reduced the gap to Bayern in second to just two points with as many games remaining.
Youssoufa Moukoko scored twice as Dortmund maintained their pursuit of the top four with a 5-1 demolition of Augsburg at Signal Iduna Park.
Moukoko’s double came either side of Donyell Malen’s strike, and although Ruben Vargas reduced the deficit, further goals from Marco Reus and Felix Nmecha completed a comfortable afternoon for the home side.
Borussia Monchengladbach needed a last-gasp Florian Neuhaus penalty to secure a 2-2 draw at Werder Bremen.
The visitors led through Robin Hack’s eighth-minute opener, but trailed to Nick Woltemade’s double until substitute Neuhaus converted his stoppage-time spot-kick.
Goals from Patrick Wimmer, Jonas Wind and substitute Vaclav Cerny saw Wolfsburg cruise to a 3-0 home win over relegated Darmstadt, while Cologne remain in deep trouble after a 0-0 home draw with Freiburg.
Armand Lauriente ended champions Inter Milan’s 28-game unbeaten Serie A run as Sassuolo completed an improbable double to keep alive their survival hopes.
Lauriente’s 20th-minute strike clinched a precious 1-0 win over a much-changed Inter to go with their 2-1 success at the San Siro on September 27.
Milan Duric headed home a late equaliser to deny Lazio victory at Monza.
Duric, who had earlier cancelled out Ciro Immobile’s 11th-minute opener, repeated the dose at the death to secure a 2-2 draw after Matias Vecino had pounced on an error by Giulio Donati to restore the visitors’ lead.
In Ligue 1, Wissam Ben Yedder cemented a 4-1 victory and a Champions League play-off spot at worst for second-placed Monaco with two second-half goals against bottom-of-the-table Clermont.
Takumi Minamino and Breel Embolo were also on target with Muhammed Cham replying for the visitors.
Third-placed Brest suffered the frustration of being held to a 0-0 home draw by Nantes, but Yassine Kechta’s double boosted Le Havre’s survival hopes as they beat Strasbourg 3-1 to move three points clear of the bottom three.
Kechta struck either side of the break and although Frederic Guilbert pulled one back for the visitors late on, Andre Ayew settled the nerves with a third in stoppage time.
Arnaud Kalimuendo fired Rennes to a dramatic victory at struggling Metz as the visitors twice came from behind to win 3-2.
Amine Gouiri and Benjamin Bourigeaud hit back after Georges Mikautadze and Papa Diallo had scored for the home side, setting up Kalimuendo to win it with Mikautadze seeing red for violent conduct in added time.
Why are you making commenting on The National only available to subscribers?
We know there are thousands of National readers who want to debate, argue and go back and forth in the comments section of our stories. We’ve got the most informed readers in Scotland, asking each other the big questions about the future of our country.
Unfortunately, though, these important debates are being spoiled by a vocal minority of trolls who aren’t really interested in the issues, try to derail the conversations, register under fake names, and post vile abuse.
So that’s why we’ve decided to make the ability to comment only available to our paying subscribers. That way, all the trolls who post abuse on our website will have to pay if they want to join the debate – and risk a permanent ban from the account that they subscribe with.
The conversation will go back to what it should be about – people who care passionately about the issues, but disagree constructively on what we should do about them. Let’s get that debate started!
Callum Baird, Editor of The National
Comments: Our rules
We want our comments to be a lively and valuable part of our community - a place where readers can debate and engage with the most important local issues. The ability to comment on our stories is a privilege, not a right, however, and that privilege may be withdrawn if it is abused or misused.
Please report any comments that break our rules.
Read the rules here