Carlton Morris’ first-half effort proved the difference as Swansea City fell to defeat at Kenilworth Road despite an improved second-half performance.
After a scrappy start, the home side had the better chances in the opening half and they led at the break as Morris turned in from close range for his 14th goal of the season.
But the visitors were much improved and the better side after the break, with Ollie Cooper and Morgan Whittaker going close and Liam Cullen having a goal ruled out for offside for Russell Martin’s men.
In addition to the result, the Swans also suffered the blow of seeing Joe Allen forced off just before the interval with an injury.
The Swans had shown two changes from the draw with Rotherham.
Jay Fulton came in for skipper Matt Grimes, who missed out with illness as Allen took the armband, while Luke Cundle was preferred to Whittaker.
The opening exchanges proved to be scrappy, with neither side able to find a real rhythm or flow to their play.
The Swans did have some bright moments, most notably when Cooper found room to run.
Cundle had a low shot from the edge of the area saved by Ethan Horvath, while Matty Sorinola had a cross cleared.
Fulton was picked out by a fine ball from Ryan Manning, but his flick was cleared with no white shirts close enough to capitalise.
Luton began to build some momentum, Andy Fisher doing well to get down sharply to deny Morris’ far-post header from an Alfie Doughty cross, not long after Elijah Adebayo had nodded another set-piece over under pressure from the Swansea keeper.
The Hatters kept pushing. Jordan Clark steered wide from a Doughty free-kick, before another excellent set-piece delivery saw Morris send a header onto the top of the bar and over.
A combination of Fulton and Fisher then managed to keep out an inswinging Doughty corner that was threatening to find the far corner.
Swansea were defending solidly, but their resistance was broken when Doughty’s driven cross was only parried by Fisher, and Morris was on hand to convert from close range.
And the opening half ended with another blow for the visitors as skipper Allen was forced off and replaced by Whittaker.
The Swans needed a response and they made a lively start to the second period.
Joel Piroe and Cundle linked up to find Cooper, but the midfielder could not make room for a shot.
Cooper had an even better opportunity just seconds later, nicking the ball from Gabe Osho to run clean through on goal, but his left-footed effort was well over the target.
Cooper was causing all manner of problems, and a beautiful turn and surge forward from a tight spot on the touchline won Swansea a corner.
The delivery from Manning was a good one, but Piroe could not connect cleanly after peeling away from his marker.
Swansea looked so much sharper and a lovely passage of play ended with Manning fizzing an excellent low cross into an unmarked Piroe.
The Dutchman controlled but prodded his final effort over the bar, although the offside flag then belatedly went up.
Martin sent on Liam Cullen and Liam Walsh for Sorinola and Cundle respectively as he looked to make the most of Swansea’s ascendancy.
Doughty smashed a half-volley miles over the bar from an increasingly rare Luton foray into Swansea territory.
Cullen looked to have made an immediate impact when he swept home a through ball with 17 minutes to go, only for the offside flag to cut short any Swansea celebrations as time began to run out.
Jamie Paterson was soon on for Cooper for the final 12 minutes as Swansea kept coming forward.
Piroe found Whittaker, who forced Horvath to parry his rising effort, before an altercation involving both benches ended with Martin being sent from the dugout as the visitors were unable to find an equaliser.
Luton Town: Ethan Horvath, Cody Drameh, Tom Lockyer (captain), Carlton Morris (Pelly-Ruddock Mpanzu 82), Elijah Adebayo (Cauley Woodrow 68), Marvelous Nakamba, Jordan Clark (Joe Taylor 92), Allan Campell, Amari’I Bell, Gabe Osho, Alfie Doughty.
Unused Substitutes: James Shea, Sonny Bradley, Luke Berry, Pelly-Ruddock Mpanzu, Fred Onyedinma.
Swansea City: Andy Fisher; Ben Cabango, Nathan Wood, Joel Latibeaudiere; Matty Sorinola (Liam Cullen 68), Jay Fulton, Joe Allen (captain) (Morgan Whittaker 45), Ryan Manning; Ollie Cooper (Jamie Paterson 77), Luke Cundle (Liam Walsh 68), Joel Piroe.
Unused Substitutes: Andreas Søndergaard, Harry Darling, Kyle Naughton.
Referee: Dean Whitestone