Zenit 0-1 Juventus: Kulusevski clinches late winner in Russia
Juventus made it three wins from their opening three Champions League matches as Dejan Kulusevski's late header downed Zenit 1-0.
A match of few clear-cut opportunities appeared to be petering out to a draw, with Weston McKennie having previously squandered Juve's best chances.
Massimiliano Allegri's team were far from their best in St Petersburg, though Zenit offered little threat going the other way.
The decisive moment came four minutes from time, Kulusevski glancing Mattia De Sciglio's cross in off the post to bring up his maiden Champions League goal and keep Juve three points clear at the top of Group H.
Wojciech Szczesny had to adjust his feet after initially misjudging Claudinho's powerful 18th-minute strike, which Juve's goalkeeper managed to get a hand to.
Federico Chiesa looked the most lively attacker at the other end in an underwhelming first half, with Juve's first effort on target not arriving until six minutes after the restart, Stanislav Kritsyuk thwarting McKennie, who had latched onto Alvaro Morata's superb pass.
Leonardo Bonucci came to Juve's rescue moments later, sliding across to block Claudinho's close-range attempt.
With an injury to Malcom, who had linked up well with Claudinho, denting Zenit's threat, McKennie seemed set to break the deadlock in the 74th minute, only for the midfielder to send a free header wide.
But Kulusevski showed his team-mate how it was done 12 minutes later, directing a brilliant header home from De Sciglio's teasing left-wing centre to put Juve firmly in control of the group.
What does it mean? Juve closing in on the last 16
Zenit travel to Turin in the next round of fixtures, and a win for Juve would see them through. The Bianconeri have now won their opening three Champions League games for the first time since 2018-19 – Allegri's previous season at the club.
Chelsea, who thrashed Malmo 4-0, are three points behind Juve in second place.
De Sciglio shows his worth
Alex Sandro made way for Juan Cuadrado midway through the second half, meaning De Sciglio switched flanks from the right to the left.
His ability to cut in on his stronger foot and deliver quality crosses ultimately proved the difference, with the Italy full-back registering a team-high three key passes, including his assist.
McKennie and Chiesa miss the mark
While Kritsyuk must be credited with a fantastic save to keep out McKennie's first effort early in the second half, the United States international should have done much better with a free header from six yards out.
His two attempts trailed only Chiesa for Juve, with the winger – who was aiming to become the first player to net in four consecutive Champions League appearances for the club since Mario Mandzukic in October 2017 – having failed to land any of his four shots on target.
There is the small matter of a derby d'Italia clash with Inter coming up for Juve on Sunday, while Zenit take on Spartak Moscow in the Russian Premier League