A late goal from Mario Vrancic handed City the win and the Championship title at Villa Park in their final game of the season.
The first half ended 1-1 after Teemu Pukki’s opener was cancelled out by Jonathan Kodjia, but an 86th minute strike from Mario Vrancic ended the game 2-1 and with Norwich as champions.
Daniel Farke named an unchanged side from last weekend’s victory over Blackburn Rovers, which secured promotion for Norwich.
Norwich had a good chance inside the first minute with Onel Hernandez racing down the left to cut the ball back to Marco Stierpermann, but his shot flashed just wide of the post.
A few minutes later and City got an early opener with Hernandez again making the run to cross the ball to Teemu Pukki who tapped it home to get his 29th league goal of the season.
Aston Villa were awarded a free-kick on the left after a foul on Conor Hourihane by Emi Buendia. Hourihane whipped the ball into the box where Jonathan Kodjia met the cross to guide it past Tim Krul.
Villa started to look a bit more comfortable and Max Aarons made a crucial block to deny a goal-bound effort from Andre Green.
At the other end, Stiepermann made a good run forward to flick the ball over the Villa defence and into the path of Pukki. The Finn chested the ball down but couldn’t keep his strike from rising.
City were forced to weather a spell of attacks from Villa with the best chance coming from a ball put across the box by Albert Adomah. Kodjia raced in but couldn’t get a touch under pressure from Kenny McLean and Christoph Zimmermann who put it behind for a corner.
Villa were awarded a free-kick on the right 30 minutes in which was taken by Hourihane. Jamal Lewis looked to clear but misjudged his kick and sent it back towards goal where Krul ran out to punch the ball away from danger.
A few minutes later and Krul was forced to punch the ball clear again as Hourihane put another corner kick into the box. The ball fell back to Hourihane who found Kodjia in the box, but he headed just over.
Villa continued to attack with an effort from Kodjia 12 yards out, but Krul made a great save with his legs to divert the ball from goal.
Farke made his first substitution in the 42nd minute with Alex Tettey replacing McLean who picked up a knock in an earlier challenge.
Just ahead of half time City had a flurry of chances with Buendia winning a corner for the Canaries. His deep cross fell to Mario Vrancic who nodded it down back across goal where Pukki was waiting, but Jed Steer made the block. City kept going with Stiepermann passing it out to Hernandez on the left who struck it from 30 yards out, but the ball fired into the bar just inches away from the top corner.
City made a good start to the second half with some neat passing towards goal which resulted in the Canaries winning two corners. Both were put into the box by Buendia, but the Villa defence cleared from danger.
The hosts then dominated the next 10 minutes with Norwich struggling to get any real time on the ball. Zimmermann made a crucial sliding challenge to take the power out of an attempt from Neil Taylor before City were under pressure again as Ben Godfrey misplaced a backpass to Krul, with the City keeper stretching to keep it from goal.
A brilliant chance came for City in the 65th minute with Stiepermann feeding the ball to Jamal Lewis through on goal, but his shot from an angle just flashed past the far post.
Norwich picked up momentum with Mario Vrancic winning a free-kick 25-yards out after being brought down by Kodjia. Vrancic’s ball hit into the Villa wall but fell back to Buendia who hit the rebound over the bar.
Stiepermann then had a go at goal but Steer got a hand to his low shot to divert it sideways where Hernandez was waiting to collect, but his ball back in was collected by the Villa keeper.
Villa made their first change just after the 70-minute mark, with Keinan Davis replacing Kodjia, followed by City’s second substitution with Moritz Leitner on for Stiepermann.
With just over 10 minutes to go, City went on the attack again and won another corner which Ben Godfrey got on the end of, but his header goes straight into the hands of Steer.
The hosts second change came at 80 minutes with Henri Lansbury replaced by Birkir Bjarnason.
City weren’t finished there though and after a great run forward from Lewis he fed the ball to Vrancic who found the bottom corner to make it 2-1 and send Norwich City home champions.