The 32-year-old midfielder had been expected to leave Arsenal for some time following his fall from the first team in recent seasons.
"I am very glad that it happened," Arshavin told the club's official website. "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 moved to Arsenal from Zenit for £15m in 2009.