Barcelona's recent slump continued as Sergio Ramos' header nine minutes from time handed Real Madrid their second win over the Catalans in five days.
Karim Benzema had given the hosts the perfect start as he stabbed home Alvaro Morata's cross after just six minutes, but Barca were level just 12 minutes later when Lionel Messi equalled Alfredo di Stefano's record for goals scored in Clasicos as he rifled in his 18th strike in clashes between the two.
The rest of the first half was then played out at a rather pedestrian pace but the introduction of Cristiano Ronaldo from the Madrid bench livened up matters after the break and Madrid eventually found the winner when Ramos rose highest to power home Luka Modric's corner.
Jose Mourinho had signalled that Tuesday's Champions League clash with Manchester United was clearly his priority as he made seven changes to the side that started the 3-1 win over Barca in the Copa del Rey semi-final second leg in midweek with Ronaldo's absence being the most striking.
However, even without their talisman Madrid made the perfect start as Barca's defensive woes of late continued when Morata swung in a delightful cross from the left and Benzema was on hand to prod the ball home from close range.
Barca weren't just slow to start at the back as their play going forward was also decidedly predictable until they quickened the pace and equalised with their first effort on goal 12 minutes later.
A nice through ball from Dani Alves put Messi in behind the Madrid defence and he turned onto his favourite left foot to score for the 16th consecutive league game.
The game then settled down into a familiar pattern with Barca happy to pass the ball around without overly threatening, but Messi did have a good chance when Raphael Varane failed to cut out a pass from David Villa on the edge of the box just after the half hour.
This time, on his right side, he couldn't generate the power needed to trouble Diego Lopez.
Six minutes later and Madrid could have been back in front as a lovely cross by Luka Modric to the back post found Morata in acres of space but he could only head into the side-netting.
The visitors started brighter after the break and nearly found their way through with a trademark move as Messi picked out Alves on the right and then just failed to get on the end of the Brazilian's dangerous cross.
Another moment of magic from Messi then played in Villa moments later but a wonderful recovering challenge from Varane denied the Spanish international a clear effort on goal.
Mourinho then unleashed Ronaldo along with Sami Khedira with just over half an hour to play and the Portuguese was soon involved as he fired a rasping 30 yard free-kick towards goal that Victor Valdes did well to turn behind for a corner.
Ronaldo came close again as he fired into the side-netting at the end of a solo run past three Barca players, before Morata had an excellent chance to win the game 15 minutes from time as he controlled a wonderful ball over the top from Pepe but couldn't beat Valdes.
However, the youngster's miss mattered little six minutes later when Ramos outjumped Gerard Pique to leave Valdes helpless.
And the score could have been even more flattering to the home side as Ronaldo then fired a wicked free-kick off the angle of post and bar.
However, Barca were left furious in stoppage time as referee Miguel Perez Lasa didn't award a penalty from what appeared to be a trip by Ramos on Adriano and Valdes was sent-off after the final whistle for his protestations.