SAN JOSE -- Erik Karlsson had an assist in his return for the San Jose Sharks in a 3-2 win against the Vancouver Canucks at SAP Center on Saturday.
Karlsson had missed the previous nine games because of a groin injury.
"He's got a lot of skill," Sharks captain Joe Pavelski said. "Great skater. I'm sure he's only going to get better moving forward. He was moving at a pretty good clip for us before that happened. It's one of those things down the stretch, if we can stay healthy and everyone can get rolling, it will help us out for sure."
[WATCH: All Canucks vs. Sharks highlights]
Timo Meier, Logan Couture and Pavelski each had a goal and an assist, and Martin Jones made 32 saves for San Jose (35-17-7), which has won seven of its past eight games and is 12-0-1 in its past 13 games against Vancouver.
The Sharks are tied with the Calgary Flames for first place in the Western Conference.
Video: VAN@SJS: Pavelski puts in rebound to give Sharks lead
"I thought it was a good game," Sharks coach Peter DeBoer said. "They're a scrappy team. They're fighting for their playoff life. I thought they played that way. They came with a lot of energy and desperation and made it hard on us."
Antoine Roussel and Brock Boeser scored, and Jacob Markstrom made 23 saves for Vancouver (26-27-7), which has lost three of its past four games and is one point behind the Minnesota Wild for the second wild card into the Stanley Cup Playoffs from the West.
"I thought our team played a [heck] of a game tonight," Canucks coach Travis Green said. "It's definitely frustrating. I thought our guys deserved a better fate than we got tonight."
Pavelski gave the Sharks a 3-2 lead at 13:06 of the third period on a rebound in the slot after Meier's initial shot bounced off of Markstrom's mask.
"The rebound comes out to me and the goalie's out of the net," Pavelski said. "It's a fun moment to score those big goals. You could tell there's a lot of energy in the building."
Markstrom said he couldn't locate the puck after it hit him.
"And then it went to a goal-scorer right there," Markstrom said. "He's got a lot of goals and a lot of goals he's just at the right spot at the right time, and once again he was there."
Meier gave the Sharks a 1-0 lead at 3:45 of the first period, taking a pass from Karlsson from below the goal line and scoring a power-play goal from the slot.
"Great play there from him to find me in the slot," Meier said. "The goalie was still kind of moving so I tried to get it on net as quick as possible."
Roussel tied it 1-1 at 4:42, taking a stretch pass in the neutral zone from Alex Biega and beating Jones glove side on a breakaway.
"A bounce here and a bounce there and it could've been a different story tonight, we could've been the team with the lead late in the third, but it still stings knowing the playoffs are so close," Roussel said.
Couture gave San Jose a 2-1 lead at 11:08 of the second period on a 3-on-2, deking Markstrom before skating in the low left circle and scoring short side.
Video: VAN@SJS: Couture beats Markstrom on odd-man rush
"At first I was going to drive the middle to open up the seam for [Meier], but [Pavelski] yelled at me and luckily I brought my head up and saw the puck was coming to me," Couture said.
Boeser tied it 2-2 at 4:31 of the third period on a wrist shot short side from the left circle. The goal was his 100th point in the NHL.
"It wasn't an easy win for us tonight," Meier said. "I thought everybody battled. Especially after the game we had against Washington (5-1 loss on Thursday), we had to come out harder and play a full 60 minutes of our game."
Video: VAN@SJS: Boeser pots wrister to record 100th point
They said it
"We feel we've been playing some good hockey, and it's unfortunate we've come on the wrong side, but I think we've got to stay positive. I think we all believe that we can make this push and hopefully get some bodies back and then continue to push." -- Canucks defenseman Ben Hutton
"I thought [Joe Pavelski] was outstanding tonight. He created that goal and scored it by turning the puck over first and then finishing. He probably blocked four or five shots at key times." -- Sharks coach Peter DeBoer
Need to know
Canucks forward Loui Eriksson played in his 900th NHL game. … Jones is 14-3-0 with a 2.92 goals-against average and .901 save percentage in his past 17 starts. ... The Sharks last lost in regulation to the Canucks on March 31, 2016 (4-2 in San Jose).
Canucks: Host the Arizona Coyotes on Thursday (10 p.m. ET; SNP, FS-A, NHL.TV)
Sharks: Host the Boston Bruins on Monday (10 p.m. ET; NBCSN, SN, NESN, NHL.TV)
Video: Sharks edge Canucks on Pavelski's goal