Zenit St Petersburg gained a narrow advantage over Benfica in the Champions League last 16, on a night that both goalkeepers will want to forget.
The Portuguese side took the lead after 21 minutes. Yuri Zhevnov made a mess of Oscar Cardozo's tame 25-yard free kick and Maxi Pereira tapped home the rebound from six yards.
The scores were level six minutes later, after Tomas Hubocan crossed for Roman Shirokov, who tucked away a powerful and precise volley.
With 20 minutes remaining, Zenit went ahead with a spectacular move. Alexander Kerzhakov backheeled into Vladimir Bystrov, who flicked the ball into the path of Sergei Semak and the substitute deftly finished.
Cardozo thought that he has rescued a draw for his side when he struck three minutes from time, after Zhevnov comically spilled from Nicolas Gaitan.
Zenit hit back instantaneously, as Shirokov netted the winner. Pereira made a hash of a cross from the right and the defensive midfielder causally rounded Artur, who had charged out feet-first.
Pablo Aimar was booked in the game and will miss the return leg in Lisbon.