Rayo Vallecano stunned impotent La Liga leaders Barcelona on Wednesday with a 2-1 win, outplaying the Catalans at a rowdy Vallecas.
Atletico Madrid cut the gap on second-place rivals Real Madrid to two points with a 3-1 win over Real Mallorca, celebrating their 120th anniversary in style.
Xavi Hernandez's Barcelona remain 11 points clear of second-placed Real Madrid with seven matches remaining.
After the champions lost at Girona on Tuesday their hopes of defending the title are virtually over, despite Barcelona following suit with a deserved defeat in the capital.
Xavi's side have won just one of their last four league matches — a narrow triumph over Atletico on Sunday — as they limp towards the finish line and a first title since 2019.
Barcelona's coach urged his players to be wary of Rayo's threat before the game, but they did not heed his warning. The Catalans have not beaten the Madrid club in their last four league meetings.
"The league is not finished, this is the problem — we have to deserve La Liga, today we deserved defeat," Xavi told reporters.
"What annoys me is that today we did not compete how the game required us to. But we will get players back (from injury), there's another game on Saturday.
"Here a lot of teams have lost, and others have had a lot of trouble winning. Luckily, there's another game on Saturday."
The coach was without suspended captain Sergio Busquets but handed Pedri his first start since he was injured in February.
Rayo broke the deadlock early on when Alvaro Garcia drilled home across Marc-Andre ter Stegen and into the bottom corner.
Robert Lewandowski should have equalised for Barcelona but Rayo goalkeeper Stole Dimitrievski denied the forward one-on-one, and then the Pole had a goal ruled out for offside.
Rayo doubled their lead after the break when left-back Fran Garcia pressed Frenkie de Jong, collected the ball and drove on to score.
"We knew that it was an important day for us, they say the giant-killers are back," said Fran Garcia.
"The atmosphere can't be described … we want to give it back in the best way possible."
Lewandowski pulled one back for Barcelona after Franck Kessie's shot was blocked, ending a run of four games without a goal for the division's top scorer.
Rayo held on for only their second win in their last 11 league matches — and third in four games against Barca for coach Andoni Iraola.
Diego Simeone's Atletico Madrid, on the club's 120th anniversary, put on an entertaining display in their win over Mallorca with Antoine Griezmann at the heart of it once again.
The forward produced two assists as Rodrigo de Paul, Alvaro Morata and Yannick Carrasco struck for the hosts at the Metropolitano.
After Real Madrid were thumped 4-2 by Girona on Tuesday, Atletico capitalised to reel in their neighbours.
Atletico, wearing special blue and white kits at home to mark the occasion of their anniversary — the design was based on their first ever shirt — had their celebrations disrupted early on.
"It's impossible not to get stuck in with this atmosphere," Simeone told DAZN.
"After such a bad start (to the season), to get back on our feet fills me with pride, because it was not easy."
Matija Nastasic put Mallorca ahead against the run of play after 20 minutes, heading in from a corner.
De Paul equalised in first-half stoppage time after Predrag Rajkovic parried from Griezmann, but the Frenchman laid the rebound across for his team-mate to finish.
Atletico took the lead early in the second period when Nahuel Molina crossed for Morata to powerfully head home.
Carrasco netted the third after 77 minutes on the break after Griezmann sent him through on goal with a fine lobbed pass and he rounded Rajkovic before finishing.
Almeria climbed up to 15th with a 2-1 win at 10-man Getafe, which left the hosts 17th, one point above the bottom three, which they could sink into depending on other results Thursday.
Celta Vigo earned a late win over bottom-of-the-table Elche thanks to defender Joseph Aidoo's diving header.