According to Cap Friendly, a salary-tracking website, the deal also includes a 10-team no-movement clause in the final season.
Canucks general manager Patrik Allvin announced the agreement with their pending restricted free agent on Friday.
"We're very happy to have worked out a new deal for Brock," Allvin said in a news release. "He is a very talented player and has been an effective goal scorer throughout his entire career. We look forward to seeing his game progress in the years to come. Now that his contract is in place for three seasons, Brock can shift his entire focus to his on-ice performance."
Boeser, 25, is coming off a difficult season, both on and off the ice. He struggled out of the gate under former coach Travis Green but had a second-half resurgence when Bruce Boudreau took over in December. Boeser finished with 23 goals and 46 points in 71 games.
When the season ended, Boeser told reporters that concerns over his father Duke's declining health had an impact on his performance. Duke died in May after being treated for cancer and Parkinson's disease.
Vancouver drafted Boeser 25th overall in the 2015 NHL Entry Draft to be a foundational piece of the future. Given his status as a pending RFA with no contract, Boeser was the subject of trade rumors amid the Canucks' slow start last season, but a deal never materialized.
Now the winger has earned some long-term security while Vancouver avoids managing a qualifying offer for Boeser later this month.