Reading increased the pressure on Cardiff City boss Mick McCarthy with a 1-0 win that consigned the Bluebirds to a fifth successive defeat.
Winger Junior Hoilett, who played 184 games for Cardiff, thumped Reading ahead with their only shot on target.
Cardiff pushed hard for an equaliser but could not find a way past Luke Southwood as Ryan Giles hit the post.
The Royals’ win sees them rise to ninth with Cardiff 20th, just two points above the relegation zone.
McCarthy – who was jeered by his own supporters as the Bluebirds were thrashed by West Bromwich Albion in midweek – made four changes to his side for a game where he was sure to be scrutinised, including a recall for goalkeeper Alex Smithies, while striker Kieffer Moore also returned.
Reading manager Veljko Paunovic made two changes to his team from the defeat at Derby, with skipper Liam Moore recalled and Hoilett lining up against his former club, as did midfielder Danny Drinkwater.
A first half short on incident and intensity from both sides in front of a relatively sparse crowd at the Cardiff City Stadium hardly set pulses racing, but it certainly underlined the fragility of the hosts who conceded from the only shot they faced.
The Bluebirds had a good grip on the game until Curtis Nelson’s poor clearance found Hoilett in space on 38 minutes.
The Canada forward drilled the ball across Smithies with a precise finish that found the bottom corner, although he opted not to celebrate against the club and manager that released him in the summer.
Cardiff might have led by then, but goalkeeper Southwood clawed away Mark McGuinness’ header, while Aden Flint missed a golden chance to equalise, firing over with Southwood beaten when the keeper failed to claim a cross.
The hosts came close just after the interval when Sam Bowen’s shot was blocked, while Giles’ shot from distance forced Southwood to save in a second half that was all Cardiff.
The hosts kept pushing and felt they should have had a penalty in the 65th minute, but Andy Yiadom just beat Kieffer Moore to the ball, before Joe Ralls’ shot was tipped behind by Southwood.
Substitute Rubin Colwill forced Southwood into another save and Marlon Pack curled wide as the Bluebirds threw all they had at Reading, with Colwill curling wide deep into stoppage time.
Ten minutes of added on time only added to the Royals’ nerves as Giles’ cross struck the crossbar with Southwood stranded, but the visitors held on to secure a smash-and-grab win that secured consecutive away league victories against Cardiff for the first time since October 1988.
How to play
Rate players out of 10 throughout or after the game. The rater will close 30 minutes after the final whistle.
Rating range key = Give it up = Pure perfection
- 2McGuinnessBooked at 90mins
- 21PackBooked at 32mins
- 8RallsBooked at 37minsSubstituted forVaulksat 79′minutes
- 37BowenSubstituted forCollinsat 79′minutesBooked at 84mins
- 7BacunaSubstituted forColwillat 61′minutes
- 29M Harris
- 17YiadomSubstituted forClarkeat 80′minutes
- 47PuscasSubstituted forDannat 65′minutes
- 33Cabral Barbosa
- Thomas Bramall
Match ends, Cardiff City 0, Reading 1.
Second Half ends, Cardiff City 0, Reading 1.
Attempt blocked. Alex Smithies (Cardiff City) left footed shot from the centre of the box is blocked.
Attempt blocked. James Collins (Cardiff City) header from very close range is blocked. Assisted by Curtis Nelson with a headed pass.
Corner, Cardiff City. Conceded by Baba Rahman.
Attempt missed. Ryan Giles (Cardiff City) left footed shot from outside the box misses to the left. Assisted by Mark McGuinness.
Attempt blocked. Rubin Colwill (Cardiff City) right footed shot from the left side of the box is blocked.
Corner, Reading. Conceded by Will Vaulks.
Mark McGuinness (Cardiff City) is shown the yellow card.
Ovie Ejaria (Reading) wins a free kick on the left wing.
Foul by Mark McGuinness (Cardiff City).
Rubin Colwill (Cardiff City) wins a free kick in the defensive half.
Foul by David Junior Hoilett (Reading).
Foul by James Collins (Cardiff City).
John Swift (Reading) wins a free kick on the left wing.
Attempt blocked. James Collins (Cardiff City) header from the centre of the box is blocked. Assisted by Ciaron Brown with a cross.
James Collins (Cardiff City) is shown the yellow card for a bad foul.
Luke Southwood (Reading) wins a free kick in the defensive half.
Foul by James Collins (Cardiff City).
Attempt saved. Kieffer Moore (Cardiff City) header from the centre of the box is saved in the bottom left corner. Assisted by Ryan Giles with a cross.