Italy were unable to snatch a win after France were reduced to 14 men for the final 10 minutes and Damian Penaud's sucker punch wrapped up a 25-14 victory for Les Bleus at the Stadio Olimpico.
Penaud produced a tremendous tackle to deny Marco Zanon a debut try – with Camille Chat having been sent to the sin bin following repeated infringements – and the France wing rubbed salt in the wound by racing clear in the 79th minute to put the seal on the hosts' 22nd straight Six Nations defeat.
Antoine Dupont and Yoann Huget crossed either side of half-time to put France in control, but Tito Tebaldi set up a tense finale by closing the gap to three points in the 55th minute.
However, Penaud came to the fore in sensational fashion with his team at a numerical disadvantage, denying Italy even a losing bonus point when a rare victory had seemed within reach.
Early Italy pressure and a sloppy start from France enabled Tommaso Allan to slot through a pair of penalties, but Maxime Medard and Penaud combined to send Dupont over the line in the 16th minute.
Guilhem Guirado appeared to sustain a rib injury and was replaced by Chat before Zanon was denied a try when Allan's grubber rebounded off the padding around the post, with Italy twice more failing to touch down before half-time.
Huget raced in on the left wing following a terrific pass from Romain Ntamack but Italy managed to string some phases together and hit back when Tebaldi barged over following a sensational dummy.
Allan was unable to convert and, after Leonardo Ghiraldini was taken off on a stretcher with a support on his right leg before the hour mark, Ntamack's drop goal gave France a six-point cushion.
Tebaldi knocked on as he stretched for the line in search of a response and a grinning Zanon was denied by a last-ditch tackle from Penaud after Chat was sent to the sin bin.
Italy again came up short and when Ntamack brilliantly beat Jayden Hayward to a high kick and offloaded to Penaud as France were not to be denied their first away win in the Six Nations since 2017.
Italy rue wasted opportunities
With World Rugby pushing for the Six Nations to introduce promotion and relegation and this week announcing details of its Nations Championship concept, Italy would have loved to respond with a strong result.
However, they were unable to avoid finishing without a win for the fourth successive edition after failing to make the most of sustained spells of pressure inside France's 22 during the first half and in the last 10 minutes.
No party for Parisse
Sergio Parisse became the first player in history to captain his country 50 times in the Five/Six Nations on Saturday but was once more on the losing side in what could well be his final outing in the competition.
The 35-year-old number eight, who is expected to retire from international rugby after the World Cup, broke the record for the most Six Nations appearances this year, but some costly errors near the try-line in the opening period let France off the hook.
Key Opta Facts
- Italy have now lost their last 22 Six Nations games, extending the all-time record in the Five/Six Nations, with their last victory coming against Scotland at Murrayfield back in 2015.
- France recorded their first away win in all competitions since beating Italy in Rome in 2017, they had lost their last 10 games on the road before this game, their worst run away from home since losing 14 consecutive games between 1922 and 1928.
- Yoann Huget crossed for his fourth try in this year's Six Nations, the first France player to score four tries in an edition of the tournament since Wesley Fofana in 2012.
- France's Romain Ntamack slotted just the second successful drop goal in the tournament this year, after teammate Camille Lopez kicked on against Wales in Round 1.
- Tito Tebaldi scored his first try for Italy, in his 32nd appearance and almost 10 years after his debut for the Azzurri (June 2009).