With both sides needing a win to resurrect their failing European challenges, a penalty from Aleksandr Kerzhakov in the second half, given after a foul by Milan Jovanovic, was enough to send the Russian outfit to a victory that they barely deserved.
Anderlecht will rightfully be disappointed with the result, as they fashioned the best chances throughout the match, and fell victim to a momentary lapse at the back to leave them with one point from their opening three games.
Zenit now move off the foot of the table with the win and sit three points behind Group C leaders Malaga, who square off with AC Milan later on Wednesday.
With so much at stake, it was perhaps no surprise to see the match take a while to get off the ground, as both sides seemed determined to prevent a goal rather than score themselves.
The first opening went Anderlecht’s way after 12 minutes, as a delightful one-two between Tom de Sutter and Jovanovic saw the latter drag wide of the far post after going one-on-one with Vyacheslav Malafeev.
That chance seemed to spark Zenit forward, and a stinging free-kick from Hulk was whipped inches wide of the far post, with two of his team-mates close to getting a touch.
The hosts were able to sustain pressure in the opposition half for large spells, but their monopolisation of the ball did not result in any clear-cut chances, as their attack seemed woefully out of sync.
In fact, the best chance of the first half fell to Anderlecht after 26 minutes, when Guillaume Gillet turned Domenico Criscito inside out to find himself in point blank range, only to slide the ball across goal when it was begging to be hit.
That was about as close the match got to a goal before the break, as both teams were extremely laboured in their play, despite the 0-0 scoreline doing more harm than good to their flailing chances of making the knockout stages.
Anderlecht came close four minutes after the restart, after good work from De Sutter out wide saw him tee-up Jovanovic inside the area, but the Serbian, instead of attacking the cross, elected to go to ground in futile hopes for a penalty.
But the second half followed the pattern of the first, with both teams lacking any sort of initiative in attack, as goalmouth action remained elusive.
There was finally some action of note just past the hour mark, as a testing free-kick from Lucas Biglia was punched clear by Malafeev moments before Kanu was able to connect.
Not long after, substitute Vladimir Bystrov cut into space just inside the area, but his shot was fired disappointingly over the bar.
But Zenit were handed a huge stroke of luck with 18 minutes remaining, after Anyukov was hauled down by Jovanovic while attacking a free-kick, leaving the referee with little choice but to award a penalty.
Most of the players were unaware that the infraction had been called, but after matters had settled, Kerzhakov stepped up to send Proto the wrong way and give the home side a lead they scarcely deserved.
Anderlecht pressed forward in the time that remained, but despite a few spells of pressure, they could not strike a telling blow as Zenit ran off with the points, though with Malaga and AC Milan set to meet later in the day, their task in Group C remains monumental.