The Liga giants were disappointing for the majority of the first-half but clicked into gear to see off their Serie A opponents in the Champions League Round of 16 first leg
Ronaldo broke the deadlock after 57 minutes when his long-range shot clipped Roma’s Alessandro Florenzi before finding the back of the net.
Madrid weathered a late rally from the hosts before putting themselves firmly on course to reach the last eight of the competition for a sixth-successive season with a second goal in the closing stages.
Substitute Jese was allowed enough time in the 86th minute to angle a shot into the bottom left corner of Wojciech Szczesny’s goal, leaving Roma requiring a second-leg miracle to progress.
With a trip to the Spanish capital to come, and having conceded 16 goals in the group stage, Roma were understandably unwilling to stand and trade shots with one of the heavyweights of European football.
Their policy of sitting deep and playing on the counter almost worked before the break, but Stephan El Shaarawy failed to out-run Madrid defender Raphael Varane when played through on goal.
Despite dominating possession and territory, Madrid failed to register a single shot on target in the opening half.
Their best attempt came from an unlikely source, as Marcelo produced a volley from the left side of the area that dipped over the diving Szczesny but just landed beyond the far post.
Ronaldo – who walked out of Tuesday’s pre-match media conference after being pressed about his scoring record away from home – did have a long-range free-kick that fizzed wide.
The Portuguese was then fortunate to escape a booking for a deliberate, and rather obvious, handball by the touchline in what was a frustrating 45 minutes for the visitors.
It did not, however, take Ronaldo long to make a positive impact after the interval.
Marcelo’s pass down the left wing put Ronaldo one-on-one with Florenzi. He cut back inside with a trick before hitting a shot from just outside the area that took a deflection off the Roma defender to loop beyond Szczesny.
Spalletti’s response to falling behind was to send on Edin Dzeko in place of El Shaarawy, giving Roma a focal point along their forward line.
Only Varane’s outstretched leg stopped the substitute from getting on the end of Mohamed Salah’s low cross from the right, while Dzeko set up a shooting chance for William Vainqueur that flashed just wide.
Ronaldo narrowly missed a chance for a second goal at the other end, but Jese was on hand to give Madrid a commanding lead in the tie with an excellent run and finish four minutes from time.