For the second time this season, Jude Bellingham scored an injury-time goal to win the Clasico for Real Madrid.
This time he has also all but ended Barcelona’s title hopes.
Real twice fought back from a goal down and before Bellingham smashed in the winner at the far post from about six yards out to beat the champions for a fourth successive time. The result left second-placed Barca 11 points adrift of the leaders with six games left.
Barca took the lead in the sixth minute when Andreas Christensen headed in following a corner after Real goalkeeper Andriy Lunin failed to clear the cross from his six-yard-box.
Vinicius Jr equalised 12 minutes later from the penalty spot after Lucas Vazquez was fouled inside the box.
Wasteful Real dominated the second half but missed several chances and allowed substitute Fermin Lopez to give the visitors the lead again in the 69th minute from a rebound, but Real hit back with a Lucas Vazquez volley four minutes later.
Real kept pushing for another goal and their perseverance paid off in added time when Vazquez raced down the right channel and crossed to Bellingham, who fired in the winner.