Report | Swansea City 0 Queens Park Rangers 1
Lyndon Dykes struck in the 90th minute to condemn Swansea City to a last-gasp defeat at the hands of Queens Park Rangers.
Automatic promotion hopes are all but over for Steve Cooper's side after Dykes landed the killer blow in the dying seconds at the Liberty Stadium.
Earlier on, both sides were denied by the woodwork with Wayne Routledge's deflected strike crashing against the upright, which also kept out QPR's Ilias Chair on two occasions.
The game appeared to be heading for a stalemate until Dykes controlled in the box, before drilling a low shot past a helpless Freddie Woodman.
Following Watford's 1-0 win at promoted Norwich earlier in the evening, the Swans now trail the Hornets by nine points with just three games remaining and the Vicarage Road side having a healthy advantage in terms of goal difference.
Head coach Cooper made three changes from Saturday's comeback draw with Wycombe.
Former QPR duo Routledge and Jake Bidwell returned to the starting line-up, as did Korey Smith in the heart of midfield.
Making his 301st Swans appearance, Routledge operated up front in the absence of the injured Andre Ayew, who missed out for only the second time in the Championship this season.
It took important last-ditch interventions to deny both sides early on in a lively opening.
Marc Guehi was well-placed to block an intended cross for the lurking Dykes, while Dominic Ball was in the right place at the other end to intercept Jamal Lowe's dangerous centre.
The in-form Lowe, who had scored four times in his previous three appearances, was involved again in the 10th minute after Smith won possession deep inside QPR territory.
He subsequently fed Routledge, who was denied by a well-timed Yoann Barbet block.
At the other end, the Swans had the woodwork to thank for saving them twice in the space of eight minutes, with Chair denied on both occasions.
First, the unmarked number 10 bundled the ball into the post before Ryan Bennett cleared off the line, while he also struck the upright after getting in behind the hosts' defence once more.
The woodwork then came to the visitors' aid in the 37th minute.
Lowe fed the ball into Roberts, whose clever flick released Routledge, but his deflected strike cannoned back off the upright.
The 36-year-old had another great opportunity just before the break.
After fending off a QPR attack, the Swans launched a quickfire counter with Lowe leading the charge. He showed great awareness to pick out the run of Routledge, whose first touch let him down.
Osman Kakay then fired just over at the other end in first-half stoppage time, while terrific reflexes from Joe Lumley denied Smith his first Swansea goal.
The Swans had to be alert as the visitors countered in the 58th minute with Chris Willock leading the charge, but Bennett was well-placed to block his eventual cross.
Chances did not fall too freely for either side during the second half.
The hosts were given a couple of scares inside the final quarter of an hour.
First, substitute Albert Adomah was whiskers away from converting Niko Hamalainen's dangerous cross, while Charlie Austin fired narrowly wide on the volley.
However, there was to be one late twist in the dying moments with Dykes controlling in the box, before firing past Woodman to secure a third win in four for the Rs.
Swansea City: Freddie Woodman; Kyle Naughton, Ryan Bennett, Marc Guehi, Jake Bidwell; Jay Fulton (Yan Dhanda, 75), Korey Smith, Matt Grimes (captain); Connor Roberts, Wayne Routledge (Liam Cullen, 71), Jamal Lowe (Morgan Whittaker, 86).
Subs not used: Ben Hamer, Ryan Manning, Conor Hourihane, Joel Latibeaudiere, Ollie Cooper, Ben Cabango.
Queens Park Rangers: Joe Lumley; Rob Dickie, Dominic Ball, Yoann Barbet (captain); Osman Kakay (Albert Adomah, 74), George Thomas (Charlie Austin, 67), Stefan Johansen, Niko Hamalainen; Ilias Chair (Sam Field, 79); Lyndon Dykes, Chris Willock.
Subs not used: Joe Walsh, Todd Kane, Macauley Bonne, Faysal Bettache, Stephen Duke-McKenna.
Referee: Jarred Gillett