Crewe took full advantage of a Vale side still coming to terms with a new manager and the cup exit at Burnley.
Shaun Miller put Crewe 1-0 up in the first half from a cut back from Clayton Donaldson.
But Vale had the most chances, only managing a penalty goal from Justin Richards on the hour, after he was brought down on 58 minutes.
The late winner on 81 was scored by super-sub Adam Dugdale.
Crewe are still on Vale's tail, but only one point behind. Vale stay 4th.