Shakhtar, quarter-finalists last season, struggled to rediscover their form and stayed bottom of the standings with two points from three matches despite leading twice.
Brazilian Willian fired Shakhtar ahead after 15 minutes with a classy curling shot and his compatriot Luiz Adriano put them ahead again after Roman Shirokov had levelled for Zenit but Viktor Faizulin made sure the points were shared.
Russian league leaders Zenit would have been happier with the draw as they moved into second spot on four points, one behind surprise group leaders APOEL.
Defeat in St Petersburg in two weeks would leave Shakhtar struggling to emerge from the group into the knockout phase.
"We should be happy to have snatched a point as it was Zenit who deserved a victory," Shakhtar coach Mircea Lucescu told reporters.
"They managed to impose their will on the game overwhelming us in physical shape and dedication. I cannot recollect a match when I thought the goalkeeper was the best player but today he was the man of the match. It is a good lesson to our Brazilians who should understand that it is not enough to rely solely on their technical flair.
"Character and dedication also matter. This point has made our hopes of going into the next round even more uncertain."
It was an entertaining clash in the Donbass Arena and Zenit should have gone in front after 10 minutes but Shirokov missed a penalty after a foul by Dmytro Chygrynskiy on Faizulin.
Zenit had another great chance when Danny's close-range shot was stopped in stunning fashion by Olexandr Rybka.
They were then caught cold when Willian curled a perfect shot into the top corner.
Zenit's persistence was rewarded after 33 minutes when turned into a well-deserved equaliser on 33 minutes when Shirokov latched on to an incisive pass by Alexandr Bukharov, rounded the keeper and scored from an acute angle.
The visitors looked the more likely to score the next goal but Mircea Lucescu's Shakhtar side again struck against the flow of the game in the dying minutes of the first half.
Razvan Rat crossed low into the area from the left and Luiz Adriano finished off calmly.
Shakhtar could not hold the lead though and they gifted Zenit a second equaliser when Olexandr Chyzhov slipped and Faizulin stole in to lob Rybka.
"I would like to congratulate myself for working with such great players. They had an outstanding game tonight. Not so many teams create so many goal scoring chances in Donetsk," Zenit coach Luciano Spalletti said.
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.