In a clash delayed due to the Russian side's followers letting off flares in the stands, it was the visitors who held firm amidst the smoke to qualify from Group G
The visitors survived a flurry of home pressure, particularly in the second half as the Russian side created chances through Danny and Alexander Bukharov, but held firm to reach the knockout stages, while still remaining unbeaten in their section.
For the away side, striker Ailton was passed fit after missing his club's last few matches through injury, while the hosts could call upon influential Portuguese Danny, who had sat out his nation's successful Euro 2012 play-off versus Bosnia.
APOEL required just a point to secure progression, but it was the Russians who commenced the match with intent. The first opportunity of the contest fell to burly striker Bukharov, but he could not keep his header on target.
Zenit then survived an injury scare to talisman Danny, whose knee injury appeared to resurface, but he was able to continue and crucially dictate the pace of the match. On 25 minutes, Bukharov was fed in on the right channel, but he delayed his finish and his scrambled cutback eventually found Roman Shirokov, who could only direct his effort against the defender on the line.
Luciano Spalletti's side were in charge, aware that victory would be enough for them to secure a place in the knockout stages, but their tidy interplay was not being converted into tangible scoring chances. A misdirected Bukharov header on the stroke of the interval, amidst a cloud of smoke billowing from flares being unleashed in the stands, dropped wide, signalling the end of an underwhelming period of action.
But at the start of the second half, a second flare produced a fog that enveloped the pitch, and the referee Felix Brych took the decision to suspend the match, ushering both sets of players back down the tunnel.
After a 10 minute recess, the play resumed, and Bukharov came as close as anyone to breaking the deadlock. He met a cross from the right with a thumping header that crashed back from the crossbar, but with goalkeeper Ukra Pardo prostrate in his goalmouth, the same player contrived to volley wide of the empty target.
Zenit were pushing, and Bukharov was again within inches of scoring, but his toe-poked effort was hooked from under the bar by Nuno Morais, then moments later Danny's measured shot was palmed over by Pardo.
The away side were now desperately clinging on to the point they needed to progress, with Zenit conversely desperate to ensure their own passage to the last 16 before the final matchday.
But the match ended goalless, leading to scenes of celebration on the APOEL dugout, who could celebrate being unquestionably the surprise package of this season's competition. Zenit remain in a strong position, however, and go through anyway if Shakhtar Donetsk defeat Porto later on Wednesday evening.