Erling Haaland broke the Premier League record for goals in a season as Manchester City returned to the top of the table by beating West Ham.
Haaland's sublime chip over Lukasz Fabianski 20 minutes from time took him on to 35, one clear of Andy Cole and Alan Shearer, whose 34-goal tallies had come in a 42-match campaign.
The Norwegian is now on 51 in all competitions, 12 behind Dixie Dean's all-time English record, with a potential nine games still to play.
Haaland's latest effort helped City to a ninth successive league win - and they now lead Arsenal by a point and have a game in hand.
Nathan Ake put them in front when he headed home Riyad Mahrez's free-kick at the far-post five minutes into the second half, with Phil Foden's deflected volley adding a third.
Foden's effort was City's 1,000th since Pep Guardiola came to the club in 2016.
West Ham managed just one shot on target, their preparations for the match having been hampered significantly by a sickness bug.
The visitors were deprived of three key players hours before kick-off - captain Declan Rice among them - and were able to name only five outfield substitutes.
David Moyes' side remain four points clear of the relegation zone with four games remaining.
Haaland the record breaker
This match was played 25 years to the day after City were relegated to the third tier of English football for the only time in their history.
On that Sunday afternoon in 1998, City won 5-2 at Stoke's Britannia Stadium - as it was then known - but results elsewhere dropped them into a division containing Notts County, York, Chesterfield and Macclesfield. They have come a long way from those days.
In 2023, City are chasing a Treble of the Champions League, Premier League and FA Cup - with Haaland at the head of their challenge.
But it looked for a long time as though he would be denied a goal in a Premier League match for only the 10th time since his summer move from Borussia Dortmund.
He did try to steer one far-post header towards goal at the end of the first half but the angle was against him.
With City leading through Ake's opener, though, the Norwegian's moment arrived. As Jack Grealish picked up possession in the centre of the pitch, Haaland set off on one of those threatening sprints. Grealish sent the ball through, Haaland steadied himself, then beat Fabianski with a finish that was far harder than he made it look.
It takes his tally to eight goals in his past six league games; City are 12 points from their third successive title and fifth in six seasons under Guardiola.
Little wonder Guardiola joined City's players and his backroom staff in forming a guard of honour for Haaland as he made his way off the pitch.
Depleted West Ham well beaten
Under the circumstances, Moyes was probably relieved to get out of Manchester without West Ham's goal difference taking a significant hit.
In losing Rice, Tomas Soucek and Nayef Aguerd to illness, the manager was saying goodbye to his midfield driving force, his most potent set-piece threat and his best defender. With Kurt Zouma ruled out through injury, it left Moyes to pursue a plan of containment and, as a back-up plan, drop further back.
When City had the ball, Michail Antonio moved to a position almost on the left of a midfield three. Behind that were two deep-lying midfielders and a five-man defence. It was almost as if West Ham needed a 12th player to give them an attacking option.
Evidently, that was not possible, so possession was at a premium and the visitors weren't able to create anything with it.
When he replaced Michail Antonio, Moyes spoke to him as if to assure him he was being saved for more manageable tests ahead. This trip to Manchester was as difficult as it gets.
Player of the match
FodenPhil Foden
West Ham United
Squad number9Player nameAntonio
Squad number11Player nameLucas Paquetá
Squad number21Player nameOgbonna
Squad number1Player nameFabianski
Squad number3Player nameCresswell
Squad number12Player nameDownes
Squad number24Player nameKehrer
Squad number20Player nameBowen
Squad number33Player nameEmerson
Squad number5Player nameCoufal
Squad number8Player nameFornals
Squad number2Player nameJohnson
Squad number22Player nameBenrahma
Squad number18Player nameIngs
Line-ups
Man City
Formation 3-2-4-1
18Ortega
2Walker3Rúben Dias6Aké
5Stones16Rodri
26Mahrez19Álvarez20Bernardo Silva10Grealish
9Haaland
18Ortega2Walker6AkéSubstituted forAkanjiat 77'minutes3Rúben Dias19ÁlvarezSubstituted forFodenat 77'minutes5Stones20Bernardo Silva16RodriSubstituted forPhillipsat 90+1'minutes9Haaland26Mahrez10GrealishSubstitutes
4Phillips8Gündogan14Laporte21Gómez25Akanji31Ederson32Perrone47Foden82LewisWest Ham
Formation 4-2-3-1
1Fabianski
5Coufal24Kehrer21Ogbonna3Cresswell
12Downes11Lucas Paquetá
20Bowen8Fornals33Emerson
9Antonio
1Fabianski5CoufalSubstituted forJohnsonat 62'minutes24Kehrer21Ogbonna3Cresswell12DownesBooked at 49mins11Lucas Paquetá20BowenSubstituted forBenrahmaat 79'minutes8Fornals33Emerson9AntonioSubstituted forIngsat 67'minutesSubstitutes
2Johnson10Lanzini13Aréola14Cornet18Ings22Benrahma49AnangReferee:John BrooksAttendance:53,305Live Text
Match ends, Manchester City 3, West Ham United 0.
Second Half ends, Manchester City 3, West Ham United 0.
Attempt saved. Phil Foden (Manchester City) left footed shot from the centre of the box is saved in the centre of the goal. Assisted by Bernardo Silva.
Substitution, Manchester City. Kalvin Phillips replaces Rodri.
Manuel Akanji (Manchester City) wins a free kick in the defensive half.
Foul by Saïd Benrahma (West Ham United).
Attempt blocked. Pablo Fornals (West Ham United) right footed shot from the centre of the box is blocked.
Attempt saved. Lucas Paquetá (West Ham United) left footed shot from the left side of the box is saved in the bottom left corner. Assisted by Saïd Benrahma.
Goal! Manchester City 3, West Ham United 0. Phil Foden (Manchester City) left footed shot from outside the box to the centre of the goal following a corner.
Corner, Manchester City. Conceded by Thilo Kehrer.
Offside, Manchester City. Manuel Akanji tries a through ball, but Phil Foden is caught offside.
Attempt missed. Pablo Fornals (West Ham United) right footed shot from more than 35 yards misses to the left following a fast break.
Substitution, West Ham United. Saïd Benrahma replaces Jarrod Bowen.
Attempt missed. John Stones (Manchester City) right footed shot from the centre of the box is too high. Assisted by Riyad Mahrez.
Substitution, Manchester City. Phil Foden replaces Julián Álvarez.
Substitution, Manchester City. Manuel Akanji replaces Nathan Aké.
Jack Grealish (Manchester City) wins a free kick on the left wing.
Foul by Lucas Paquetá (West Ham United).
Delay over. They are ready to continue.
Delay in match because of an injury Lucas Paquetá (West Ham United).
Our coverage of your Premier League club is bigger and better than ever before - here's everything you need to know to make sure you never miss a moment