Evgeni Malkin scored and Stuart Skinner made 28 saves for the Penguins (26-14-11), who swept their four-game road trip and have points in seven straight games (5-0-2).
Jake DeBrusk and Teddy Blueger scored for the Canucks (17-30-5), who have lost two in a row since ending an 11-game losing streak, and are 1-11-2 in their past 14. Kevin Lankinen made 25 saves.
Egor Chinakhov appeared to open the scoring for Pittsburgh at 7:47 of the first period when he finished Malkin's pass from along the goal line. However, Vancouver challenged the play for offside, and the call was reversed after a video review.
Conor Garland then appeared to put the Canucks ahead 1-0 with six seconds left in the first period with a slap shot from the top of the right face-off circle past a screened Skinner, but officials waved it off because of goaltender interference against Blueger.
Malkin did give the Penguins a 1-0 lead at 5:24 of the second period. Chinakhov fed the puck to Tommy Novak, who started a rush down the right side before sending a cross-ice pass to Malkin, who beat a sprawling Lankinen with a wrist shot over the blocker. It was Malkin's third goal in as many games.
Kindel made it 2-0 at 8:41 of the second period by redirecting Ryan Shea’s pass in from the top of the crease, and scored again at 17:22, one-timing a pass from Justin Brazeau through the legs of Lankinen from inside the top of the right face-off circle to make push the lead to 3-0. They were the first goals in 20 games for the 18-year-old rookie forward from Coquitlam, British Columbia, after scoring eight in his first 28 games.
DeBrusk cut the deficit to 3-1 at 6:29 of the third period by banking a rebound in off Pittsburgh forward Connor Dewar from a sharp angle after Skinner robbed Elias Pettersson on a rebound.
Blueger brought Vancouver to within 3-2 at 14:00 when Filip Hronek’s one timer from the point pinballed off Liam Ohgren in front before bouncing off Blueger atop the crease and past Skinner.
Skinner made a diving stop on Brock Boeser's shot from the left of the net with 52 seconds remaining to preserve the lead.