Luciano Spalletti's Zenit came from a goal behind to claim all three points against ten-man FC Porto in the Petrovsky Stadium this evening.
The Portuguese champions started brightly and took the lead after ten minutes. Brazilian striker Hulk drilled the ball across the goalmouth and 20-year-old Jamie Rodriguez was on hand to score from close range.
It took the hosts just 11 minutes to restore parity courtesy of Roman Shirokov. Porto goalkeeper Helton could only parry Viktor Fayzulin's cross and Shirokov turned in the rebound from 12 yards out.
Deep into the first-half stoppage time Porto's chances of taking a positive result away from the game were hampered when Jorge Fucile was handed his second caution by referee Howard Webb for a deliberate handball.
Zenit made their numerical advantage count after the restart, with Shirokov claiming his second of the match in the 63rd minute, sending a half-volley past Helton and into the roof of the net.
The points were sealed in the 72nd minute thanks to Portuguese playmaker Danny, who capitalised on being unmarked inside the penalty area to convert Aleksandr Kerzhakov's deflected cross.