Justin Abdelkader and Gustav Nyquist scored in regulation for Detroit, which has won four of five. Jimmy Howard stopped 40 shots before denying Elias Pettersson, Nikolay Goldobin and Bo Horvat in the tiebreaker.
Pettersson and defenseman Ben Hutton scored for Vancouver, which had its three-game winning streak snapped. Jacob Markstrom made 28 saves.
Nyquist tied the game at 2 just 1:37 into the third period. His shot went off Markstrom's pad and in off the leg of Canucks defenseman Troy Stecher for his second goal.
Abdelkader's power-play goal put Detroit on the board and made it 2-1 with 6:15 left in the second. He put in a loose puck from the slot for his third of the season.
Hutton's third goal with 8:39 remaining in the middle period gave the Canucks a 2-0 advantage. Hutton beat Howard with a screened wrist shot from the left point.
The Red Wings challenged that the play was offside going into the zone, but the goal was upheld.
Detroit had an apparent goal by Martin Frk reversed on a challenge by Vancouver at 5:36 of the second. Frk took a long pass at the Canucks blue line for a breakaway and beat Markstrom with a slap shot from the right circle. But the Canucks challenged that the play was offside and replays showed Frk was in the Vancouver zone before the puck, and the call was reversed.
Pettersson gave Vancouver a 1-0 lead with 6:21 left in the first period on a slap shot from the top of the left circle off the rush. The rookie center has 10 goals.
NOTES: Vancouver RW Brock Broeser missed the game with a groin injury. He was replaced in the lineup by LW Brendan Leipsic. . Detroit recalled C Christoffer Ehn from Grand Rapids of the American Hockey League. Ehn had an assist in nine games with the Red Wings earlier this season. ... The Red Wings were without D Jonathan Ericsson (undisclosed), forward Andreas Athanasiou (leg), C Frans Nielsen (concussion) and forward Thomas Vanek (lower body) due to injuries.
Canucks: At the Boston Bruins on Thursday.
Red Wings: Host the New York Rangers on Friday.