Having lifted the Europa League and remained unbeaten on their way to winning the Liga last season, the Portuguese side are some people's dark horses to do well in this year's competition, with their opening-round win over Shakhtar Donetsk backing that up.
They were halted in the freezing temperatures of Russia on Wednesday night, though, with the home side overturning an early James Rodriquez goal to take the points.
Roman Shirokov levelled matters not long after Porto's ninth-minute opener, but Zenit were only able to run away with things - Shirokov completing a brace and Danny adding a third - after Jorge Fucile was sent off just before half-time.
English referee Howard Webb showed the full-back a second yellow card after poor control saw him forced to bring the ball down with his hand - a slightly foolish thing to do after he had already been cautioned for sending Danny to the deck.
Porto could not have wished for a better start, though, with Rodriquez tucking away at the back post after Hulk's quick feet allowed him to work an opening and put in a wicked cross.
However the lead would last just 10 minutes, with Shirokov ramming into an unguarded goal after Helton came for and failed to deal with Danny's cross.
Alvaro Pereira went close to restoring Porto's lead with a shot that Viacheslav Malafeev touched away but, by the time the half-time whistle came, the away side had something else to ponder after Fucile's dismissal.
Zenit showed they were intent on making their numerical advantage count after the break, with Alexander Kerzhakov breaking into the box on the end of Shirokov's cross and hitting the post.
The same player then got into the area again, but was denied by Helton who bravely fell at his feet.
Shirokov then had a 'goal' chalked off incorrectly for offside as the traffic went all one way, before he made one count, pulling down Viktor Faitzulin's wayward 63rd-minute free-kick and drilling it across Helton for a stunning goal.
Hulk then went close with a 35-yard free-kick, but two became three 18 minutes from time when Danny was in the right place at the right time to bundle in a Kerzhakov cross.
Shirokov missed two chances to complete his hat-trick in the dying stages - one a glaring miss from two yards - but it mattered little as Zenit eased home.