Olise was pulling the strings from the No 10 position, trying to set-up first Zaha and then Ayew. Schlupp fired over the top from just outside the area, after his headed effort was scrambled away.
Such was Palace’s dominance that Thomas Tuchel made a triple change, including replacing both central midfielders with 15 minutes to go.
It almost paid immediate dividends, with Lukaku slipped in behind; his shot was parried by Butland, but Ziyech tapped in the rebound. However, after a long VAR wait the goal was ruled out for offside, and the stands were bouncing once again.
It set up a grandstand conclusion to the game, as Palace fearlessly pushed forwards in search of a winner.
However the goal would come at the other end, a late suckerpunch that saw Chelsea snatch all three points when it looked like they were clinging on. Marcos Alonso’s deep cross evaded Tyrick Mitchell and found Ziyech, who was perfectly placed to volley home.
The frustration was palpable from the home side, but you could feel the tension evaporate from an away end that had been stunned into long periods of silence before then.
Palace pushed in vain for the equaliser but it was not forthcoming, and in the end it was Chelsea to take a victory back to Stamford Bridge.
Palace: Guaita (Butland, HT), Clyne, Andersen, Guéhi, Mitchell, Kouyaté, McArthur, Ayew (Eze, 85), Olise, Schlupp, Zaha.
Subs not used: Kelly, Adaramola, Milivojevic, Hughes, Mateta, Edouard, Benteke.
Chelsea: Mendy, Rüdiger, Christiensen, Jorginho (Loftus-Cheek, 74), Silva, Kanté (Kovacic, 74), Lukaku, Pulisic, Ziyech, Havertz, Sarr (Alonso, 74).
Subs not used: Kepa, Werner, Chalobah, Niguez, Kenedy, Vale.