Terms were not released, but sources told ESPN.com's Pierre LeBrun that he gets a three-year, $12 million deal.
A backup to Roberto Luongo last season, Schneider would have become a restricted free agent on Sunday.
"Cory has displayed tremendous poise and professionalism since joining our organization," general manager Mike Gillis said in a statement. "He has proven himself as a leader on and off the ice and has shown an unwavering commitment to being the best at his position."
The Canucks reportedly have been trying to trade Luongo in order to make Schneider the starter.
Schneider had a 20-8-1 record with a 1.96 goals-against average and .937 save percentage in 33 appearances last season. He replaced Luongo for the final three games of the Canucks' loss to the eventual Stanley Cup champion Los Angeles Kings in the Western Conference quarterfinals.