Guardiola’s side were teetering on the brink of blowing the title after falling 2-0 behind midway through the second half in the final chapter of their pulsating battle for supremacy with Liverpool.
But Ilkay Gundogan sparked an astonishing City revival at the Etihad Stadium as the German midfielder reduced the deficit before Rodri grabbed the equaliser.
Gundogan turned in City’s third goal in the space of five minutes in the 81st minute, triggering wild celebrations and rendering second placed Liverpool’s 3-1 victory against Wolves irrelevant.
City finished with 93 points, one ahead of Liverpool as they ended their rivals hopes of winning an unprecedented quadruple.
On a breathtaking final day, Burnley were relegated as Leeds beat the drop, while Tottenham qualified for the Champions League at the expense of their north London rivals Arsenal.
It was City who hogged the spotlight on a day their fans will never forget.
Guardiola’s men can rightly be called a dynasty after joining Manchester United as the only clubs in the Premier League era to have won four titles in five seasons, with Alex Ferguson’s teams doing it on three separate occasions.
The eighth league title in City’s history is Guardiola’s ninth major trophy since arriving at the club in 2016.
“These guys are legends. When you win in this country four times in five years, it is because these guys are so special. They will be remembered forever,” Guardiola said.
Fittingly, it was long-serving City captain Fernandinho who lifted the trophy in his last game before leaving the club.
“It feels like we came back from the dead to win the league. This is the Man City spirit. You never give up,” Fernandinho said.
Once again, City saved the best until last as they edged Liverpool out on the final day of the season for the second time after beating them to the finish line in 2019.
It was 10 years since Sergio Aguero’s famous last-second goal against QPR sealed City’s first title since 1968 and this jaw-dropping success was almost as unlikely.
City were stunned in the 37th minute when Matty Cash got in front of Joao Cancelo to score with a bullet header.
Former Liverpool star Philippe Coutinho doubled Villa’s lead with a cool finish in the 69th minute.
The shell-shocked Guardiola slumped into his seat, but City would not surrender and Gundogan headed them back into contention in the 76th minute.
Rodri’s low strike from the edge of the area two minutes later set up a nerve-jangling finale.
And in the 81st minute, Kevin de Bruyne’s low cross reached Gundogan at the far post and the substitute tapped home to send City into ecstasy.
“After their second goal it was really difficult. It was ‘get the first goal’, then we had momentum and our people did the rest. Winning at home with our fans is the best,” Guardiola said.
City’s celebrations were tarnished when the club was forced to apologise after Villa keeper Robin Olsen was “assaulted” by fans during a post-match pitch invasion.
Having already won the FA Cup and League Cup, Liverpool can still enjoy a memorable season of their own if they beat Real Madrid in the Champions League final in Paris on Saturday.
– Spurs back in Champions League –
Rocked by Pedro Neto’s third minute opener for Wolves, Liverpool equalised through Sadio Mane in the 24th minute.
Mohamed Salah poked Liverpool ahead with six minutes left but by then news of City’s extraordinary recovery had reached Anfield, which was in subdued mood by the time Andrew Robertson scored in stoppage-time.
“Congratulations to Man City and Pep Guardiola. It’s not the result we wanted. Finishing second is the story of my life,” Liverpool boss Jurgen Klopp said.
Tottenham’s 5-0 rout of relegated Norwich secured fourth place at Carrow Road and ended their two-year absence from the Champions League.
Dejan Kulusevski and Son Heung-min scored two each and Harry Kane also netted.
Tottenham’s victory left Arsenal in fifth place despite their 5-1 win against Everton.
Burnley’s six-season stay in the top tier ended with a 2-1 home defeat against Newcastle, with Leeds staying up after a 2-1 win at Brentford.
Leeds started the day below Burnley on goal difference, but the Clarets were beaten by Callum Wilson’s brace, while Jesse Marsch’s team escaped thanks to Raphinha’s penalty and Jack Harrison’s last-gasp strike.
Manchester United lost 1-0 at Crystal Palace, but qualified for the Europa League thanks to West Ham’s 3-1 defeat at Brighton.