Victor Ibarbo opened the scoring in the 18th minute for Cagliari, before a Davide Astori own goal levelled proceedings three minutes into the second half.

Napoli took the lead through Edison Cavani soon after, though parity was restored when Marco Sau scored with 19 minutes to go.

The match seemed destined for draw until substitute Insigne found the net with a deflected shot in the fourth minute of stoppage time.

Meanwhile, fourth-placed Fiorentina survived a major scare before prevailing 4-3 against Torino.

Goals from Juan Cuadrado, Alberto Aquilani and Adam Ljajic handed Fiorentina a 3-0 lead before the visitors fought back to level the contest at 3-3.

Both sides looked lively in search of a winner before Brazilian defender Romulo put the hosts back in front with four minutes remaining.  

In other matches, Palermo netted in the dying embers of the Sicilian derby to claim a 1-1 draw with Catania and keep within touching distance of Serie A safety.

Pescara ended their rotten run of eight consecutive defeats following a surprise 1-1 stalemate with Coppa Italia finalists Roma.

Inter Milan accounted for Parma 1-0, while Chievo overcame Siena by the same score and Bologna hosted Sampdoria in a 1-1 draw.

In the late kick-off, Juventus had an underwhelming 1-0 victory over AC Milan to close on the title and inhibit the losers' chances of reaching next season's Champions League.

An Arturo Vidal penalty was all the champions needed, earned when Kwadwo Asamoah was barged into by Marco Amelia in the penalty area shortly after the half-time interval.

Juve need just four more points in the final five matches to retain the Scudetto.