Juve made three changes to the side with Weston McKennie coming in for Federico Bernardeschi, Danilo Pereira replacing Aaron Ramsey and Gianluca Frabotta taking the place of Matthijs de Ligt, who got injured in the warmup. Spezia, meanwhile, made four alterations.
In the seventh minute, the visitors broke on the counter and Riccardo Marchizza eventually drilled wide of the near post from eight yards.
Juve were trying to push the ball forward, but Spezia were dealing with everything the Old Lady threw their way.
On the half-hour mark, there were chances at both ends. First, Dejan Kulusevski found himself in a promising position in the box and laid it off to Ronaldo, who was crowded out. Spezia countered and Marchizza's shot was headed just over the goal by Merih Demiral.
Three minutes before the interval, Ronaldo curled the ball with venom towards goal and it rattled off the bottom of the far upright and bounced away.
The Bianconeri eventually broke the deadlock in the 64th minute. Bernardeschi put in a cross from the byline on the left and Alvaro Morata tapped it in at the near post.
Five minutes later, it was 2-0. Federico Chiesa's first shot was saved by Ivan Provedal, but then he produced a moment of magic with the acrobatic volley to direct the rebound into the back of the net.
Ronaldo's free-kick then bent around the wall but Provedel's hands got to it. But the Portuguese superstar would get his goal in the 89th minute as Spezia's defence was split open. Rodrigo Bentancur laid it off to Ronaldo and he fired it into the back of the net to wrap the victory up.
Spezia were awarded a penalty in second-half stoppage time, but Andrey Galabinov was unable to find the back of the net after his spot-kick was saved by Wojciech Szczesny.