The M31 begins as Ring Road West in Raceview, Alberton at the end of the R554 Heidelberg Road. The Ring Road West continues northwards through the Alberton CBD before leaving it and joining the Ring Road East. There, the M31 continues north as Voortrekker Road where it interchanges and crosses the N12 freeway. Now called Heidelberg Road, at Elandspark, it interchanges and crosses the N17 freeway where it continues north-west through City Deep. Passing the Joburg Market, it crosses the M19 Marjorie Road and Vickers Street. Continuing north-west over a railway line and past the Kaserne railway depot it reaches the Heidelberg Interchange on the east-west M2 motorway at the southern end of the Johannesburg CBD. The M31 passes under the M2 and becomes the one-way Joe Slovo Drive and rises to become a overpass in City & Suburban/Marshalltown heading north on the eastern side of the Johannesburg CBD crossing over Commissioner Street and Albertina Sisulu Road. Here it turns north-east into Doornfontein and where the overpass ends and the route returns to street level. As it reaches the outskirts of the University of Johannesburg it rises to an overpass crossing Charlton Terrace and enters Berea and Yeoville continuing north to Louis Botha Avenue. It crosses under Louis Botha Avenue in Upper Houghton and after a short hairpin bend to west and reaches Houghton Drive. At Houghton Drive the route turns north on this road passing through The Wilds Municipal Nature Reserve to an intersection. The road north accesses the M1 motorway but the M31 turning east as Houghton Drive and then immediately turns north as West Street where it reaches 1st Avenue in Houghton Estate. This 1st Avenue gives access to the M1 south motorway. Crossing 1st Avenue, the M31 continues north to where the Riviera Road intersects it from the west and that road gives access to the M1 north. Continuing north, the M31 reaches 11th Avenue and that road gives access to the M1 south. Crossing 11th Avenue it continues north until it reaches Glenhove Road in Oaklands. Here the route turns east as Pretoria Street and then immediately turns north-east as Atholl Oaklands Road. At its M1 intersection in Abbotsford, Atholl Oaklands Road heads north across the motorway while the M31 splits, continuing north-east as Scott Street through Waverley until it ends it path at an intersection with Corlett Drive in Bramley.