Southampton raced to a 2-0 lead with goals in either half by Dusan Tadic and debutant Jan Bednarek.
But a brace from substitute Olivier Giroud and a goal from Eden Hazard gave Chelsea the impressive win.
Chelsea had failed to win their last two league games before facing Southampton.
They remain fifth on 60 points, seven points behind fourth-placed Tottenham Hotspur in the league table.
Southampton remain in the drop zone on 28 points.
Southampton took the lead on 22 minutes through Tadic who slotted home Ryan Bertrand’s cut-back.
Alvaro Morata went close for Chelsea in the 28th minute from Zappacosta’s nod back to him only for him to head wide.
James Ward-Prowse almost doubled Southampton’s lead on 38 minutes following a well struck 28-yard strike which Thibaut Courtois parried away.
Chelsea found themselves 2-0 down on 60 minutes as Bednarek who was left unmarked pounced on Ward-Prowe’s free-kick.
Chelsea poured forward and started putting the Southampton defence in all sorts of trouble but were unlucky not to score.
They were eventually rewarded thanks to Giroud who headed in Alonso’s well timed cross on 70 minutes for his first league goal for Chelsea.
Chelsea continued to pile on the pressure and were on level terms in the 75th minute as Hazard slammed the ball past McCarthy from 10 yards after Southampton failed to clear their lines from a cross.
The turnaround was complete for Chelsea on 79 minutes as Giroud bagged his second goal, slamming the ball into the bottom left corner from a free-kick by Willian which Southampton could not clear properly.
With two minutes remaining Pierre-Emile Hojbjerg almost equalised for Southampton but his header from a corner was well saved by Courtois.