Dieumerci Mbokani's first-half goal kept Anderlecht's Champions League hopes alive as they finally earned their first win in Group C.
Defeat in St Petersburg two weeks ago had left the Belgian champions bottom of the group and needing victory at the Stadium Constant Vanden Stock to have any realistic chance of reaching the last 16.
And Mbokani's neat finish coupled with a solid defensive showing lifted them ahead of their opponents to third in the standings, a point behind second-placed AC Milan after the Italians drew with Malaga.
Zenit's top scorer Hulk missed the match due to injury, while Anderlecht were without the suspended Marcin Wasilewski.
Belgium defender Nicolas Lombaerts, keen to make an impression in his homeland, volleyed goalwards in the fifth minute but Silvio Proto parried.
Sergei Semak then fired wide before Mbokani, playing in a mask to protect a broken nose, had Anderlecht's first chance but saw his header saved by Viacheslav Malafeev.
And it was the DR Congo international who opened the scoring in the 17th minute, exchanging passes with Sacha Kljestan and finishing with a deft right-footed chip.
It was Anderlecht's first goal in the group, and Malafeev dived to tip Milan Jovanovic's 20-yard left-foot drive around the post midway through the half as the home side began to take control of the match.
Zenit's second Belgian, midfielder Axel Witsel, was booked before half-time for a foul on Cheikhou Kouyate.
Searching for inspiration, the visitors sent on Portugal playmaker Danny - who only returned to action on Friday following a cruciate ligament injury - in place of Semak at half-time.
Proto denied Witsel an equaliser when the tall midfielder volleyed goalwards from 12 yards.
Lucas Biglia tried to create a second goal for Anderlecht with an excellent run into the box, but his cross was cleared behind by Tomas Hubocan.
They came close to killing the game off in the 82nd minute when Mbokani flicked on Jovanovic's pass and Oleksandr Yakovenko fired past Malafeev but saw his effort rebound to safety off the crossbar.
Anderlecht held on at 1-0, though, to record their first-ever win in the group stage and keep themselves in contention for the knockout stages.