Lionel Messi scored his 500th Barcelona goal to send them top of La Liga with an injury-time winner against 10-man Real Madrid at the Bernabeu.
Barca, whose win put them top because of a better head-to-head record, have five games left, Real have six to play. Casemiro scored first for the hosts before Messi and Ivan Rakitic put Barcelona in front and Sergio Ramos was shown a red card for a wild lunge.
Substitute James Rodriguez thought he had earned Madrid a point late on. But Messi, who scored his first with a superb jinking run and finish, fired in from the edge of the area to win it for Barcelona.
Even with Brazil international Neymar suspended for Barcelona and Bale going off injured in the first half for Madrid, both sides boasted a plethora of attacking talent at the Bernabeu.
Real Madrid have won the Champions League in two of the past three seasons, but have been less successful domestically – they are without a La Liga title since 2012, with Barcelona taking the trophy three times and Atletico Madrid once since then.
Down to 10 men after Ramos’ sending off and having pulled level with five minutes to spare, Zinedine Zidane’s outfit looked intent on a winner that would have effectively put the title beyond Barcelona.
That left the space for the visitors to break away and score themselves. Tactical naivety from Zidane? Perhaps, but with a game in hand, La Liga still looks Real’s to lose.