Bruins goaltender Tim Thomas makes a pad save on Canucks\' Josh Green. (AP Photo/Winslow Townson)
Patrice Bergeron and Glen Murray each scored power-play goals for the Bruins, who won their second straight and third in four games despite being outshot 39-19 overall and 14-0 in the third period.
Thomas, in his second season as Boston's primary goalie after bouncing around the minor leagues for eight seasons, saved 12 shots in the first period and 13 in the second before winning his eighth game in 11 decisions.
The Canucks' best scoring chances came midway through the third period. Thomas fell down while saving two close-range shots from Taylor Pyatt and Brendan Morrison missed on a rebound from in front of the goal.
Thomas' first shutout came in his 15th career NHL game when he made 44 saves in a 5-0 victory in Ottawa Jan. 30. This was his 69th career game.
Dany Sabourin saved 17 for the Canucks, who lost their second straight after winning all three games during last week's homestand. Sabourin, playing for the first time since Dec. 9 to give Roberto Luongo a night off, dropped to 0-3 on the season and 0-7 for his career.
Two nights after a 7-2 win in Ottawa, Boston continued its strong offensive play in the first period by taking a 2-0 lead.
Bergeron put Boston up 1-0 3:14 in when he retrieved a Marco Sturm pass just outside the crease and fired the puck past Sabourin.
Boston had a 5-on-3 advantage 12:00 into the first and converted 19 seconds later when Glen Murray fired a slap shot from the top of the faceoff circle through a crowd.
The Canucks have lost their last five road games, getting outscored 22-6 over that stretch.
Notes: It was the first meeting in Boston since the Bruins won 2-1 in overtime on Nov. 15, 2003. ... Bergeron has had at least a point in seven straight games. He has four goals and nine assists during that span. ... Savard recorded his 300th career assist. ... Luongo has appeared in 33 of 35 games for the Canucks. ... Vancouver dropped to 2-1-0 against Eastern Conference teams. ... Vancouver left wing Henrik Sedin had a six-game point streak stopped.