Crewe dropped two points as their quest for automatic promotion was dented by Christian Roberts' second-half strike.
The former Cardiff striker handed his old club the edge in the promotion stakes as the Bluebirds know that victory at Peterborough will nudge them one point ahead of Crewe, both with four games to play.
Dario Gradi's side could have few complaints with the 1-1 result and in the end they were left hanging as Bristol City looked more likely to take all three points.
The home side had won on their last four outings but were below par for much of the night and the Robins' greater physical presence forced them into good positions in front of goal on several occasions with the bustling Roberts and speedy right-winger Scott Murray catching the eye.
Crewe's front pairing of Rodney Jack and Dean Ashton on the other hand were virtually anonymous and even when leading scorer Rob Hulse was introduced for the final 18 minutes there was little forward thrust.
Jack did win his side a 15th minute penalty when he was bundled over clumsily by Mickey Bell on the right of the box and Kenny Lunt converted the spot-kick into keeper Steve Phillips' bottom right-hand corner for his eighth goal of the season.
City edged back in to contention strongly before the break with Lee Peacock heading Murray's cross just wide and the same forward's header from Brian Tinnion's corner deflected up off a defender into home keeper Clayton Ince's hands.
Peacock shot just over early in the second half as Crewe were forced to defend doggedly on the edge of the box.
But they allowed Roberts time to pick up a loose ball and the Welshman hit a powerful low drive from 20 yards which flew through Ince's hands into the corner of the net for a deserved equaliser.