Hulk opened the scoring after 18 minutes and Danny made it two shortly before the break.
Axel Witsel, a third big-money foreign import, completed the scoring in the 64th minute as Zenit moved clear of second placed Lokomotiv Moscow, which dropped two points the previous day.
Third-placed Spartak Moscow missed the chance to turn up the heat on the top two as it was held to a goalless draw at home by Terek Grozny.
Rubin Kazan handed bottom side Anzhi Makhachkala another loss as it roared to a 5-1 win.
Mubarak Wakaso put the host in front after 11 minutes and
Alexander Ryazantsev made it 2-0 after half-an-hour.
Ruslan Mukhametshin killed the contest with a third in the 70th minute and, after Islamnur Abdulavov pulled one back six minutes from time, goals at the death from
Roman Eremenko with a penalty and
Sardar Azmoun sealed a comprehensive win.
CSKA slipped back as it went down 2-0 to city rival Dinamo,
Cristian Noboa (57) and
Aleksandr Kokorin (89) with the second-half goals.
Elsewhere, Kuban Krasnodar twice came from behind to draw 2-2 at home to Rostov.
Balde Ibra cancelled out Artem Dzjuba's opener just after the break and
Djibril Cisse made it 2-2 in the 72nd minute after Dzjuba's second.