Neymar stunned a packed and hostile Bernabeu with a superb goal to give Barca a fourth-minute lead before Cristiano Ronaldo levelled with a penalty in the 35th, the first goal the Catalan side had conceded in nine league outings this term.
Pepe made it 2-1 six minutes into the second half and a misunderstanding between Andres Iniesta and Javier Mascherano led to Real’s third just after the hour when Karim Benzema finished off a swift break with a clinical strike.
Barca are top with 22 points with Real, who had an early-season wobble, but have been in scintillating form in recent weeks, second on 21. Sevilla, who host Villarreal today, are third with 19.
There was no dream return for Luis Suarez, making his Barca debut after a four-month ban for biting an opponent at the World Cup.
The Uruguay forward looked reasonably sharp and had a hand in Neymar’s goal, but did not come close to scoring himself before being replaced by Pedro midway through the second half.
In Germany, Borussia Dortmund’s miserable domestic season continued when they lost 1-0 at home to fellow strugglers Hanover 96, their fourth Bundesliga defeat in a row.
Dortmund, who have taken only one point in their last six league games, dominated the first hour, but were foiled by Hanover goalkeeper Ron-Robert Zieler before Hiroshi Kiyotake curled in a delightful free-kick.
Dortmund’s domestic form has been a baffling contrast to their performances in the Champions League where they have won all three games without conceding a goal.
After beating Galatasaray 4-0 away on Wednesday, Hanover seemed the ideal opponents to help Dortmund revive their domestic form, having lost their last three games.
Dortmund took control and the breakthrough seemed imminent as Zieler pushed Henrikh Mkhitaryan’s low shot around the post and tipped Mats Hummels’ header on to the crossbar in the opening 20 minutes.
Reus was agonisingly close either side of half-time before being denied by another Zieler save before Japan forward Kiyotake broke the deadlock at the other end in the 61st minute.
Dortmund lost their confidence, were frustrated by Hanover’s spoiling tactics and never looked like equalising even after visiting defender Ceyhun Gulselam was sent off.
In complete contrast to the scrappy game in Dortmund, VfB Stuttgart squandered a 3-1 lead before bouncing back to beat Eintracht Frankfurt 5-4 in a nine-goal thriller to give coach Armin Veh a winning return to the Waldstadion.
Alexander Madlung fired the hosts ahead in the 21st minute before Austria forward Martin Harnik struck twice in three minutes to give the visitors a 2-1 half-time lead.
Christian Gentner added a third in the 51st minute only for Alex Meier, Stefan Aigner and Madlung to score in a nine-minute minute spell to put Eintracht 4-3 ahead. Timo Werner levelled with eight minutes left before Gentner’s goal two minutes later gave Stuttgart their second win of the season, leaving them 14th.
Stuttgart coach Veh was in charge of Eintracht for the previous three seasons, during which he led them back to the top flight.
Champions and leaders Bayern Munich visit Borussia Moenchengladbach today.