Bernardo Silva and Leroy Sane netted the crucial goals in the derby clash at Old Trafford as Pep Guardiola’s team moved one point clear of second-placed Liverpool with three matches of the campaign remaining.
City made the brighter start although United created the first clear-cut opening, Ederson dealing with Paul Pogba’s shot.
United goalkeeper David De Gea saved Raheem Sterling’s deflected shot while at the other end Jesse Lingard sent his volley wide of Ederson’s goal.
De Gea kept Bernardo Silva’s 20-yard effort out while Ederson raced off his line to get to the ball before Marcus Rashford who then lashed a 30-yard shot narrowly over the bar.
After struggling to create many chances in the first 40 minutes, City stepped up the pace just before the break with Sterling firing his six-yard shot straight at De Gea and Sergio Aguero failing to find the target with his shot from the edge of the area.
The visitors suffered a blow soon after the restart when Fernandinho had to be substituted with what appeared to be a knee injury but they made light of the setback, taking the lead when Bernardo Silva fired a low shot past De Gea after being set up by Ilkay Gundogan.
City almost immediately doubled their lead but Aguero hit the outside of the post with his 20-yard strike.
When United pressed for an equaliser Lingard wasted a good chance after a slip by Vincent Kompany only for City to wrap up the three points with a second goal in the 66th minute - a mistake by Fred allowing the outstanding Sterling to play in Sane who smashed his shot past De Gea who should really have kept it out.
United tried to hit back but their best chance fell to Romelu Lukaku who screwed a shot wide and in truth Ole Gunnar Solskjaer’s team lacked the guile to trouble City, who visit Burnley on Sunday, in the closing stages.