The opening goal arrived on 19 minutes when captain Adam Lallana smashed the ball past Michel Vorm.
In an open encounter, Swansea will feel they could still have taken something from the game – and they would have had it not been for Southampton keeper Artur Boruc.
The Poland international – who will be looking to keep England out next week – made a couple of top-class saves from Michu and Wilfried Bony to secure the points for the hosts.
The one time Boruc was beaten, by Nathan Dyer, the post came to Southampton’s rescue.
Then with just six minutes left, Southampton sealed the win, as substitute Jay Rodriguez claimed his first goal of the season after Swansea failed to clear their lines.
The result was harsh on Michael Laudrup’s side, who made five changes from their Europa League win over St Gallen in midweek.
One of those to come in was Saints academy graduate Dyer, who burst down the right flank early on, only to be blocked off by Dejan Lovren.
Jonjo Shelvey tested Boruc soon after as Swansea controlled the early tempo, but Saints soon settled into their stride.
Vorm was fortunate to avoid punishment after appearing to handle outside the box under pressure, before Dani Osvaldo wriggled free and fired into the side netting from an acute angle.
An intelligent Rickie Lambert pass just evaded Lallana as Saints continued to threaten, and they made the breakthrough in the 19th minute.
Morgan Schneiderlin cushioned a header back to Steven Davis, whose delicate chipped pass found Lallana and the Saints captain rifled home.
It was just the hosts’ second goal from open play this season, but they almost had another soon after as Lallana came close to latching onto a Lambert knock-back.
The match was now flowing from end to end and Swansea were testing the Saints defence with increasing regularity.
Jose Fonte had to react quickly to head behind a threatening Wayne Routledge cross, before Boruc fantastically denied a header from Michu, wearing a protective scrum cap after receiving a head injury on Thursday.
Boruc was again called into action to thwart hopeful efforts from Shelvey and Bony, as well as smother a low Dyer cross.
Lambert saw a long-range free-kick parried away when Saints returned to the attack, only for Swansea to come agonisingly close to levelling.
Dyer collected a clever backheel from Bony and had time to hit a left-footed strike that hit the inside of the post and flew across the goal before going out for a goal kick.
Davis and Lambert had attempts for Saints, only for Swansea to again threaten as a Dyer cross found Bony, whose powerful header was just pushed around the post by Boruc.
Shelvey, Dyer and Bony all had efforts early in the second half as Swansea continued in the ascendancy after Jose Canas was booked for a lunge on Osvaldo.
Saints were struggling to deal with Swansea’s possession game and Lovren was shown a yellow card for bringing down Bony on the edge of the box.
Shelvey floated the resulting free-kick just over, with James Ward-Prowse replacing Osvaldo as Mauricio Pochettino looked to stem the flow.
The change appeared to work as Swansea attacked with less regularity and Saints managed to secure a better foothold on the game.
The hosts thought they had doubled their lead in the 76th minute when Wanyama prodded home a Ward-Prowse corner, which should not have been awarded in the first place.
The Kenyan raced to the corner in celebration, only for the goal to be ruled out by referee Mike Dean to the puzzlement of the crowd.
The home fans did not have to wait long for a second, though.
Chico failed to deal with a ball over the top and Rodriguez took advantage, grabbing possession and slotting home to secure three points.