Cengiz Under and Roma made the most of their chances and Cagliari did not, either by poor finishing or Alisson Becker heroics.
Chievo made a huge leap forward on the debut of caretaker manager Lorenzo D’Anna and put Crotone back in trouble.
Giuseppe Rossi had his first Serie A goal since 2014, but Fiorentina emerged 3-2 winners in a Marassi thriller after Goran Pandev saw red.
Juventus had to come back from a Simone Verdi penalty to beat Bologna, as substitute Douglas Costa transformed the game with two assists.
Felipe Caicedo cancelled out a Musa Barrow opener, but Atalanta will leave feeling they deserved more than a draw against Lazio.
Milan earned a comfortable 4-1 victory to keep European ambitions alive and mathematically sent Hellas Verona back to Serie B.
Dries Mertens ended his goal drought, but Napoli twice gave up the lead for a 2-2 draw as Torino practically crown Juventus champions.
Matteo Politano’s strike from a tight angle ended Sampdoria’s Europa League hopes and mathematically secured Sassuolo safety.
SPAL pushed Benevento aside to break further away from the relegation zone, but aren’t safe yet.
Inter ran riot to intensify the Udinese crisis, including a Seko Fofana straight red card using VAR, with a 4-0 victory.