Napoli all but handed the Serie A title to Juventus as they were held to a 2-2 draw by Torino at the Stadio San Paolo on Sunday.
After Juve's win over Bologna on Saturday, Maurizio Sarri's men realistically needed a win to stand any hope of overhauling the leaders.
But the draw means Juventus are now six points clear of Napoli with just two games of the season remaining.
Dries Mertens fired Napoli in front in the 25th minute but the visitors drew level when Daniele Baselli hit a deflected equaliser 10 minutes into the second half.
Substitute Marek Hamsik struck Napoli back in front in the 71st minute but Lorenzo De Silvestri headed home seven minutes from time to all but end the home side's slim hopes of the title.
Roma moved up to third as Cengiz Under's seventh goal in eight Serie A starts was enough to see off Cagliari, who dropped into the bottom three.
The visitors opened the scoring on the quarter-hour when Edin Dzeko played in Under and the Turkey international's low drive went in off the inside of the far post.
Roma had goalkeeper Alisson to thank for preserving the points as he made a superb save to keep out team-mate Bruno Peres' attempted clearance in the 36th minute and again to deny Marco Sau with seven minutes remaining.
Live Coppa Italia Football
Lazio still have work to do to ensure a top four spot for next season after they were held to a 1-1 draw at home by Atalanta.
Musa Barrow gave the home side a dream start as he slotted home with less than two minutes on the clock, but Atalanta, who are themselves still chasing a Europa League qualifying slot, equalised 22 minutes later through Felipe Caicedo.
Inter Milan managed to narrow the gap on the top four contenders as they claimed a convincing 4-0 win at 10-man Udinese.
First half strikes from Andrea Ranocchia, Rafinha and Mauro Icardi effectively ended the contest before half-time against an Udinese side who have now taken just one point from a possible 39.
The visitors had Seko Fofano sent off for a foul in the 49th minute before Inter wrapped up victory through Borja Valero 19 minutes from time.
Matteo Politano scored the only goal of the game as Sassuolo ensured survival with a 1-0 win over Sampdoria, while Chievo claimed their first win in seven games with a 2-1 triumph over fellow strugglers Crotone to take a major stride towards safety.
Starting the day rooted in the bottom three, Lorenzo D'Anna's men grabbed the advantage with a 12th-minute opener from Valter Birsa before Mariusz Stepinski grabbed a second eight minutes from time. An injury-time effort from Marco Tumminello came too late for the visitors.
SPAL also moved clear of the bottom three with a 2-0 win over already-relegated Benevento, Alberto Paloschi opening the scoring in the 25th minute and Mirco Antenicci wrapping up victory from the penalty spot eight minutes from time.
Bryan Dabo struck a dramatic winner 10 minutes from time as Fiorentina came from behind to win 3-2 at nine-man Genoa.
Marco Benassi's opener for the visitors was cancelled out by Giuseppe Rossi and Gianluca Lapadula before the hosts self-destructed to gift Fiorentina the points.
Goran Pandev was sent off in the 71st minute for a bad foul on Bruno Gaspar, and six minutes later Valentin Eysseric equalised for the visitors.
Two minutes later Dabo blasted home his first Fiorentina goal before Genoa substitute Ervin Zukanovic was also dismissed.