During a frantic game, Leonardo Spinazzola scored at both ends, but it was Amadou Diawara’s late goal that secured Roma’s victory and another poor result for Fiorentina.
Dusan Vlahovic put Pau Lopez to the test twice, but only with strength and no precision, while Bartlomiej Dragowski got away with a sloppy move when colliding with Igor to clear a long shot.
With a Lorenzo Pellegrini long-range strike saved by Dragowski in the first half stoppages, Roma had their first genuine opportunity. At the Stadio Franchi, Leonardo Spinazzola broke the deadlock with a well-taken right-foot volley from 12 yards after Gianluca Mancini dinked up a pass over the top for the wing-back.
Henrikh Mkhitaryan should have made it 2-0 after being sent clear by Jordan Veretout and assisted by the Spinazzola back-heel flick, but he stumbled at the crucial moment.
In the box, Ribery twisted and turned before Mancini charged down his shot, while Dragowski pushed Amadou Diawara’s scorcher over the counter.
The offside flag was up when Diawara turned in relatively undisturbed from eight yards, as Rick Karsdorp rolled across from the right. However, VAR showed he was kept in play by Nikola Milenkovic and the goal stood.