The south coast side stunned Crewe after just two minutes at Fratton Park, when Wes Thomas caught Railwayman goalkeeper Alan Martin napping and headed home Jon Harley's deep cross from the left at the far post.
Thomas earned a penalty after 17 minutes when he was fouled by the visitors' Andy Bond. Izale McLeod stepped up, sent Martin the wrong way and blasted the spot kick to his left.
Pompey came close to going three-up when McLeod's wicked cross from the right was nearly slid into his own net by Bond, but Martin was alert to the danger and diverted the ball behind.
Martin pulled off another stunning save after 37 minutes. Thomas turned on to Brian Howard's pass and the Crewe goalkeeper flew to his right to palm his strike away.
Portsmouth's passing was appalling after the interval, but despite the visitors dominating possession, Crewe failed to craft any clear-cut chances.