Second-half goals from Bernardo Silva and substitute Leroy Sane killed off a fired-up United side at Old Trafford and took City back above Liverpool at the top of the table.
City, who have won their last 11 league matches, now lead the Merseysiders by a point with three games remaining for both sides.
The match had long been identified as a tricky hurdle for City but with games against Burnley, Leicester and Brighton in their run-in, they will now be regarded as clear title favourites.
It was a victory Pep Guardiola’s side certainly had to work for and show all their champion qualities to achieve.
Suggestions United might prove pushovers after a dismal run of six defeats in their eight previous games, or they would be unwilling to do rivals Liverpool a favour, were wide of the mark.
The hosts, clearly stung by their embarrassing 4-0 capitulation at Everton last weekend, set out to make a point. Needing points in the battle for Champions League qualification, United boss Ole Gunnar Solskjaer made five changes after the Goodison Park surrender and it initially had the desired effect.
Guardiola, not for the first time in a big game, restored captain Vincent Kompany at the heart of defence but the Belgian was hurried into mistakes by the pace of Jesse Lingard and Marcus Rashford.
City almost drew first blood when a Raheem Sterling shot took a deflection off Chris Smalling and wrong-footed David De Gea but the goalkeeper recovered.
United then enjoyed a good spell with Fred trying his luck from distance and Lingard volleying wide from a Paul Pogba cross.
Bernardo Silva forced a good save from De Gea but United quickly broke upfield and Ederson needed to rush off his line to deny Rashford, who sent a long-range effort over soon after.
Sterling created another opportunity for himself when he wriggled through the area but De Gea dealt with his tame strike and Sergio Aguero dragged another effort wide.
The first half ended with Ilkay Gundogan limping away from a late challenge by Lingard which infuriated Guardiola on the sidelines.
Perhaps inevitably, United’s early intensity dropped and City made their breakthrough nine minutes after the interval.
The visitors were starting to get on top when the tireless Bernardo Silva powered into the area, turned inside Luke Shaw and fired a low shot inside the near post. Aguero might have doubled the lead moments later but flashed an effort wide after a quick break.
The second came in the 66th minute as Sterling led another counter-attack from deep and picked out Sane.
The German, brought on to replace Fernandinho, took a touch and then let fly from the edge of the area. De Gea, who had been slow to react for the opening goal, this time tried to save with his feet and got it all wrong.
United did apply some late pressure but City were well in control and comfortably saw the game out.
Full report to follow…