Ciro Immobile gave Lazio an early lead at the Stadio Olimpico in Rome, but Olivier Giroud levelled shortly after half-time before Tonali’s late heroics kept Milan firmly in the title hunt.
They moved back two points above of Inter, who beat Roma 3-1 on Saturday and have a game in hand Wednesday away to Bologna. Inter also knocked Milan out of the Italian Cup semi-finals in midweek.
Ciro Immobile became the leading active scorer in Italy’s top flight when he turned in a cross from Sergej Milinkovic-Savic inside four minutes.
The Italy international’s 181st Serie A goal took him past veteran Sampdoria striker Fabio Quagliarella as Immobile extended his league-leading haul for the season to 26.
But Giroud poked in from after excellent work from Rafael Leao, and Milan won it at the death as Zlatan Ibrahimovic nodded across for Tonali to force home following a poor defensive header by Francesco Acerbi.
“My players are lions,” said Milan coach Stefano Pioli.
“I am so proud of my players and if I was in their shoes, I’d be angry, as people don’t give them enough credit,” he told DAZN.
– Napoli stunned by late comeback –
Napoli’s Scudetto prospects are hanging by a thread after they blew a two-goal lead late on and crashed to a shock 3-2 loss at Empoli.
Luciano Spalletti’s side were 2-0 ahead with 10 minutes to go before Scottish midfielder Liam Henderson sparked a revival for the hosts who scored three goals in an eight-minute spell.
With four matches to play this season, Napoli are seven points behind Milan and five adrift of second-placed Inter.
Napoli have not won the Serie A title since the days of club legend Diego Maradona who led them to their two league crowns in 1987 and 1990.
Dries Mertens opened the scoring just before the break with Lorenzo Insigne adding a second eight minutes after the interval.
But Napoli’s defence collapsed in the absence of the suspended Kalidou Koulibaly.
A lapse from Kevin Malcuit allowed Henderson to pull a goal back after 80 minutes, with Andrea Pinamonti charging down visiting goalkeeper Alex Meret to grab the equaliser after 83 minutes.
Pinamonti added a second five minutes later as Empoli ended their 16-match winless run going back to December 12 when they beat Napoli 1-0 in Naples.
“Imagining such an end to the match is difficult,” said Spalletti, who side have now gone three matches without a win.
“But these are games where the opponent continues to fight with the right attitude, when we probably lost a bit of our focus and made mistakes that we shouldn’t make.
“I’m responsible for this team, for its technical and mental attitude, I have to take the consequences for what happens on the pitch.”
Champions League qualification does not seem threatened as Napoli still have a nine-point cushion over Roma in fifth.