Alvaro Garcia and Fran Garcia struck to earn the hosts a memorable victory, with Robert Lewandowski pulling one back late on for Barca.
Xavi Hernandez’s side remain 11 points clear of second-placed Real Madrid with seven matches remaining.
After champions Madrid 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 Madrid 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.
“They played a great game, they deserved to win, we weren’t good enough,” Barcelona defender Ronald Araujo told Movistar.
“In this ground they are very intense, we made two mistakes and they scored their goals.”
Xavi was without suspended captain Sergio Busquets but handed Pedri his first start since he was injured in February.
Frenkie de Jong started as the lone defensive midfielder and endured a torrid night, although the same was true for most of his team-mates too.
Sergio Camello might have put Rayo in front early on after a Pedri mistake, but Marc-Andre ter Stegen made a good save to deny the on-loan Atletico forward.
However Rayo soon did break the deadlock when Camello darted infield and fed Alvaro Garcia, who produced an early, drilled strike which flashed across Ter Stegen and into the bottom corner.
Jules Kounde, playing at right-back as he has done for most of the season, did not get close enough to shut the forward down.
Lewandowski should have equalised for Barcelona after good work by Gavi and then Raphinha to set him up, but Rayo goalkeeper Stole Dimitrievski denied the forward one-on-one.
Lewandowski did find the net shortly before half-time but it was ruled out by VAR for offside.
– Fran strikes –
Rayo doubled their lead soon after the break when left-back Fran Garcia, who will join Real Madrid in the summer, pressed De Jong and won the ball back in dangerous territory.
The defender smashed a low strike past Ter Stegen to make Rayo the only side to score more than one against Barcelona in La Liga this season, aside from Madrid.
“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.”
Camello could have added a third but fired across the face of the goal before Lewandowski pulled one back for Barcelona after Franck Kessie’s shot was blocked.
It ended a run of four matches without a goal for the striker, the division’s top scorer with 18, four ahead of Real Madrid’s Karim Benzema.
Despite Barcelona finally showing some urgency in the final stages Rayo held on for only their second win in their last 11 league matches, with Andoni Iraola’s side ninth.
“The message is very simple, this is not over,” Xavi told DAZN after the game.
“Each game is a war, it’s very hard to win. Now we have two games at home to make up for today’s defeat.
“We leave annoyed because it was a good opportunity.”
AFP