A 2-0 home win over Atalanta boosted Lazio's Serie A title ambitions after champions and leaders Juventus were held to a 1-1 draw away to Parma on Sunday.
Lazio began the second half of the season trailing Juve by five points but sealed their 13th win of the campaign thanks to goals from Sergio Floccari and a Davide Brivio own goal.
With Juve settling for a share of the spoils after Nicola Sansone levelled Jonathan Biabiany's earlier own goal, it left Vladimir Petkovic's side just three points adrift in second with a two-point lead on Napoli.
Inter Milan had leapfrogged Napoli into third thanks to a 2-0 home win over Pescara on Saturday, however Napoli re-established order with a convincing 3-0 home win over Palermo.
Inter now sit fourth, seven points behind Juventus but three clear of Fiorentina after La Viola suffered a shock 3-1 defeat at the hands of Udinese.
A week on from their 3-0 home rout over Inter, Antonio Di Natale scored his second consecutive league brace as Udinese claimed only their seventh win of the campaign to move one place up to eighth.
AC Milan sit in seventh place but could leapfrog Roma, who were stunned 1-0 in Catania after Alejandro Gomez's 61st-minute effort, into sixth place if they manage to account for Sampdoria in Sunday's late game.
Elsewhere, Cagliari moved out of the bottom three at the expense of Genoa after beating sealing a 2-1 over the visitors thanks to Daniele Conti's 82nd minute winner.
Only days ago Petkovic had claimed Juve already have one hand on the title, but the Biancocelesti are now the champions' closest challengers.
Lazio took the lead in the 67th minute, albeit in controversial fashion.
Romanian Stefan Radu's cross from the left was first-timed onto the crossbar by Atalanta defender Davide Brivio, but before Floccari picked up the rebound and slammed it home the ball made contact with his hand.
The goal stood, and Lazio went on to double their lead 10 minutes later when Brivio headed superbly into his own net after attempting to deflect a long-range cross out of play.
Fiorentina took the lead at the Stadio Friuli when Gonzalo Rodriguez rose above the defence to smash a header off the crossbar and into the net via the head of 'keeper Zeljko Brkic.
Udinese won a penalty when Maurizio Domizzi was fouled in the box and Di Natale stepped up to send Norberto Neto the wrong way for his 13th league goal of the season.
There was a hint of offside as Di Natale broke through the Viola defence to beat Neto for a 14th league goal which put him second behind Napoli's Edinson Cavani's Serie A-leading tally of 16.
But the hosts confirmed their superiority barely a minute later when Colombian striker Luis Muriel beat Neto with a right-foot strike.
At Parma, both sides missed scoring chances before Pirlo's freekick from just outside the area took a deflection off the head of Biabiany and wrong-footed 'keeper Antonio Mirante in the 52nd minute.
But a Juventus error gave Parma the chance to level, Argentine defender Gabriel Paletta pouncing to send Nicola Sansone through to outpace Juve defender Martin Caceres before beating Gianluigi Buffon with a low, well-placed strike.
In Naples, Christian Maggio broke the deadlock for the hosts after heading home Marek Hamsik's cross from the left past Samir Ujkani on the half hour.
Swiss midfielder Gokhan Inler made it two when he surged forward and sidestepped the Palermo defence before sending his shot just under the crossbar and into the net.
Lorenzo Insigne put the match beyond all reach in the 72nd minute when he slammed Inler's cut-back from the goalline into the roof of the net from the edge of the area.