While the Russian side maintained their unbeaten record at home this season, the former Porto striker's saved penalty ensured the spoils were shared in the UEFA Champions League Group G encounter.
Lucho Gonzalez put the home side ahead after 23 minutes, heading home Danilo's delivery from the right, with Hulk on hand to remind Porto of his quality three minutes short of the half hour, when he stole in to latch onto a loose ball, which Nicolas Otamendi, Eliaquim Mangala and goalkeeper Helton all failed to deal with.
The Brazilian was quickly onto Roman Shirokov's aimless pass before coolly dispatching his equaliser, although he spurned the chance to secure Zenit the points early in the second when his 52nd-minute penalty was saved.
Steven Defour replaced the suspended Hector Herrera for Porto, with the midfielder sent off in the sides' last Champions League meeting, while Silvestre Varela was preferred ahead of Lica in the forward line.
For Zenit, Domenico Criscito replacing Neto was one change from the side that won in Portugal, with Hulk starting against his former club. Alexander Kerzhakov had to be content with a place on the bench, despite grabbing an 85th-minute winner in the reverse fixture.
The visitors had the first opportunity of the match, with Josue curling a long-range effort just past Yuri Lodygin's left-hand post after six minutes, while Axel Witsel side-footed Hulk's lay-off over the bar in an even opening.
Porto edged the opening 20 minutes and went ahead shortly after courtesy of Gonzalez.
The Argentina international expertly guided a header from a lofted Danilo cross into the far corner of the net, to secure his second goal of this season’s competition.
However, the lead last just five minutes when Hulk returned to haunt his former employers.
He nipped in to take advantage of confusion between Helton and his defenders, rounding the goalkeeper and slotting home to draw the hosts level.
Victor Fayzulin forced Helton into a good save while Lodygin captured a firm header from Jackson Martinez at the second attempt a minute before the break.
Oleg Shatov's effort rippled the side netting three minute into the second half, although Hulk wasted a glorious opportunity to put the home side in front, when he missed his penalty soon after.
Otamendi was penalised for blocking Shatov's cross with his hand, but Helton got down to his right and easily saved Hulk's tame effort.
Martinez's swerving effort almost caught out Lodygin eight minutes after the hour, but his strike was tipped wide, before Otamendi headed narrowly over from the resulting corner.
Both sides pressed for a winner in the late stages of the game, Hulk seeing a penalty appeal waved away as Zenit and Porto remain second and third respectively.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.