Niko Kranjcar drilled in a 61st-minute winner to maintain Portsmouth's momentum at the expense of Harry Redknapp's former club West Ham.
It was the FA Cup finalists' ninth win in their last 11 games and their 21st clean sheet of the season.
Pompey have never lost to the Hammers since promotion to the Premier League in 2002 and their victory condemned their Upton Park hosts to a fifth loss in their last seven.
It also took Redknapp's team within four points of fifth-placed Everton and they could still grab a UEFA Cup place without having to rely on beating Cardiff at Wembley.
The omens for that did not look too bright at the start, though, and the first half will not live long in the memory.
Portsmouth, starting without Kanu, Jermain Defoe and Milan Baros, showed little in attack until the closing minutes of the first 45 as David Nugent toiled against Anton Ferdinand and Jonathan Spector.
They were also short in midfield, with artful French playmaker Lassana Diarra out resting a sore hamstring, and their lack of craft allowed West Ham to constantly feed Dean Ashton and the returning Bobby Zamora.
Luis Boa Morte, appearing in place of bright new youngster Freddie Sears, lost Sylvain Distin on the edge of the area early on and fired West ham's first on-target shot into the grateful arms of David James.
Zamora wasted a great opening in the ninth minute when he ran clear down the left but failed to find a team-mate with his low pull-back, giving Hermann Hreidarsson the chance to clear.
But he and Ashton continued to cause Portsmouth problems.
James had to race out of goal and head the ball away from Ashton just outside the penalty area and then dive bravely at Zamora's feet a few seconds later.
Pompey's defending looked fairly desperate in the opening 20 minutes and it needed another last-ditch tackle by Distin to stop Ashton when the blond forward moved in for Zamora's unselfish ball across the face of the area.
In a rare Pompey raid their fans at the far end of the ground thought Nugent had scored his first Premier League goal with a right-foot snap-shot in the 24th minute but he was just off-target.
But then James twice had to punch clear at the other end as Hammers piled on pressure.
Kranjcar and Papa Bouba Diop briefly replied with shots and Hammers goalkeeper Robert Green struggled to hold onto a Pedro Mendes blast from distance.
Just before the break James had to turn Ashton's fierce 30-yarder around a post and then was beaten by a double deflection off Nolberto Solano's free-kick but the ball dropped just wide for a corner.
A strange lethargy seemed to overtake West ham early in the second half after a couple of through-passes failed to find their marks.
Pompey sensed the frustration creeping in and Kranjcar almost put them ahead after 54 minutes when Nugent's square pass set him up for a strike from 20 yards which sizzled just over the bar.
But the Croat's shoot-on-sight policy paid off just after the hour with a classic strike, by which time West Ham had brought on Sears, 18, for the tiring Zamora.
Sears scored a fine winner against Blackburn last month but this time it was Kranjcar who hit the spectacular with an unerring low effort from just outside the area.
West Ham also took off Hayden Mullins - to a cruel roar of approval from the fans - and brought on a third striker in Carlton Cole for the last 18 minutes.
Pompey replaced Nugent with FA Cup semi-final hero Kanu late on and there never looked the remotest danger of the Hammers hitting back.