Eddie Lack stopped 28 shots for the Canucks, who lost their second straight on the road.
Hertl opened the scoring at 10:37 of the first period, redirecting a shot by Scott Hannan. Boyle's goal came two minutes later. Thornton scored at 11:21 of the second period directly after Couture won a faceoff during a power play. Couture added a power-play goal with a minute left in the period.
Hertl, who has a team-leading three goals in the preseason, scored his second goal at 2:25 of the third.
"There's great competition," Sharks coach Todd McLellan said. "It can't be a comfortable camp for everyone. We can't keep all of these guys."
|Tomas Hertl (1) Tip-in - ASST: Scott Hannan (1), Joe Thornton (1)|
1 - 0 SJS
|Dan Boyle (1) Wrist shot - ASST: Tyler Kennedy (1), Joe Pavelski (1)|
2 - 0 SJS
|PPG - Joe Thornton (1) Wrist shot - ASST: Patrick Marleau (1), Logan Couture (1)|
3 - 0 SJS
|PPG - Logan Couture (1) Wrist shot - ASST: Joe Pavelski (2), Dan Boyle (1)|
4 - 0 SJS
|Tomas Hertl (2) Wrist shot - ASST: Brent Burns (1), Joe Thornton (2)|
5 - 0 SJS
|Power Play %||19.3%||21.6%|
|% on Road||17.3%||19.5%|
|% at Home||21.1%||23.8%|
|Ryan Kesler Boarding - 2 min against Matt Nieto|
|Matt Pelech Fighting (maj) - 5 min against Tom Sestito|
|Tom Sestito Fighting (maj) - 5 min against Matt Pelech|
|Tom Sestito Unsportsmanlike conduct - 2 min against Matt Pelech|
|Matt Pelech Unsportsmanlike conduct - 2 min against Tom Sestito|
|Andrew Alberts Roughing - 2 min against Tommy Wingels|
|Bo Horvat Hooking - 2 min against Jason Demers|