Napoli saw their lead over Juventus at the top of Serie A cut to a single point as Roma claimed a deserved win thanks to two goals from Edin Dzeko.
Cengiz Under and Diego Perotti also scored as Roma ended Napoli’s 10-match winning run.
Lorenzo Insigne had opened the scoring for Napoli, with Dries Mertens adding a stoppage time consolation.
Juventus earlier edged out Lazio 1-0 thanks to Paulo Dybala’s 93rd-minute strike.
With just seconds remaining, Argentinean forward Dybala tricked his way into the penalty area to hook the ball beyond goalkeeper Thomas Strakosha.
Defending champions Juventus also have a game in hand on Napoli.