Federico Chiesa had given Juventus the advantage in the 13th minute at the Stadio Olimpico Grande Torino, racing through following a give-and-go with Alvaro Morata to finish between Salvatore Sirigu’s legs.
But an Antonio Sanabria brace looked set to give the hosts their first derby win in six years.
The Paraguayan nodded in the leveller in the 27th minute after Juve keeper Wojciech Szczesny had pushed out a long-range Rolando Mandragora effort.
Sanabria struck a second time just after the break when he intercepted a misplaced Dejan Kulusevksi back pass and raced forward to beat Szczesny.
A Ronaldo header was pushed over by the Torino keeper after 53 minutes with the Portuguese striker sending another one over the bar with 20 minutes to go.
But the Serie A top scorer finally got his 24th league goal this campaign following a VAR review when he nodded home a Giorgio Chiellini cross from close range.
Rodrigo Bentacur rattled the post late with Juventus keeper Szczesny also denying Sanabria and Daniele Basselli’s hopes of a late winner.
‘No excuses’ for Milan
Milan’s miserable recent form at the San Siro continued in their draw with Samp.
A terrible Theo Hernandez pass across midfield in the 57th minute allowed Sampdoria veteran Fabio Quagliarella to pounce and send a long-range lob over Donnarumma who was out of his goal.
It was the 38-year-old Quagliarella’s 10th goal this campaign, reaching double figures for the fifth consecutive league season.
Claudio Ranieri’s mid-table Samp side went a man down just after their goal with Adrien Silva sent off after picking up a second yellow card.
Hakan Calhanoglu was denied by Sampdoria goalkeeper Emil Audero before substitute Jens Petter Hauge levelled the scores three minutes from the end, beating the rival defence and curling the ball into the corner.
The hosts were denied a late winner when Franck Kessie rattled the woodwork.
“There are no excuses,” said Pioli, whose team’s push for a first league title since 2011 has been hampered by just two wins from eight home games in the league in 2021.
“There is disappointment, bitterness and anger.”
Atalanta, Napoli close in
The seven-time European champions’ hopes of Champions League football next season are also threatened.
Atalanta continued their push for a third season of elite European football against Udinese which came thanks to a first-half Luis Muriel brace and Duvan Zapata adding a third after the hour mark in Bergamo.
Napoli claimed their fourth consecutive win, but not without a battle from bottom side Crotone who lost a dramatic seven-goal contest.
Lorenzo Insigne picked up a Giovanni Di Lorenzo pull back for the opener the 19th minute in Naples, and then had a role in Victor Osimhen’s second minutes later.
The points looked to be secured for Napoli when club record scorer Dries Mertens added a third from a free-kick after half an hour.
However, Crotone fought back to 3-3 largely thanks to a double from Nigerian Simy the 25th and 48th minutes.
But Di Lorenzo made sure the home side did take the win with his 72nd-minute strike.
Roma stretched their winless run to a three matches with a 2-2 stalemate at Sassuolo.
The Romans drop to seventh behind city rivals Lazio, who beat Spezia 2-1 thanks to a Felipe Caicedo penalty awarded after a VAR review in the 88th minute.