Swansea City suffered frustration on Teesside as Duncan Watmore’s brace gave Middlesbrough the spoils at the Riverside Stadium.
The striker fired the hosts into the lead via a fortunate deflection in the 25th minute, and doubled their advantage by finishing a counter-attack in the 65th minute.
Yan Dhanda gave Swansea hope as he pulled one back through a deflected strike of his own, but it was not to be.
The Swans had their chances to get something from the game – with Viktor Gyokeres having the best of them - and were also left wondering how they were denied a spot-kick when there appeared to be a handball and a foul on Andre Ayew in quick succession during the first half.
For Steve Cooper’s side it was just a third defeat of the league season.
There were three changes from the side that beat Nottingham Forest, with Ben Cabango, Ryan Manning and Kasey Palmer coming into the starting XI as Kyle Naughton, Jake Bidwell and Matt Grimes.
It proved an even opening, with Freddie Woodman not connecting cleanly with a punch as Djed Spence closed in, before Ayew produced a lovely run and cross that ended with his pull-back crying out for an advancing navy shirt with none arriving.
Connor Roberts made an excellent block after Middlesbrough had nipped in to win the ball as the Swans looked to build from the back.
The Swans then created and spurned a big chance in the 17th minute. Palmer got away down the right and found Jamal Lowe, who saw his shot saved by Marcus Bettinelli, before Roberts’ follow-up was blocked by Marcus Tavernier.
Palmer was looking lively, producing a lovely dribble down the right-hand touchline which saw him beat a trio of defenders.
But it was Boro who took the lead in fortuitous fashion in the 25th minute.
The hosts countered in transition, with Watmore driving infield to get away a shot that took a wicked deflection off Marc Guehi to leave Woodman stranded.
The visitors then had two penalty appeals waved away in quick succession, one for handball and another for a challenge by Marc Bola on Ayew as he prepared to fire at goal from the deflection.
Middlesbrough then scrambled clear an excellent cross from Roberts as the Swans pushed for an equaliser.
At the other end, Woodman did well to parry a close-range effort from Sam Morsy just before Marvin Johnson was booked for catching Roberts in the throat with an elbow.
The Swans remained behind at the break and Cooper opted to make a trio of changes as Grimes, Gyokeres and Wayne Routledge came on for Jay Fulton, Lowe and Cabango.
Gyokeres had a gilt-edged chance within a minute of the restart as Bettinelli made a hash of a clearance, but he blazed over with others free in support.
Woodman made sure a cross from Spence did not sneak in at his near post after it took a deflection off Manning, before the Swansea keeper than parried away Johnson’s drive from distance.
Guehi made an outstanding block to prevent Morsy doubling the home side’s lead as Boro enjoyed a series of set-pieces in quick succession.
Johnson, on a booking, then escaped punishment from referee Keith Stroud despite an off-the-ball barge on Guehi.
Spence blocked Smith’s effort at the far post from Palmer’s feed as the visitors got back on the front foot.
Moments later and Watmore struck again, finishing off a counter that caught Swansea short of defensive numbers.
But the visitors kept battling, and substitute Dhanda gave them hope when a deflection off Dael Fry took his strike past Bettinelli and into the net.
The Swans continued to push, but they were unable to find a late leveller.
Middlesbrough: Marcus Bettinelli; Paddy McNair, Dael Fry, Marc Bola; Djed Spence, Marcus Tavernier, Jonny Howson, Sam Morsy (Lewis Wing 76), Marvin Johnson (Hayden Coulson 76); Chuba Akpom, Duncan Watmore (George Saville 68).
Substitutes: Dejan Stojanovic, Nathan Wood, Isaiah Jones, Sam Folarin, Patrick Roberts, Britt Assombalonga.
Swansea City: Freddie Woodman; Ben Cabango (Wayne Routledge 46), Ryan Bennett, Marc Guehi; Connor Roberts, Korey Smith (Jordon Garrick 81), Jay Fulton (Matt Grimes 46), Ryan Manning; Kasey Palmer (Yan Dhanda 65); Andre Ayew (captain), Jamal Lowe (Viktor Gyokeres 46).
Substitutes: Steven Benda, Kyle Naughton, Jake Bidwell, Liam Cullen.
Referee: Keith Stroud