- Matías Vecino (67')
Lazio, who made it three league wins in a row for the first time since October, have provisionally moved two places up to second in the standings on 48 points, one above third-placed Inter Milan and AC Milan in fourth, both with a game in hand.
Runaway leaders Napoli, on 65 points, have suffered only their second league defeat this season after they had lost away to Inter in January.
"We had to convince the boys that they could come here and get a result, and that's a lot," Lazio coach Maurizio Sarri told a news conference. "If you read Napoli's numbers at home, it becomes difficult to think you can win.
"This Napoli team is going to win [the title] and I envy it to death. [Coach Luciano] Spalletti has been phenomenal."
Lazio could have taken the lead as early as the fifth minute, but Vecino's close-range header was brilliantly cleared off the line by Napoli defender Giovanni Di Lorenzo who headed it over the bar.
While Napoli had more possession in the first half, Vecino's chance was the closest either side had and the game was goalless at half-time.
Napoli midfielder Piotr Zielinski could have put the hosts in front just before the hour mark, when he received a neat pass from Victor Osimhen on the edge of the box but his low shot -- although powerful -- narrowly missed the target.
Lazio eventually took the lead and sealed the win in the 67th minute through Vecino, who picked up a ball cleared by Napoli winger Khvicha Kvaratskhelia and sent a stunning first-time shot from a distance which went inside the left post.
Napoli pushed for an equaliser in the final 15 minutes but despite many late chances, including Osimhen's header which hit the woodwork, they did not manage to rescue a point.
Napoli were unbeaten in their previous seven Serie A home games against Lazio (W6, D1), with their last such defeat dating back to May 2015, under Rafael Benitez.
"The draw was the correct and fairest thing. It happened to us several times that we didn't settle for a draw and we won, tonight went badly and we accept it," Spalletti said.
They next host sixth-placed Atalanta on March 11 before taking on Eintracht Frankfurt in their Champions League round of 16 second leg on March 15, which they approach with a two-goal advantage from the first game.
- Luca Pairetto