Barca took the lead after the break through a slice of fortune when a Xavi shot flicked off Marcelo’s foot, wrong-footing the goalkeeper, and the ball crept into the corner.
Real had the chance to equalize through a Ronaldo header, which he failed to keep on target from just 10m out, but Barca were also a danger at the other end.
The visitors extended their lead when Alves burst down the wing and crossed to the back post where Fabregas headed home.
Elsewhere, an astonishing stoppage-time brace from Ruben Castro saw Real Betis Balompie come from behind to snatch a 2-1 win over Valencia and end a run of 10 matches without a victory.
Valencia are now seven points behind Barcelona and Real.
A scrambled goal by defender Nano Rivas gave Levante UD a 1-0 victory over Sevilla which consolidated their position in fourth place.