Juve struck twice in the opening 10 minutes, as Merih Demiral converted a Paulo Dybala’s free-kick. Moments later, Dybala then earned a penalty which Cristiano Ronaldo duly converted.
Roma responded in the second half through Diego Perotti’s spot-kick.
It was Ronaldo’s ninth goal in seven games appeared to have put Juventus in firm control in a first-half overshadowed by a serious-looking injury to 20-year-old Roma midfielder Nicolo Zaniolo, following a challenge by Matthijs de Ligt.
But Paulo Fonseca’s hosts produced a reaction after the interval, Dzeko hitting the post moments before a video assistant referee review found Sandro to have handled amid a goalmouth scramble.
With the Stadio Olimpico roaring Roma on, Juve’s Gonzalo Higuain had a goal disallowed for offside while Aleksandar Kolarov missed an excellent headed opportunity to equalise.
Juve held on despite late pressure to record a fourth successive league win since suffering a first defeat of the season against Lazio in December.
Full time, Juventus 2 – 1 Roma