Mick McCarthy's first victory as Cardiff boss came in a Severnside derby as the Bluebirds dented Bristol City's play-off hopes with a 2-0 Championship success at Ashton Gate.
The visitors took an 18th-minute lead when Harry Wilson's inswinging free-kick from the right was met with a close-range header by the poorly-marked Curtis Nelson.
More poor defending by the Robins allowed Kieffer Moore yards of space to head his 11th goal of the season from Sheyi Ojo's 25th-minute cross, again delivered from the right side of the penalty area.
Cardiff never looked like surrendering their lead, defending strongly as the hosts turned in a totally inept display, failing to create a clear chance.
Bristol City head coach Dean Holden gave debuts in midfield to recent recruit from Aston Villa Henri Lansbury and Joe Williams, on the injured list since signing last September for £1.2 million from Wigan.
Owura Edwards was absent, self-isolating after coming into contact with someone who tested positive for Covid-19. McCarthy made one change, bringing Wilson into the starting line-up in place of Leandro Bacuna, who dropped to the bench.
The visitors suffered an early blow when goalkeeper Alex Smithies signalled for attention as Bristol City prepared to take a free kick. There was no obvious injury, but after lengthy treatment beside his net, Smithies was taken by stretcher to the dressing room and replaced by Dillon Phillips.
The substitute's first save came within seconds as Lansbury's fierce free-kick from 30 yards bounced off his chest and was cleared.
It proved Phillips' only moment of anxiety in a first half controlled by Cardiff, who went close to a third goal when Dan Bentley tipped over Ojo's 40th-minute header.
The hosts' frustration showed with bookings for Lansbury and Alfie Mawson during more than eight minutes of stoppage time before the interval.
Both sides had chances on the break at the start of the second half, but wasted them with a poor final ball. The Robins' appeals for a penalty when Famara Diedhiou went down in the box were waved away.
By the hour mark Holden had seen enough and sent on Kasey Palmer, Jamie Paterson and Taylor Moore for Williams, Han-Noah Massengo and Adrian Mariappa. Soon afterwards Zak Vyner replaced Lansbury.
McCarthy responded by introducing former Bristol City midfielder Marlon Pack for Wilson, with the game having become scrappy.
Although the home side had more of the ball, they could do nothing with it against well-organised opponents and it was Cardiff who continued to look the more dangerous on the break. Moore fired wide in a late attack.
It was Bristol City's third successive defeat and on this evidence their play-off challenge is in danger of petering out.
Bristol City: Bentley; Hunt, Kalas (c), Mawson, Mariappa (Paterson 60); Williams (Palmer 60), Massengo (T. Moore 60), Lansbury (Vyner 70); Semenyo, Diedhiou, Wells
Subs: O'Leary, Nagy, Pearson, Bakinson, Bell
Cardiff City: Smithies (Phillips 11); Morrison (c), Flint, Nelson; Ng, Vaulks, Ralls, Bennett; Ojo (Bacuna 80), Moore, Wilson (Pack 71)
Subs: Murphy, Watters, Sang, Harris, Bagan, Hoilett