Zenit edged closer to their first Russian Premier League title since 2012 with a comprehensive 3-0 victory over Rostov, while Krasnodar were held by struggling Amkar Perm.
Andre Villas-Boas' side have finished runners-up in the past two seasons, but will be crowned champions next weekend providing they at least match Krasnodar's result.
Having struggled to break down Rostov, Zenit finally found their way through in the closing minutes of the first half as Oleg Shatov and then Hulk put the leaders ahead.
Salomon Rondon wrapped up the victory after 87 minutes and their title hopes were further boosted following Krasnodar's 1-1 draw against Amkar on Monday.
Mauricio Pereyra had kept Krasnodar's outside hopes of catching Zenit alive with the opening goal after eight minutes, but Janusz Gol levelled before Roman Gerus saved a Pereyra penalty to earn Amkar a draw and all but hand the title to Villas-Boas' men.
CSKA Moscow remain in the hunt for second place after a 3-1 victory over city rivals Lokomotiv, the fourth defeat in five proving the end for Lokomotiv boss Miodrag Bozovic, who promptly resigned.
While the title is all but wrapped up, the battle to stay in the league remains wide open, with six teams separated by five points.
Torpedo Moscow picked up a valuable point in a goalless draw with fellow capital club Dinamo, while Ural also earned a draw as they came from behind to draw 1-1 with Ufa.
There was no such joys for Arsenal Tula, though, as they slipped to a third successive defeat, losing 1-0 to Mordovia Saransk, with Damien Le Tallec netting the decisive goal.
Meanwhile, Kuban Krasnodar's winless run was extended to seven games as they were beaten 1-0 by Rubin Kazan, and 10-man Terek Grozny came from a goal down to beat Spartak Moscow 4-2.
Get the best features, fun and footballing frolics straight to your inbox every week.