Dropped from the starting line-up, Dybala was brought on in the 59th minute and settled the game eight minutes later as the Turin side bounced back from Wednesday’s Champions League defeat at Atletico Madrid.
Juventus, who have won all but three league games this season, have 69 points from 25 games, 16 ahead of Napoli who were away to Parma later on Sunday.
“There was still a bit of a hangover from Wednesday, there’s no use hiding it,” said Juventus coach Massimiliano Allegri. “Today, it was important to win and to suffer. The lads did well.”
Relegation-threatened Bologna, who are 18th in the 20-team table, had the better of the first half with Nicola Sansone and Federico Santander both going close with low shots from the edge of the penalty area.
Federico Bernardeschi had Juve’s best effort, curling a shot just past the crossbar after cutting inside.
Alex Sandro rescued Juventus after halftime, blocking Ibrahima Mbaye’s goal-bound shot on the line, before making way for Dybala, who quickly made his mark.
Filip Helander tried to intercept Blaise Matuidi’s low cross but succeeded only in teeing the ball up for Dybala who stroked it into the corner from 12 metres.
Bologna were out of luck again in stoppage time when Sansone’s brilliant curling effort was tipped onto the post by goalkeeper Mattia Perin.
“We played really well, we were at the same level as Juventus and sometimes better,” said Bologna coach Sinisa Mihajlovic. “If we keep playing like that, we will avoid relegation.”
Sampdoria striker Fabio Quagliarella, 36, scored his 17th league goal of the season when he converted a second-half penalty to give his side a 1-0 win over Cagliari, ending a run of three successive defeats.
The video assistant referee (VAR) system was used twice in the 1-1 draw between Sassuolo and SPAL.
After Federico Peluso gave Sassuolo a halftime lead, SPAL levelled with a penalty converted by Andrea Petagna following a foul on Sergio Floccari. The referee at first waved play on but changed his mind after viewing the incident on the pitchside monitor.
In the last minute, Sassuolo substitute Alfred Duncan was given a second yellow card for a late tackle but the referee changed it to a straight red after a VAR review.
Bottom club Chievo drew 0-0 at home to Genoa in the afternoon’s other match.