The 32-year-old had been on loan at Zenit for a spell last season after seeing his chances limited at Arsenal, where he had been the club's then recording signing in a £15million deadline day deal in February 2009.
Arshavin, who has agreed a two-year deal, said on the Zenit website: "I am very glad that it happened. I am glad to get back to the city. It's good to wear the Zenit shirt. I just want to play football."
"Of course, I want to return to the national team. I do not know whether being at Zenit helps this or not. I just want to play football. And I want to do it in my hometown."
Arshavin made 144 appearances for Arsenal, scoring 31 times over the course of five seasons - including all four against Liverpool at Anfield in April 2009.