Arsenal claimed a late 2-1 win over Everton on the final day but suffered title heartbreak for a second season in a row.
Manchester City’s 3-1 victory at home to West Ham crowned them Premier League champions for a fourth consecutive year and rendered the Gunners’ result against Everton meaningless.
The chances of any last-day jeopardy appeared minimal from the outset, but were reduced even further when City went two up early on before Idrissa Gueye’s deflected free-kick in the 40th minute put the visitors ahead at the Emirates.
Takehiro Tomiyasu levelled three minutes later, which was around the time West Ham reduced the deficit at the Etihad, but there would be no dramatic twist in the title race.
A tap-in by Kai Havertz with 89 minutes on the clock did at least ensure the Gunners finished a brilliant season with a 28th league win to show further signs of progress under Mikel Arteta, who will attempt to help his squad go one better next season.
Arsenal had hoped for a favour from rivals Tottenham on Tuesday night, but City’s 2-0 win a few miles up the road ensured Pep Guardiola’s men went into the final day as league leaders.
Nevertheless, a party atmosphere greeted the players onto the pitch despite the absence of Bukayo Saka due to a slight muscle strain.
Havertz signalled the Gunners intent when he drilled over during the first minute, but the partisan feeling around the Emirates dissipated when news filtered through that Phil Foden had put City ahead inside two minutes.
While the crowd went flat, Arsenal stuck to the task at hand and Tomiyasu headed wide before Declan Rice was denied by Jordan Pickford, who then produced a superb reaction save to prevent Seamus Coleman putting through his own net.
Gabriel Martinelli, recalled in place of Saka, was the next to be thwarted by Pickford after he got down low to save q stinging effort, but needed captain Coleman to mop up the loose ball.
As whispers of another City goal echoed around the stadium, it was met with a roar of defiance but Everton almost took the lead in the 31st minute.
Gueye led the counter-attack and found Dominic Calvert-Lewin, who fired against the post before he sent his follow up shot into the side-netting.
Some Everton fans thought that was in but they were able to celebrate nine minutes later.
Gueye saw his 25-yard free kick deflect off Rice’s head to leave David Raya with no chance in the Arsenal goal.
It was starting to go horribly wrong at the Emirates, but a dramatic turn of events before half-time provided hope for Arteta’s team.
First, Tomiyasu levelled after 43 minutes with a smart finish after a trademark Martin Odegaard cut-back before the decibel levels of the home crowd went up a notch when West Ham pulled one back against City.
Further cheers followed minutes later as a section of Arsenal fans thought it was 2-2 at the Etihad.
It proved a false dawn and yellow cards were more frequent than shots at the start of the second half, while City soon grabbed a third in Manchester.
Arteta got the crowd engaged again with 21 minutes left when summer signing Jurrien Timber was sent on for his first appearance since August due to a serious knee injury.
It helped give Arsenal a second wind as Pickford denied Odegaard before substitute Emile Smith Rowe smashed a volley onto the crossbar.
The winner did arrive with a minute left when Gabriel Jesus latched on to Ashley Young’s poor pass and found Odegaard, who teed up Havertz to fire in from close range for his 14th goal of the season.
Cheers had broken out seconds earlier as West Ham briefly made it 3-2 at the Etihad, but as Arsenal fans celebrated, VAR ruled out the Tomas Soucek effort against City for handball.
It once and for all ended the Gunners’ title charge, but they held on to push City all the way.