Despite throwing three straight interceptions in the first half, the San Francisco 49ers on Monday dominated the play clock, controlling the ball for 37:42 in their 20-9 win over the Carolina Panthers.

That’s their third-best time of possession of the season, behind only a Week 5 overtime win against the Los Angeles Rams (40:04) and a Week 1 win over the Seattle Seahawks (37:58).

They also emerged from the game relatively unscathed. Kyle Shanahan reported one injury afterward, defensive end Sam Okuayinonu’s ankle sprain in the second quarter. Defensive end has taken a heavy hit already this season with Nick Bosa and Mykel Williams out for the season with ACL tears and Robert Beal Jr. currently in the concussion protocol.

The 49ers offense played 70 snaps versus 46 for the defense. Here’s how the individual snaps were divided:

Quarterback: Brock Purdy 70

Purdy was 17-for-19 for 141 yards and a touchdown on throws that traveled from 0 to 10 yards. On throws beyond 10 yards? Yeesh. He was 1-for-7 for 25 yards and three interceptions. That gave him a 2.38 passer rating for anything even moderately down the field.

Running back: Christian McCaffrey 58, Kyle Juszczyk (fullback) 30, Brian Robinson Jr. 12, George Kittle (H-back) 3

Before the game, McCaffrey had a brief exchange with fellow 1,000/1,000-yard member Roger Craig, then continued his march toward becoming the only player to have 1,000 rushing yards and 1,000 receiving yards in different seasons. McCaffrey finished with 142 combined yards, the 10th time he’s gone over the 100-yard mark in that category this season. Should he play in all 17 contests, he’s on pace to finish with 1,128 rushing yards and 1,112 receiving yards.

McCaffrey ranks 10th in the NFL in both receiving yards and rushing yards. He’s first in combined yards.

A couple of 1,000/1,000 guys say hello before today’s game. Now all we need is Marshall Faulk. pic.twitter.com/xKGFkFvIpk

— Matt Barrows (@mattbarrows) November 25, 2025

Wide receiver: Jauan Jennings 63, Ricky Pearsall 53, Demarcus Robinson 38, Kendrick Bourne 6, Skyy Moore 5

What prompted Panther safety Tre’von Moehrig to punch Jennings below the belt late in the game? Pancakes, that’s what.

Jennings has a reputation as a relentless blocker, and considering the 49ers called 22 run plays in the second half, he had plenty of opportunities to practice his craft. He recorded two pancake blocks in the game, one against safety Nick Scott in the third quarter and the second on Moehrig in the closing minutes. Moehrig responded by getting up and taking a swing at Jennings’ privates.

“That’s when he did it — when I pancaked him,” Jennings said.

Moehrig has been suspended one game for his actions; Jennings might be fined later this week but was not suspended for swatting Moehrig after the game.

Meanwhile, Bourne continues to lead the 49ers’ wide receivers in receiving yards, but for how long? His six snaps were a season low and it was the second straight game in which he wasn’t targeted. Bourne has 482 receiving yards, Jennings is closing in with 419.

Tight end: Kittle 61, Luke Farrell 19, Jake Tonges 2

Kittle, who’d caught every pass in his direction in the previous three games, caught 6 of 10 targets for a team-best 78 yards Monday. Two were well over his head and he also dropped a pass, his first drop of the season.

Offensive line: Colton McKivitz 70, Dominick Puni 70, Jake Brendel 70, Trent Williams 70, Spencer Burford 35, Ben Bartch 35

The offensive line got high marks in the run game — especially on McCaffrey’s well-blocked 12-yard touchdown in the third quarter — and even higher marks in pass protection. The Panthers had no sacks, one quarterback hit and eight total pressures. San Francisco’s offensive line has surrendered eight or fewer pressures in three of its last four games. McKivitz had his first clean sheet of the season.

QB pressures allowed:

Williams 3
Brendel 2
Bartch 1
Burford 1
Puni 1

Defensive line: Bryce Huff 35, Keion White 29, Kalia Davis 26, Jordan Elliott 22, Clelin Ferrell 21, Alfred Collins 21, CJ West 16, Okuayinonu 15

The 49ers had just one sack — Ferrell’s in the fourth quarter — but had 14 pressures and were able to take Bryce Young out of his comfort zone throughout the evening. Huff led the way with five pressures, giving him 35 on the season. Per Pro Football Focus, Huff’s 17.7 win percentage ranks 11th among defensive ends who have played 10 or more games this season.

For the second straight game, rookie West played ahead of veteran Kevin Givens, who was a healthy scratch. West had one quarterback pressure, his fourth of the season.

Quarterback pressures:

Huff 5
Ferrell 3
Davis 2
Okuayinonu 1
Upton Stout 1
West 1
White 1

Linebacker: Dee Winters 46, Curtis Robinson 46, Luke Gifford 1

Robinson didn’t shine in his first start at middle linebacker, finishing with a game-high three missed tackles and the lowest grade from PFF — 32 — of anyone who played Monday. The backup middle linebacker was Jalen Graham, who was elevated from the practice squad but was limited to special teams.

With the 49ers favoring either their nickel or big nickel packages Monday, the team’s strongside linebacker, Gifford, played only one snap — the goal-line play on which Ji’Ayir Brown intercepted Young in the back of the end zone.

Cornerback: Deommodore Lenoir 45, Renardo Green 39, Stout 27,  Darrell Luter Jr. 6

Stout is tied for second on the team in missed tackles this season — not great for a part-time player — but he had a strong outing against the Panthers, finishing second on the team in tackles with no missed tackles. He allowed three catches in five targets (one pass breakup) for 22 yards.

Safety: Brown 46, Malik Mustapha 46, Jason Pinnock 19

Brown and Msutapha had, by far, their best game as the team’s starting safety duo. Brown had two interceptions, the first coming on a play in which he dissuaded Young from running the ball toward the goal line, then turned around and intercepted Young’s pass in the back of the end zone. Mustapha, meanwhile, led the team with seven tackles. Pinnock? He didn’t fare quite as well considering he had two missed tackles in his 19 snaps.

Tig said NOPE 🙅‍♂️

📺: ESPN
NFL+ // https://t.co/KTh0i4oaLh pic.twitter.com/qexXmNgybi

— San Francisco 49ers (@49ers) November 25, 2025

Special teams: Gifford 16, Farrell 15,  Siran Neal 14, Luter 14, Marques Sigle 14, Nick Martin 11, Tonges 10, Chase Lucas 10, Isaac Guerendo 9, Matt Gay 9, Ferrell 8, Graham 7, Moore 7, Jon Weeks 5, Thomas Morstead 5, Collins 5, Brown 5, C. Robinson 5, White 5, McKivitz 4, Puni 4, Austen Pleasants 4, Matt Hennessy 4, Burford 4, Bartch 4, Davis 3, Elliott 3, B. Robinson 3, Okuayinonu 2, Winters 2, Huff 2, Green 2, Lenoir 2, Mustapha 2, Juszczyk 1

After playing 14 defensive snaps last week, Martin had zero on Monday. He did, however, have two special teams tackles, one of them a wicked strike on the Panthers kick returner that jarred the ball loose. Carolina recovered the fumble.

Gay was good on his two field goal attempts and his two extra point attempts. Two of his kickoffs went into the end zone for touchbacks but another two landed perfectly — just shy of the goal line. The Panthers averaged just 24.7 yards on their three returns.