Portsmouth stretched their unbeaten run to four League One games, their second clean sheet of the season helping to beat Crewe Alexandra at Fratton Park.
On-loan Bournemouth striker Wes Thomas opened the scoring after only 90 seconds, heading home from close range.
Pompey doubled their lead from the spot on 18 minutes, Izale McLeod scoring after Andy Bond's challenge on Thomas.
Thomas, who was a constant threat throughout, also forced a brilliant save from Alex keeper Alan Martin.
Pompey climb five places to 12th - just six points off the play-off zone and two points ahead of Crewe, who have dropped four places to 19th.
VIEW FROM THE DRESSING ROOM
Portsmouth manager Michael Appleton told BBC Radio Solent:
"I said to the pair of them [Thomas and McLeod] I wanted them to start the game like a house on fire, at 100 miles an hour, and if they can't do it and sustain it for 90 minutes, then after 70 minutes we'll get someone off the bench who can continue that work rate.
"I thought the first half was very good. We looked very dangerous and in the second half it was just a solid performance. More importantly, it was a clean sheet again.
"We keep creating little short-term goals. We know what the objectives are for the season and there's small steps and stepping stones to be taken before then."
Crewe Alexandra manager Steve Davis told BBC Stoke:
"The referee and his two assistants got a lot of decisions wrong, particularly the penalty.
"I thought he dived. And, when you watch it, you can see that he dived. Although he sticks his foot out, he doesn't make any contact. That was a poor decision.
"And their centre-half (Ludo Michalik) cynically bodychecks Mathias Pogba when he was in in on goal and didn't even get booked. Then he does get booked when he should have had a red card."