Russian Premier League Wrap: Zenit close gap as Lokomotiv draw derby
Andre Villas-Boas' men had to come from behind after Maxim Kanunnikov had given the home side a 10th-minute lead on Saturday, but two goals in five minutes just after the break from Domenico Criscito and Aleksandr Kerzhakov saw them take all three points.
That victory, combined with leaders Lokomotiv Moscow's 0-0 draw with city rivals Spartak on Saturday, means the 2012 champions sit just one point of the summit.
Dinamo Moscow are now third following their 3-1 victory at Tom Tomsk on Saturday.
They too had to come from behind as Vladimir Rykov gave Tomsk a 48th-minute lead, but the visitors roared back through Aleksandr Kokorin, Kevin Kuranyi and Alexey Ionov to extend their unbeaten run to six matches.
CSKA Moscow level on points with Dinamo after picking up their third straight league win on Monday.
It was a mixed day for CSKA playmaker Alan Dzagoev, who added to Zoran Tosic's fifth-minute opener before being sent off in the 41st minute.
The hosts made light of their numerical disadvantage, though, Pontus Wernbloom adding a third with 21 minutes to go to consign struggling Volga to their sixth consecutive league defeat.
Monday's other fixture involving Krylya Sovetov and Terek Grozny was postponed due to heavy snow.
Elsewhere over the weekend, Roman Shirokov scored twice as Krasnodar won 3-1 at city rivals Kuban Krasnodar, bottom club Anzhi's woes continued as they lost 2-1 at Ural, and Rostov picked up a 2-1 win at Rubin Kazan.