Report: Bristol City 2 Swans 0
Swansea City saw their unbeaten run come to an end as second-half goals from Andreas Weimann and Callum O’Dowda condemned Graham Potter’s men to defeat at Ashton Gate.
The Swans had their chances in the West Country, particularly during the first half where Frank Fielding was the busier keeper.
But the game swung in the hosts favour when Weimann capitalised on Swansea’s loss of possession to head home just 41 seconds in the second half.
George Byers hit the post for Swansea as they chased an equaliser but O’Dowda steered home the clincher to make sure the visitors' sequence without a loss ended at seven games.
Potter had made three changes from the midweek draw with Birmingham as Byers, Declan John and Jay Fulton came into the starting line-up.
The visitors – cheered on by over 3,300 travelling fans - started brightly, with Fulton allowing Matt Grimes to drive forward and force Fielding into the first save of the afternoon.
Smart build-up involving Fulton, Grimes and Byers then allowed Oli McBurnie to cut inside, only for the striker’s shot to be well blocked.
John was having some joy down the left flank and, from Fulton’s switch of play, the full-back’s cross was just too high for McBurnie.
But it was the hosts who had the ball in the net in the 23rd minute, as Weimann headed home from a Famara Diedhiou flick on, only for the flag to rule the effort out.
Swansea responded with a big chance at the other end. Connor Roberts and Bersant Celina were the architects and it ended with Fielding just about smothering a firmly struck Mike van der Hoorn volley.
Van der Hoorn was back in more familiar action a few moments later, expertly reading Bailey Wright’s cutback to end one threatening Robins’ attack.
The visitors were having the clearer sights of goal, and they worked another opening for Nathan Dyer, but the winger’s shot was straight at Fielding.
But there was a major let-off for the Swans six minutes before the break as the hosts countered with purpose from a Swansea corner.
It resulted in a five on three and Josh Brownhill looked set to open the scoring, only for Erwin Mulder to rush out and divert the ball wide as the first half ended goalless.
But the visitors did take the lead just 41 seconds into the second half. The Swans conceded possession in their own half, and Jamie Paterson provided the cross for Weimann to guide a deft header into the far corner of the net.
Celina fired wide from the angle of the area as the Swans sought a response, while Weimann tracked back superbly to deny John from a measured McBurnie pass.
Just past the hour they came agonisingly close to a leveller as Byers picked the ball up some 25 yards out and bent a curling effort goalwards which Fielding managed to just parry onto the post.
Potter sent on Joel Asoro for Dyer a few moments later, before Diedhiou headed wastefully wide and O’Dowda dragged an effort well off target.
But the Republic of Ireland put the game to bed with 16 minutes to play as he was played in behind Cameron Carter-Vickers and beat Mulder with a low left-footed strike.
Mulder denied O’Dowda his second of the game as the hosts extended their own unbeaten sequence to 13 games in all competitions.
Swansea City: Erwin Mulder; Connor Roberts (Barrie McKay 75), Mike van der Hoorn (captain), Cameron Carter-Vickers, Declan John; Jay Fulton, Matt Grimes; Nathan Dyer (Joel Asoro 62), George Byers (Courtney Baker-Richardson 77), Bersant Celina; Oli McBurnie.
Subs not used: Steven Benda, Kyle Naughton, Cian Harries, Luciano Narsingh.
Bristol City: Frank Fielding, Jay Dasilva, Adam Webster, Bailey Wright (captain), Josh Brownhill, Famara Diedhiou (Matty Taylor 83), Callum O'Dowda (Kasey Palmer 83), Andreas Weimann, Jamie Paterson (Niclas Eliasson 70), Marlon Pack, Tomas Kalas.
Subs not used: Eros Pisano, Lloyd Kelly, Max O'Leary, Mo Eisa.