Palace would rue a hatful of missed chances, as Michail Antonio grabbed the opener midway through the first half when he poked home an inch-perfect cross from Saïd Benrahma, before the visitors’ second followed three minutes later. Manuel Lanzini expertly volleyed past a helpless Vicente Guaita, who had earlier produced a superb double save to deny both Antonio and Benrahma from opening the scoring.
The ‘Eagles’ were inches away from halving the deficit, but Odsonne Édouard hit the bar. The miss proved costly, as minutes later, the hosts were again punished when Lanzini hit West Ham’s third from the penalty spot after Luka Milivojević handled the ball inside the area.
After Édouard sent an effort into the stands from only a few yards out, and Jean-Philippe Mateta glanced his header off-target, Palace launched an unlikely fightback with eight minutes left on the clock. Édouard’s late consolation goal could have become more than that when Michael Olise scored Palace’s second deep into added time.
But, despite a nervy final few minutes, West Ham held on to move fifth with victory – just one point away from the Champions League spots. Meanwhile, Patrick Vieira’s side stay 11th after a second home league defeat of the season ended a three-game unbeaten run at Selhurst Park.