Match ends, Zenit St Petersburg 2, Borussia Dortmund 4.
Borussia Dortmund took a giant stride towards the Champions League quarter-finals with a comfortable last-16 first-leg win at Zenit St Petersburg.
Dortmund made a rapid start as Henrikh Mkhitaryan swept in a loose ball after a dangerous run from Marco Reus, who cracked in a second 77 seconds later.
Oleg Shatov's low second-half shot gave Zenit hope, before Robert Lewandowski drilled in Dortmund's third.
Hulk's vicious penalty reduced the gap, only for Lewandowski to pounce again.
The Poland striker, who will move to Dortmund's arch rivals Bayern Munich in the summer, ensured the German side have a healthy - and fully deserved - two-goal advantage heading into next month's second leg.
Dortmund, who were beaten by Bayern in last season's Champions League final at Wembley, dominated their Russian hosts as they put their domestic woes to one side in a ruthless attacking display.
Jurgen Klopp's team have struggled in the Bundesliga this season, with the weekend's 3-0 defeat at lowly Hamburg leaving them 20 points adrift of leaders Bayern.
But they have fared much better on the European stage, progressing into the knockout stage from a tricky group containing Premier League title chasers Arsenal, big-spending Italian side Napoli and French runners-up Marseille.
Dortmund looked intent on making amends for their Bundesliga troubles and constantly threatened to hurt Zenit with swift and penetrating counter-attacks.
They were helped by some rusty defending from the home team, who had not played a competitive fixture since 11 December because of the mid-season Russian break.
The Russian leaders allowed Germany international Reus to weave into their penalty area and, despite being fouled by two home defenders, he stayed on his feet to feed Mkhitaryan for the opening goal.
Reus doubled the lead after collecting Kevin Grosskreutz's pass as Dortmund threatened to run riot in a devastating opening burst.
But Zenit managed to regroup after half-time and reduced the arrears following a chaotic scramble inside the Dortmund box. Venezuelan debutant Jose Rondon, who appeared to be in an offside position, hit the post before Oleg Shatov rifled in the loose ball.
The comeback lasted for only three minutes before Lewandowski combined with Poland team-mate Lukasz Piszczek to drill through the legs of Zenit goalkeeper Yuri Lodygin from 12 yards.
Zenit were given another lifeline when Scottish referee William Collum harshly adjudged that Piszczek had brought down Viktor Fayzulin. Brazil striker Hulk, who had missed his previous three penalties, thumped an unstoppable effort into the top right corner.
However, their defence switched off almost straight from the restart and Lewandowski drove in a fourth goal for the visitors to make their task in the return leg on 19 March look more straightforward.
Zenit coach Luciano Spalletti:
"We conceded the two quick goals. It made a big imprint on the match and as a matter of fact decided the game.
"We made too many ridiculous mistakes and were punished.
"You can't afford these kind of mistakes at this level against opponents like Borussia. If you do you pay a very high price."
Borussia Dortmund coach Jurgen Klopp:
"We were incredibly active and aggressive. It's not easy to do that. The team put in a fantastic performance.
"This was close to an optimal performance. We pressed to great effect against a dangerous team."
Zenit St Petersburg
- 22AnyukovBooked at 54minsSubstituted forSmolnikovat 83'minutes
- 20FaizulinBooked at 81minsSubstituted forKerzhakovat 84'minutes
- 7Vieira de Souza
- 23ArshavinSubstituted forTymoshchukat 15'minutes
- 26PiszczekBooked at 68mins
- 11ReusSubstituted forHofmannat 85'minutes
- 10MkhitaryanSubstituted forAubameyangat 70'minutes
- 19GroßkreutzSubstituted forDurmat 90+1'minutes
- William Collum
- Shots on Target
Second Half ends, Zenit St Petersburg 2, Borussia Dortmund 4.
Foul by Hulk (Zenit St Petersburg).
Marcel Schmelzer (Borussia Dortmund) wins a free kick in the defensive half.
Hulk (Zenit St Petersburg) wins a free kick in the defensive half.
Foul by Erik Durm (Borussia Dortmund).
Substitution, Borussia Dortmund. Erik Durm replaces Kevin Großkreutz.
Attempt saved. Axel Witsel (Zenit St Petersburg) right footed shot from outside the box is saved in the centre of the goal. Assisted by Salomón Rondón.
Foul by Oleg Shatov (Zenit St Petersburg).
Jonas Hofmann (Borussia Dortmund) wins a free kick on the right wing.
Substitution, Borussia Dortmund. Jonas Hofmann replaces Marco Reus.
Luís Neto (Zenit St Petersburg) wins a free kick in the defensive half.
Foul by Kevin Großkreutz (Borussia Dortmund).
Substitution, Zenit St Petersburg. Alexander Kerzhakov replaces Viktor Faizulin.
Substitution, Zenit St Petersburg. Igor Smolnikov replaces Alexander Anyukov.
Viktor Faizulin (Zenit St Petersburg) is shown the yellow card for a bad foul.
Foul by Viktor Faizulin (Zenit St Petersburg).
Lukasz Piszczek (Borussia Dortmund) wins a free kick in the defensive half.
Corner, Zenit St Petersburg. Conceded by Roman Weidenfeller.
Attempt saved. Hulk (Zenit St Petersburg) left footed shot from outside the box is saved in the bottom right corner. Assisted by Salomón Rondón.