Zenit return star striker
The 50-cap Russian has been sold after two seasons with Dynamo, where he scored 23 goals in his 58 appearances for the club.
The terms of his four-year contract, as well as the cost of the deal, haven't been disclosed.
Zenit was Kerzhakov's first big club, where he took his first steps along with another former Zenit star, Andrey Arshavin.
He left for Sevilla in 2006, where he was part of the UEFA Cup winning squad, and also lifted the Copa del Rey and the Spanish Supercup, before returning to Russia.