Portadown lost at home for only the second time this season as Crusaders claimed the points at Shamrock Park.
Colin Coates gave the Crues the lead in the 11th minute from the spot after a harsh penalty award.
Shane McCabe equalised on 24 minutes, after Kevin Braniff's fine pass had found winger Conor McCloskey who sent the ball in from the right.
Substitute Declan Caddell restored the Crusaders lead and Chris Morrow drilled in the third from a tight angle.
Caddell's goal came on 50 minutes as defender Gary Breen allowed a long clerance to bounce.
The chasing Michael Halliday played it forward and Caddell got there to make it 2-1.
Morrow punished poor defending to make it 3-1 in the 70th minute.
The result means the Ports slip from second place and Cliftonville are now Linfield's nearest rivals at the top.