A masterful spell of swing bowling by Australia seamer Ryan Harris either side of lunch left South Africa in deep trouble as the hosts reached tea on 200-6 on the third day of third test.
After removing South Africa captain Graeme Smith in the fifth over of the innings, Harris returned to find reverse swing and dismiss Hashim Amla and JP Duminy to leave the South African innings in tatters at 146-6.
Faf du Plessis made the most of the three lives granted to him to revive the innings with Vernon Philander, scoring an unbeaten 42 as the pair gave the Proteas a chance of avoiding the follow-on.
Michael Clarke had declared Australia's innings on its overnight total of 494-7.
South Africa were 127 for four at lunch.
South African captain Smith failed again when he was caught behind off Harris for five.
Smith has made only 42 runs in five innings in the series.
Dean Elgar made 11 before he was superbly caught by wicketkeeper Brad Haddin off James Pattinson.
At that stage South Africa were 42 for two. Alviro Petersen and Hashim Amla added 53 off 58 balls with Petersen reaching a fluent half-century off 50 balls with eight fours.
But Petersen added only three more before he gloved Mitchell Johnson down the leg side for Haddin to take his third catch of the innings.
Amla looked in good form, but was bowled for 38 when Harris made a ball swing back sharply to find a gap between bat and pad.
Harris was the most impressive of the Australian bowlers, taking two for 18 off nine overs.
With play starting 30 minutes earlier because of rain which cut 51 overs from the second day's play, Clarke declared overnight.
It proved a shrewd move because there was early movement off the pitch for the bowlers, with Smith caught off a ball from Harris which seamed away from him.