Zenit, 14 points behind leaders Rubin before the start of the game, ended Krilya's 11-match unbeaten run with two goals from Pavel Pogrebnyak, one either side of a Konstantin Zyrianov strike in the 61st minute.
The 2007 Russian champions and UEFA Cup holders rise to sixth.
Zenit star Andrei Arshavin, whose on-off transfer to Tottenham has dragged on for over a month, was left out of the starting line-up by the club's Dutch coach Dick Advocaat, who said that Arshavin was not in the right frame of mind to play.
Arshavin denied reports that he had flown to London to sign a contract with Tottenham.
"I didn't go to London," he told the Russian media, adding that he was wary about making a prediction regarding his future.
Zenit face Manchester United in the Super Cup in Monaco on August 29.
Rubin, leaders for much of the season, beat near-Moscow side Khimki 2-0 on Saturday with goals by Turkish striker Hasan Kabze and Ecuadorian Christian Noboa.
After the Rubin match, Moscow rivals Spartak and Dynamo clashed at the Luzhniki, with Spartak's Artem Dzyuba cancelling out an Alexander Kerzhakov strike as the two sides drew 1-1.
After 19 games, with 11 to go, Rubin are now top with 39 points. Dynamo are second with 35. Spartak Moscow are in third points with 30 points.
In other results, Terek Grozny beat Lokomotiv Moscow 2-1 and Shinnik, who last week won 3-1 at Zenit, lost to Siberia's Tom Tomsk 1-0.
Another Siberian side, Amkar, have the chance to rise to third if they beat Moskva later on Sunday.
In other soccer news, Dutch legend Frank Rijkaard, a former Barcelona manager and Ajax and AC Milan player, has reportedly turned down a $10-million-a year offer to manage Spartak Moscow. The Moscow club dismissed their manager, Stanislav Cherchesov, after a recent 4-1 home defeat to Dynamo Kiev in the Champions League.