The San Francisco 49ers won their second game in a row on Monday over the Carolina Panthers. The offense didn’t struggle to move the ball, but turnovers prevented them from getting north of 30 points.
The defense performed well, and the special teams were consistent. That’s the recipe for a win.
Let’s get into the winners and losers from Week 12.
Winners
The safeties
I’m cheating here because I count “nickel” as a safety. But between Ji’Ayir Brown, Malik Mustapha, and Upton Stout, the 49ers got their best performance from the safety trio all season.
The lone blemish came on a touchdown late in the third quarter, when Mustapha vacated the middle of the field. Other than that, there was a lot to like. The trio combined for eight stops. The aggressiveness was on display all night. Most importantly, there was only one missed tackle between the three. Through the air, there were only 43 yards allowed on 10 combined targets.
Brown had two interceptions, and Stout was this close to hauling in the third. Stout also won on one of his three blitzes. It was the type of performance this trio needed and can build on moving forward.
Bryce Huff
Huff is having the best pass-rushing season of any player not named Nick Bosa that I can recall under Kyle Shanahan. Huff generated four pressures on 24 pass rushes and also drew two holding penalties. Those penalties were as close to sacks as it gets, as they put Carolina behind the sticks and forced the Panthers to punt both times.
The offensive line
The 49ers’ offensive line has been closer to excellent than average. Brock Purdy was only hit once all game, while the running backs were afforded 1.2 yards before contact. Christian McCaffrey’s touchdown run was a thing of beauty, thanks to everybody involved up front:
The backside guard, Dominick Puni, reaches the defensive tackle. The center, Jake Brendel, seals the linebacker and ends up blocking the safety. Ben Bartch, at left guard, also reaches the defensive tackle. Trent Williams does Trent Williams things, and McCaffrey navigates his way to the end zone.
If the 49ers’ offensive line continues to play the way it has during the past month or so, this team has a chance to upset somebody if it gets into the postseason. It’s been their Achilles heel in years past. That is not the case in 2025.
Losers
Brock Purdy
I don’t think Purdy had a bad game because he threw three interceptions. Purdy left throws on the field, beginning with the first drive. He wasn’t processing what the defense was giving him. Instead, the decisions were pre-determined. We went over the interceptions, and the concern there is more about timing than decision-making.
I’m used to watching Purdy manipulate defenders with his eyes. He did not look sure of his reads on Monday night. Again, these aren’t limited to the interceptions, but it’s easier to highlight when there are turnovers.
Despite completing 71.9 percent of his passes, Purdy finished with a -0.15 EPA per dropback and a -3.8 completion percentage over expectation. All while being the third-least pressured quarterback of Week 12.
You’re not going to win many games when your quarterback is off. That was the case for the 49ers. Thankfully, they played the Panthers. But if Purdy plays with this kind of timing and is a step late again, the Niners won’t be as fortunate.
Jason Pinnock
Your weekly reminder that the 49ers coaching staff is comfortable with veterans who have no future on this team making mistakes, but do not want their rookies to do the same. If Pinnock can play big nickel, why can’t Nick Martin or Marques Sigle?
Pinnock missed two tackles in 19 plays. He was targeted three times and allowed two first downs. Had the throw been accurate on the third target, it would have been another first down. I struggle to see the value in Pinnock weekly, and Week 12 was no different.
Curtis Robinson
The drop off from Tatum Bethune to Curtis Robinson was noticeable. Robinson was supposed to be an upgrade in coverage, but he allowed all three of his targets to be completed and surrendered a pair of first downs. The issue there was that 21 of the 35 yards came after the catch.
One play after Martin forced a fumble on the kickoff, Robinson whiffed on a tackle. Robinson ended up with three missed tackles and did not look the part at linebacker. Not to be too harsh, as he’s a third-stringer, but the results were not pretty.
Winners
Renardo Green
Whether you believe the touchdown was on Green or not, he continues to give the 49ers defense a chance. Robert Saleh continues to funnel targets Green’s way. Green was targeted seven times, but allowed only two receptions. He had a pass breakup on 3rd & 6 against Tet McMillan. That forced a punt and eventually led to the 49ers building on their lead.
Renardo has been ol’ reliable this year for the defense.
George Kittle
Carolina had no answers for Kittle early in the game. He finished with 78 yards receiving on nine targets, with 44 of those coming after the catch. Four of those receptions resulted in first downs. Even with the return of Ricky Pearsall, Kittle remains the Niners’ go-to target.
Special teams
The 49ers didn’t allow a kickoff return of more than 30 yards. Carolina cannot say the same, as Skyy Moore jump-started a drive with a 43-yard return. The one punt return the Panthers had was only six yards. They also missed a field goal. Matt Gay was perfect on the evening, going 2-for-2. The 49ers won every phase of this game, and their special teams is becoming increasingly reliable, a testament to Brant Boyer.
Robert Saleh
As we head into December, these become “interview” games for Saleh. Everybody knows how much talent the 49ers have on the Injured Reserve.
The Panthers went 0-2 in the red zone, turned it over twice, and did not have a receiver with over 40 yards receiving. Tet McMillan was held in check. It wasn’t as if Bryce Young was facing a ton of pressure. The routes he wanted to throw were covered. Saleh deserves all of the credit in the world for the job he’s done this season. Monday night was just another example.











