Serie A Wrap: Juve secure title, Milan win derby
Rudi Garcia's side – who started the campaign with 10 straight wins – are the only team to have looked like removing Juve's vice-like grip on the title this season.
Yet their faint hopes of catching Antonio Conte's men were finally ended as Mariano Izco followed up a powerful strike with a cool finish to put his side 2-0 ahead early on.
Francesco Totti pulled one back soon after, but Roma goalkeeper Morgan De Sanctis made a critical error in the second half, spilling Sebastian Leto's shot into the path of Gonzalo Bergessio – who slotted home.
Pablo Barrientos then wrapped up a win that sparked celebrations in Turin with a good strike from range.
The result also proved a major boost for the victors, who rose off the foot of the standings to boost their survival hopes.
Replacing Catania on the bottom are Livorno, who were on the wrong end of a 5-3 thriller at Udinese.
An incredible first half saw seven goals scored and a penalty missed - Livorno going ahead through Paulinho's free-kick.
Back-up goalkeeper Luca Anania saved Antonio Di Natale's penalty as the visitors eyed a crucial win, but the veteran striker got his side on level terms almost immediately afterwards.
Just two minutes later, Di Natale turned provider for Emmanuel Badu and Udinese entered the break incredibly 5-2 up after the 36-year-old scored a second, while Roberto Pereyra and Gabriel Silva struck to make Paulinho's second an irrelevance.
Djamel Mesbah grabbed a consolation with time running out, but Livorno now sit four points from safety with just two games to play.
Nigel de Jong's header separated Milan and Inter in a drab derby at San Siro.
The Dutchman headed home Mario Balotelli's free-kick to earn city bragging rights and lift his side to within a point of sixth place - enough to secure a UEFA Europa League spot.
Inter, meanwhile, are sitting fifth, just two points ahead of a Torino side who earned a 1-0 triumph at Chievo thanks to Gennaro Sardo's own goal.
Parma also kept their Europa League hopes alive with a 2-0 success against Sampdoria.
Antonio Cassano set the hosts on their way in the eighth minute, turning in Jonathan Biabiany's pass.
They had to wait until the final moments to cap their triumph, Ezequiel Schelotto converting Afriyie Acquah's cross-cum-shot.
In the day's other game, Genoa and Bologna played out a goalless draw, keeping the latter mired in the relegation fight.