Zenit handed 3-0 defeat for breaking rules
The FA's disciplinary committee also fined Zenit 200,000 roubles ($7,100) after the Russian champions failed to include at least one player under the age of 21 in their line-up for Sunday's game in St Petersburg, which ended in a 1-1 draw.
The defeat drops Zenit from second to fifth place with seven points from four matches while CSKA, also on seven points, move into third spot, two points behind surprise league leaders Volga Nizhny Novgorod with a game in hand.
Zenit's Italian coach Luciano Spalletti admitted he had ordered his staff to omit such players from the team's line-up because he felt they were not good enough to face CSKA.
Spalletti said he was willing to pay the fine for breaking the rule but was unaware it would also cost his team the points.
Zenit later fired former Russian international Vladislav Radimov, who as the club's administrator was responsible for filling in the names in the team's line-up.
Disciplinary committee chairman Alu Alkhanov said Spalletti had acted in an "unethical" manner and should face a hearing.
Zenit said they had made a mistake and would not appeal.
It was not the first time big spenders Zenit, backed by Russian energy giant Gazprom, have fallen foul of the league rules. Last week, Zenit were fined 300,000 roubles ($10,620) for a racist incident targeting former Brazil full-back Roberto Carlos in a league match against Anzhi Makhachkala last month.