Champions Juventus were trailing 2-1 and a man down after an hour at the Stadio Olimpico after a Jordan Veretout brace for the hosts and Adrien Rabiot’s sending off.
But a towering Ronaldo header grabbed the equaliser in the 69th minute to avoid handing new Juventus coach Andrea Pirlo a first defeat.
Edin Dzeko was back on the Roma front line after his move to Juventus fell through, the Bosnian having missed last week’s trip to Verona which ended in a forfeit defeat for the capital side for fielding an unregistered player.
Instead new Juventus signing Alvaro Morata got his first start after his move from Atletico Madrid earlier this week.
But the champions were pushed hard by the hosts with Veretout opening from the spot in the 31st minute after a Rabiot handball.
The French midfielder added a second shortly before the break just after Ronaldo had equalised for the first time.
Another handball, this time Lorenzo Pellegrini’s, resulted in Juventus being awarded a penalty allowing Ronaldo to slot in.
The Portuguese got his second with 20 minutes to when his head met a Danilo cross seven minutes after Rabiot was sent off for a second yellow card.
‘A bit misleading’
Hirving Lozano scored twice as Napoli swept past coronavirus-hit Genoa while AC Milan continued their winning run without Zlatan Ibrahimovic with a 2-0 victory against promoted Crotone.
“The result is a bit misleading, if we hadn’t scored the second goal quickly in the second half, I would probably have changed the set-up,” said coach Gennaro Gattuso.
“In the first half, we suffered a bit, even with a lot of opportunities, we almost conceded a goal. We lacked a little balance, we still have to improve.”
Nigerian striker Victor Osimhen got his first start for Napoli, having come off the bench to lift the southerners past Parma in their opener last week.
Club-record signing Osimhen again impressed against a Genoa side playing without first-choice goalkeeper Mattia Perin, who tested positive for coronavirus, as did midfielder Lasse Schone.
Mexican forward Lozano fired Napoli ahead in the 10th minute in the Stadio San Paolo and Gattuso’s side remained just a goal up at half time.
After the break it was one-way traffic with Piotr Zielinski latching onto a clever Osimhen back-heel flick for the second just seconds after the restart.
Zielinski then helped set up Dries Mertens for the third just before the hour mark before Lozano again struck following a mix-up in the Genoa defence.
Substitute Matteo Politano curled in the sixth with 20 minutes to go to give Napoli a maximum six points after their first two matches.
“Last year Osimhen was the player we needed,” said Gattuso. “He didn’t score today, but he did score.
“When he attacks we find space. The players look for him, we’re very happy with how he is helping us.”
The only bad news for Gattuso was Lorenzo Insigne limping off with a left thigh injury ahead of their clash at champions Juventus next week.
Milan meanwhile, without star Ibrahimovic who tested positive for COVID-19, also have injury woes after Croatian striker Ante Rebic fell badly on his left arm.
Franck Kessie scored their first goal from the penalty spot just before the break after a foul on Rebic, with Spaniard Brahim Diaz, on loan from Real Madrid, adding a second four minutes later.
“The good news is there is no fracture, this decreases the recovery time,” said coach Stefano Pioli of Rebic.
“We have injuries, now we grit our teeth. This is a very important week for both the league and the Europa League.”