UEFA Champions League: Zenit 2 Borussia Dortmund 4
Henrikh Mkhitaryan and Marco Reus punished a lacklustre start from the Russian side, who were playing a competitive fixture for the first time since December 11, as last year's runners-up significantly enhanced their chances of reaching the quarter-finals.
Oleg Shatov pulled a goal back for the hosts 12 minutes into the second half, only for Robert Lewandowski to swiftly restore Dortmund's two-goal advantage with his fifth goal in the competition this season.
A penalty from Hulk in the 69th minute brought Zenit back within a goal once again, yet the hosts then allowed Lewandowski too much room in the penalty area and the Poland international doubled his tally.
The two sides meet again on March 19 with the Bundesliga side holding a considerable advantage having managed four away goals.
Dortmund took control of the game almost immediately as Zenit struggled to get back into the swing of competitive football.
Reus, starting his first game in three weeks, was immediately on the offensive and jinked his way into the penalty area in the fourth minute.
The 24-year-old could have gone down under the challenge of a defender but instead touched the ball to Mkhitaryan, who swept home.
A minute later the visitors were two goals ahead with Mkhitaryan and Reus again involved.
Kevin Grosskreutz laid the Armenian's right-wing cross into the path of Reus and the latter sent a left-footed volley under Yuri Lodygin.
The Russian Premier League leaders slowly worked their way back into the game, but were initially unable to test Roman Weidenfeller.
With half an hour played Dortmund came close to extending their lead further as Lukasz Piszczek and Reus exchanged passes on the edge of the penalty area.
The ball broke for the forward but his curling effort flew just wide of Lodygin's goal.
After withstanding another strong start in the second half, Zenit halved their deficit through Shatov, although there were hints of offside in the build-up.
Salomon Rondon and Shatov both appeared to be offside when the ball was played into the penalty area, but play continued and the Venezuelan striker hit the post before Shatov fired home.
Zenit were only level for four minutes as Lewandowski played a one-two with international team-mate Piszczek and beat Lodygin with a low strike.
A clumsy challenge by Piszczek on Viktor Fayzulin in the 68th minute saw Zenit awarded a penalty, which Hulk emphatically converted.
Yet Lewandowski offered another quick reply, firing low across Lodygin to seal the win in the 71st minute after Reus had robbed Anatoliy Tymoshchuk inside the Zenit half.