The champions endured a frustrating opening period but Raheem Sterling broke the deadlock at the Etihad Stadium with his 17th goal in 18 appearances for club and country this season after the break.
David Silva got a faint touch to a Kevin De Bruyne cross for a controversial second following a lengthy VAR check and Ilkay Gundogan wrapped up victory soon after but a late red card for Fernandinho blotted City’s afternoon.
Yet City still finished strongly with Gabriel Jesus hitting the bar in injury time. Villa, following a similar game plan to that which Wolves succeeded with at the same venue earlier this month, did cause problems but faded later in the game.
City could have been ahead early on through Jesus, who starting consecutive Premier League matches for the first time since last December.
There was a mix-up in the Villa area and the Brazil striker was allowed to turn and shoot but his low effort flashed wide.
But City did not have things all their own way as Villa soaked up pressure and threatened on the break.
John McGinn forced a good save from Ederson and Douglas Luiz, who left City for Villa last summer having not represented the club, was denied by the keeper on the follow-up. The game was paused for a VAR check for a penalty, but Ederson’s challenge was ruled clean.
Sterling headed over late in the first half and then teed up a good opportunity for David Silva but the Spaniard’s attempt curled wide.
Villa were undone within a minute of the restart as City went straight onto the attack.
The ball broke for Sterling as Jesus headed on a long clearance from Ederson and the England forward raced through to beat Heaton.
City immediately went in search of more and Benjamin Mendy had a shot deflected wide before Tyrone Mings denied Jesus with a brilliant goal-line clearance after the ball had been gifted to Sterling.
A second goal began to look inevitable, although when it arrived in the 65th minute, who scored it was anything but clear.
De Bruyne curled the ball into the box and Silva looked to have got a faint touch to flick it into the net as Sterling tried to get out of the way. It appeared Sterling may have been offside and potentially interfering but after a long delay, the VAR ruling went in City’s favour. The goal was eventually awarded to David Silva.
There was no doubt about the third goal five minutes later. Villa failed to clear from another City attack and Gundogan charged into the area to smash home a loose ball on the half-volley.
Phil Foden came off the bench to force a save from Heaton but City’s afternoon ended on a sour note as Fernandinho picked up a second booking for a needless tactical foul on Keinan Davis.
The woodwork was hit twice in injury time, first by Jesus and then when a McGinn effort struck the post.