It was an uneventful first half, with little of note happening. Chelsea were the ones applying most of the pressure, but the Hammers’ backline coped with everything thrown at them.
Meanwhile, the visitors twice won the ball high up the pitch, but were unable to make the most of these opportunities. The half time whistle went, with neither side registering a shot on target.
The second half was more eventful, with the Blues beginning to take control of the game. Timo Werner’s volley was excellently blocked by Craig Dawson, and N’Golo Kante had a deflected effort well saved.
Werner again was involved, spurning two opportunities to put his side in front. He hit the side-netting on the rebound from Mason Mount’s blocked volley, and then couldn’t get a clean connection on a half-volley when well positioned.
Going into the closing stages, the home side were given a glorious chance to take the lead. Romelu Lukaku got the better of Dawson, who pulled the Belgian down. Michael Oliver pointed to the spot, and upgraded Dawson’s yellow card to a red after a VAR check.
However, Jorginho’s penalty was weak, and Lukasz Fabianski got down to his right to keep it out.
But Chelsea weren’t left to rue their missed opportunities. In the 90th minute, Marcos Alonso’s low cross found substitute Christian Pulisic, who swept his effort into the bottom corner to spare Jorginho’s blushes.
The late winner takes Thomas Tuchel’s men a step closer to securing Champions League football for next season. As for West Ham, they remain in seventh place, three points ahead of Wolverhampton Wanderers and two behind Manchester United.
Edouard Mendy (6/10) – Given almost nothing to do all afternoon. Did enough when called upon.
Ruben Loftus-Cheek (5/10) – Clearly not suited to playing as a wing-back. Didn’t do enough at either end of the pitch.
Cesar Azpilicueta (6/10) – Given a fairly easy ride by West Ham’s frontline. Looked fairly solid.
Trevoh Chalobah (6/10) – Promoted to the starting XI after Andreas Christensen dropped out at the last minute. Put in a decent performance.
Thiago Silva (6/10) – Completes the trio of Chelsea centre-backs who came under little pressure. A solid display.
Marcos Alonso (7/10) *MOTM* – In a game that lacked quality, Alonso’s low cross produced the winning goal. A decisive contribution.
N’Golo Kante (5/10) – Energetic as ever, but often not good enough on the ball. Struggled to pick an incisive pass.
Jorginho (5/10) – Also didn’t do enough to break down West Ham’s backline. Dreadful penalty at 0-0.
Mason Mount (6/10) – A mixed performance. Showed some quality on the ball, but not often enough.
Kai Havertz (5/10) – Kept quiet by the visitors’ defence. Substituted as Tuchel pressed for a winner.
Timo Werner (6/10) – Often Chelsea’s greatest threat. Got into some good areas, but was wasteful.
Christian Pulisic (7/10) – Came on with 15 minutes remaining. Scored the winner. Can’t complain.
Romelu Lukaku (7/10) – Had a clear impact after coming on. Brilliant strength to beat Dawson before being pulled down.
Hakim Ziyech (6/10)
West Ham United
Lukasz Fabianski (7/10) – Saved a penalty, although Jorginho couldn’t have made it much easier for him. Made a couple of other decent stops.
Vladimir Coufal (6/10) – Defended reasonably well, but didn’t offer enough going forward.
Ben Johnson (6/10) – Part of a defence that coped with almost everything thrown at them. Dealt with the threat of Havertz fairly well.
Craig Dawson (7/10) – Utterly heroic for 85 minutes, getting in the way of everything. However, got dominated by Lukaku in the lead up to his red card.
Aaron Cresswell (7/10) – Perhaps unlucky to end up on the losing side. Chelsea found it difficult to break him down.
Arthur Masuaku (6/10) – Won the battle up against Loftus-Cheek. Didn’t do anything down the other end.
Mark Noble (6/10) – Put in a decent shift, helping protect the defence. Substituted on 60 minutes.
Tomas Soucek (5/10) – Battled and scrapped, but ultimately lost the midfield battle. Couldn’t get out of his own half in the final 30 minutes.
Andriy Yarmolenko (6/10) – Got into some very good areas, but lacked quality in those moments. Substituted on 73 minutes.
Pablo Fornals (5/10) – Did little of note. Isolated for most of the match in an unfamiliar centre-forward position.
Said Benrahma (5/10) – Also didn’t contribute much. Substituted on 78 minutes.
Declan Rice (5/10)
Jarrod Bowen (5/10)
Manuel Lanzini (5/10)