Hosting a Premier League match for the very first time, Luton’s home ground was packed to the rafters — and the Hatters were the side on top early on.
But Bowen scored from Lucas Paqueta’s cross, before Zouma was left unmarked to nod home in the second half.
Luton scored in stoppage time through centre-back Mads Andersen, but West Ham held on to move above Manchester City to the top of the Premier League by virtue of having played one game more.
Dom Smith was at Kenilworth Road to rate the West Ham players…
Alphonse Areola — 6
Spilt a Ryan Gikes cross in the opening stages, but had little to do by way of making saves.
Vladimir Coufal — 5
Let the ball bypass him to allow Elijah Adebayo a shot on goal, and lacked the required pace on occasions.
Kurt Zouma — 7
Safe and steady passing, before scoring in the second half to wrap up the victory.
Nayef Aguerd — 5
One lax pass nearly allowed Elijah Adebayo in on goal, and then lost him with a later chance that nearly allowed him to score.
Emerson — 7
Good performance. Unlucky not to double West Ham’s lead when Michail Antonio was called marginally offside in the build-up to his pummelled finish. Booked.
Edson Alvarez — 6
Should have done better with a first-half shot with crashed into a defender. Otherwise distributed the ball well.
James Ward-Prowse — 6
His corner deliveries were not as effective as usual, but played the ball responsibly in the middle of the park.
Lucas Paqueta — 7
A couple of characteristically nice turns and assisted Jarrod Bowen for the opener. Tidy.
Jarrod Bowen — 7
Misplaced a few passes in a nervy start but grew into the game and scored with a header. Carried the ball really well.
Said Benrahma — 6
Fizzed a shot fizzed wide in the first half and had a couple of chances to make inroads into the attacking third.
Michail Antonio — 6
Committed a few fouls as he always seems to. Good hold-up play on occasion but didn’t muster any chances of his own.
Pablo Fornals (Benrahma, 71’) — 6
Tried to play off the shoulder after coming on. Decent enough but didn’t get into the game.
Danny Ings (Antonio, 80’) — N/A
Mohammed Kudus (Paqueta, 90+1’) — N/A
Subs not used: Fabianski, Kehrer, Cresswell, Ogbonna, Cornet, Mubama