Liverpool came into the match sitting one point behind Premier League leaders Manchester City in the table as the two runaway leaders continue to battle for the season title.
However, it was Southampton who took the lead before 10 minutes when Shane Long settled and buried a close-range shot past Alisson from a flicked-on Pierre-Emile Hojbjerg header to make it 1-0.
And Long nearly doubled the lead soon after following an unlucky Liverpool bounce from a Trent Alexander-Arnold clearance, but the Ireland international scuffed his shot from close range when he should have done better.
A frantically paced match continued and Liverpool finally found an equaliser on 36 minutes when Naby Keita scored his first goal for the club, powering a back-post header from an Alexander-Arnold cross into the back of the net.
Liverpool pushed hard for the go-ahead goal in the opening 20 minutes of the second half, but saw penalty shouts from Keita waved off before Roberto Firmino flashed a good chance wide from a Sadio Mane cut-back as the match passed the hour mark.
Some good defending on a pair of Southampton corners led to a blistering counter-attack for Liverpool as Salah picked up the ball in his own end, ran the length of the field and finished from 18 yards away to send the travelling supporters into ecstasy at St Mary’s.
The goal was sweet relief for Salah who was on a run of eight games without scoring in all competitions and makes him the fastest Liverpool player to hit 50 in the Premier League in just 69 appearances.
Substitute Jordan Henderson, who started the counter for Salah, then put matters to rest, dispatching a close-range finish from a Firmino pass to give the visiting side breathing room and send them back to the top of the table.
The victory lifted Liverpool to 82 points from 33 games, with City on 80 from 32, while Southampton remained five points above the relegation zone.
Liverpool’s next match is a Champions League, first-leg match away to Porto, while Saints host Wolves in the Premier League on April 13.