Match ends, West Ham United 0, Wolverhampton Wanderers 2.
Raul Jimenez set the record for the most goals by a Wolves player in a Premier League season after netting against West Ham to help strengthen his side's hopes of qualifying for the Champions League.
The Mexico forward planted a header beyond Lukasz Fabianski after a superb cross by substitute Adama Traore for his 14th league goal of 2019-20.
Traore was also involved in the second goal, substitute Pedro Neto volleying home Matt Doherty's cross as Wolves, who started the day in seventh, moved above Sheffield United and level on points with fifth-placed Manchester United.
West Ham remain in trouble near the bottom after a poor performance, their first shot on target not arriving until the 49th minute when 19-year-old defender Jeremy Ngakia tested Rui Patricio from distance.
Jimenez's 13-goal tally last season was the previous highest tally for a Wolves player.
Will Wolves join Europe's elite?
It is hard to believe that Wolves' marathon season started 331 days ago with a Europa League qualifier against Crusaders on 25 July.
This was their 49th game of the campaign yet the enforced break appears to have done Nuno Espirito Santo's side a power of good as they marked their return to action with a thoroughly professional performance.
Not for the first time, Traore played a critical role in his side's victory despite starting on the substitutes bench.
In a game of few chances, Wolves took control when the Spaniard produced a sublime cross for Jimenez to send a powerful header into the net.
They doubled the lead through another substitute, Portuguese winger Neto delivering a sumptuous finish after Traore set up Doherty to deliver a fine cross.
Wolves are now unbeaten in their past six league games and now have nine top-flight clean sheets, including five in the past six games.
Nearly a year after it began, they are ending the season strongly and with a top-four finish very much within their sight, with Wolves just two points behind fourth-placed Chelsea, who they visit on the final day of the league season on 26 July.
Hammers in serious trouble
It is now one win in 10 league games for West Ham, who have taken just five points from the last 30 on offer.
Bournemouth's 2-0 home defeat to Crystal Palace on Saturday night means the Hammers stay out of the relegation zone due to a superior goal difference record.
However, they remain level on points with 18th-placed Bournemouth and, with eight matches remaining, including Tottenham (away), Chelsea (home) and Manchester United (away), David Moyes' side are in serious danger of dropping out of the Premier League.
In March, West Ham vice-chair Karren Brady said the campaign should be declared null and void before making a U-turn, while Moyes had spoken about the suspension of the league giving his side a chance to regroup before resuming again.
Yet there was little evidence on show at the London Stadium that the Hammers have the quality or the character to dig themselves out of trouble.
They failed to register a single attempt on target in the first half, while their run of games without a clean sheet continued, their last shut-out being on 1 January against fellow strugglers Bournemouth.
Man of the Match - Adama Traore (Wolves)
'We could not handle Traore' - what they said
West Ham boss David Moyes: "We expected Adama Traore to start, or to come on, but we didn't defend the crosses well enough when they came in, so that was probably the most disappointing thing.
"We were short in attacking players, short of options, we didn't get anything going.
"It was a different experience with no crowd there, I'd be lying if I said I enjoyed it. We missed the atmosphere, that's what we're going to have to get better at dealing with."
Wolves boss Nuno Espirito Santo on whether Traore will start against Bournemouth on Wednesday: "We introduced some speed and we were more accurate and able to finish more actions. The idea is always the same, the players come onto the pitch to help the team.
"Each game has it's own history and it's own preparation. In the next game we have to decide again who plays.
"The performance was good. We kept West Ham, a good team with good players, away from our goal and we managed the second half well.
"I take satisfaction from that. But we hope and pray that soon we can play in front of fans."
Nuno's 100% record against West Ham - the stats
- Nuno has won all four of his meetings with West Ham as a manager, his best 100% record against an opponent in league competition.
- The Hammers have failed to score in consecutive Premier League matches for the first time since March to April 2019.
- Wolves are unbeaten in their last 10 Premier League matches in London (W5 D5).
- Jimenez and Traore have combined for nine Premier League goals this season (6 assists from Traore, 3 from Jimenez).
- Since the beginning of last season, only Trent Alexander-Arnold (27) and Andy Robertson (19) have been directly involved in more Premier League goals among defenders than Wolves' Doherty (15 - eight goals, seven assists).
While Wolves entertain struggling Bournemouth at Molineux on Wednesday (18:00 BST), West Ham have a London derby at Tottenham on Tuesday (20:15).
- 52NgakiaSubstituted forFredericksat 81'minutes
- 8Felipe AndersonSubstituted forLanziniat 67'minutes
- 18FornalsSubstituted forYarmolenkoat 81'minutes
- 30AntonioBooked at 62mins
- 32Costa Silva
- 11Rui Patrício
- 32DendonckerSubstituted forTraoréat 64'minutes
- 28João MoutinhoBooked at 57mins
- 19Castro OttoSubstituted forVinagreat 90'minutes
- 9JiménezSubstituted forGibbs-Whiteat 90+2'minutes
- 18JotaSubstituted forNetoat 64'minutes
- 6Cavaco Jordão
- Anthony Taylor
- Shots on Target
Second Half ends, West Ham United 0, Wolverhampton Wanderers 2.
Substitution, Wolverhampton Wanderers. Morgan Gibbs-White replaces Raúl Jiménez.
Substitution, Wolverhampton Wanderers. Rúben Vinagre replaces Jonny.
Attempt blocked. Manuel Lanzini (West Ham United) right footed shot from outside the box is blocked. Assisted by Andriy Yarmolenko.
Goal! West Ham United 0, Wolverhampton Wanderers 2. Pedro Neto (Wolverhampton Wanderers) left footed shot from the centre of the box to the top right corner. Assisted by Matt Doherty with a cross.
Attempt missed. Michail Antonio (West Ham United) right footed shot from outside the box is just a bit too high. Assisted by Manuel Lanzini.
Raúl Jiménez (Wolverhampton Wanderers) wins a free kick in the defensive half.
Foul by Declan Rice (West Ham United).
Substitution, West Ham United. Ryan Fredericks replaces Jeremy Ngakia.
Substitution, West Ham United. Andriy Yarmolenko replaces Pablo Fornals.
João Moutinho (Wolverhampton Wanderers) wins a free kick on the left wing.
Foul by Jeremy Ngakia (West Ham United).
Corner, Wolverhampton Wanderers. Conceded by Michail Antonio.
Corner, Wolverhampton Wanderers. Conceded by Declan Rice.
Attempt blocked. Pablo Fornals (West Ham United) right footed shot from the left side of the box is blocked. Assisted by Mark Noble.
Corner, West Ham United. Conceded by Rui Patrício.
Attempt saved. Declan Rice (West Ham United) header from the left side of the six yard box is saved in the bottom left corner. Assisted by Jarrod Bowen with a cross.
Corner, West Ham United. Conceded by Willy Boly.
Goal! West Ham United 0, Wolverhampton Wanderers 1. Raúl Jiménez (Wolverhampton Wanderers) header from very close range to the bottom left corner. Assisted by Adama Traoré with a cross.