Madrid - Luis Suarez struck four goals for the second time in four days as Barcelona moved back to the top of La Liga with the help of three penalties in a 6-0 win over Sporting Gijon on Saturday.
Only Barca's superior head-to-head record continues to separate them from Atletico Madrid with three games remaining as Angel Correa's deflected strike handed Diego Simeone's men a 1-0 win over Malaga.
Gareth Bale ensured Real Madrid remain just a point behind in third as he struck twice to inspire a stunning fightback from a Cristiano Ronaldo shorn Madrid from two goals down to win 3-2 at Rayo Vallecano on Saturday.
Suarez hit four as Barca bounced back from three consecutive league defeats in style with an 8-0 thrashing of Deportivo la Coruna in midweek, and his eight-goal week takes him three clear of Ronaldo in the fight to be La Liga's top scorer.
"I'm a little bit surprised," Suarez told Movistar+.
"I just want to enjoy the fact the goals helped the team in the second-half after a difficult first-half.
"We didn't play the ball at the speed we normally do and at half-time we had to reflect on the fact we weren't playing well. In the second-half we showed that we need to play with that intensity all the time."
Lionel Messi opened the scoring for Barca with a looping header into an empty net despite Sporting protests that Suarez had fouled goalkeeper Ivan Cuellar in the build-up.
Yet, Barca had to wait until 25 minutes from time to make the game safe when Suarez slotted home his 50th goal of the season from Andres Iniesta's pass.
The Uruguayan then added two more from the penalty spot after Roberto Canella handled and Antonio Sanabria upended Neymar inside the area.
Neymar converted Barca's third spot-kick after Ognjen Vranjes was shown an incredibly harsh second yellow card for a push on the Brazilian.
And Suarez rounded off the scoring when he smashed home Messi's pass off the inside of the post.
Without the injured Ronaldo for the first time in La Liga this season, Real's title hopes looked set to end in the rain at Rayo when early goals from Adrian Embarba and Miku put Rayo 2-0 in front.
However, Bale took responsibility to drag Madrid back into the game as he rose highest to power home Toni Kroos's corner 10 minutes before half-time.
Madrid suffered another blow before the break as Karim Benzema limped off with a knee injury making him a serious doubt to face Manchester City in the first leg of their Champions League semi-final on Tuesday.
Lucas Vazquez replaced the Frenchman and it was the diminutive winger who brought Real level in unusual fashion as he powered home a header from Danilo's cross six minutes into the second half.
And fittingly Bale was the man to decide the game as he pounced on a loose pass midway inside the Rayo half and surged forward before striking low and hard past Juan Carlos for his 18th goal of the season.
"He is very happy to make the difference," Real coach Zinedine Zidane said of Bale.
"When we needed him he was phenomenal. He scored two, but even without speaking about the goals, he played very well."
Atletico were also forced to work for the three points ahead of their Champions League semi-final against Bayern Munich in midweek and could face further repercussions after coach Diego Simeone was sent to the stands at half-time in bizarre circumstances.
Referee Mateu Lahoz punished the Argentine after an extra ball was thrown onto the pitch from near the Atletico bench to break up a dangerous Malaga counter-attack.
"It is clear the referee took the correct decision," said Simeone, who could face up to a three-game touchline ban.
"We hope it isn't too many games."
Correa eventually made the telling contribution just five minutes after coming on as a substitute as his shot from outside the box flicked off Raul Albentosa to leave Guillermo Ochoa helpless and Atletico recorded a 32nd clean sheet of the season to seal all three points.