City were without top scorer Danny Allsopp due to a groin strain and Stuart Elliott was restricted to the bench because of illness, so Jason Price started up front while Ian Ashbee and Andy Holt returned to midfield.
The game opened brightly with Ben Burgess heading wide, Cheltenham midfielder Mark Yates grazing the post with a shot, and Stuart Green denied by a Shane Higgs save.
Poor defending allowed the home side to take the lead after only 6 minutes as Damien Spencer scrambled a shot past Paul Musselwhite, with calls for offside falling on deaf ears.
Jason Price should have restored parity a minute later but he blasted over after the other linesman also kept his flag down.
But Price made amends just seconds into the second half, equalising from Damien Delaney's long ball over the top.
However, poor defending let City down again as the Robins regained their lead less than two minutes later. Lee Howell's inswinging corner found Mark Yates unmarked at the near post, and he headed home to make it 2-1.
Musselwhite saved a Grant McCann free kick while Andy Dawson headed off the line from Mike Duff's shot.
City went all-out-attack by bringing on Stuart Elliott and Jamie Forrester midway through the half, but Musselwhite was again called into action to save at full stretch from John Finnigan's long-range effort.
The change looked like it had paid off when Forrester put a diving header in the back of the net with 14 minutes to go, but he was harshly adjudged to be offside.
Chances of a comeback vanished as Cheltenham sealed the win in the final minute. Green's corner was cleared, and Paul Brayson raced away from the covering defenders to finish off the 3-1 win in front of 3,624 at Whaddon Road.
City line-up (4-4-2): Musselwhite; Joseph, Whittle, Delaney, Dawson; Green, Hinds (Forrester 65), Ashbee, Holt (Elliott 65); Price, Burgess.
Un-used subs: Fettis, Keates, Webb.