Shrewsbury held off a late Port Vale fightback to go third in League Two with their fifth win in six games.
Marvin Morgan curled in from 15 yards and Mark Wright finished coolly after racing on to Joe Jacobson's pass as Town took an early 2-0 lead.
Ben Williamson lobbed over Ben Smith for his first Vale goal but Lionel Ainsworth hammered home Wright's cross to restore the visitors' advantage.
Williamson headed in a late second from six yards but Shrewsbury held on.
VIEWS FROM THE DRESSING ROOM
Port Vale boss Micky Adams told BBC Radio Stoke:
"We didn't play well, it's as simple as that. I won't stand here and try and kid anybody that we played well because we didn't.
"We started the game very poorly and were 2-0 down before we had got going.
"We didn't give up but we were not at the races. We were beaten by a better team who had better individuals on the day."