Jadon Sancho and Erling Haaland scored late goals to give Borussia Dortmund a much-needed win in their Champions League group.
Dortmund were beaten 3-1 by Lazio last week and were poor for large parts of the game against a diligent Zenit side led brilliantly by former Liverpool defender Dejan Lovren.
But Sancho, 20, kept his cool to convert after Thorgan Hazard was fouled at the far post.
And Haaland then ran on to make it two.
Lazio drew 1-1 with Club Bruges to leave Group F tight after two games.
Lovren, who would surely be playing for Liverpool had he stayed in the absence of Virgil van Dijk and Joel Matip, made eight clearances and four interceptions in a fine display at centre-half for the visitors.
But his good work was undone when Vyacheslav Karavaev needlessly grabbed Hazard around the neck and Sancho scored the penalty.
Haaland, 20, then ran on to substitute Jude Bellingham's pass to score his 12th goal in just 10 Champions League appearances.