Roberto Luongo made 38 saves, including 18 in the second period, to improve the Canucks' home record to 12-4-0 this season.
Daniel Sedin's goal put Vancouver ahead 1-0 at 1:44 of the first period. Mason Raymond then scored on a power play at 6:16 to make it 2-0.
Minnesota scored the next two goals to tie the contest at 16:45 but Zanon gave Vancouver a 3-2 edge with 5 seconds remaining in the period.
Kesler scored with 13:16 left in regulation to put Vancouver up 4-2. Havlat pulled Minnesota to within one with 1:06 to play, but the Wild could not get past Luongo again despite pulling Harding in favor of a sixth attacker.