That’s back-to-back 40-point games for the 49ers with Brock Purdy totaling ten touchdowns. Adding the context of no George Kittle and Trent Williams leaving the game after one snap, Purdy and Kyle Shanahan’s
offensive performance is even more impressive. It’s hard to envision the 49ers offense keeping up this pace, especially when the defenses get tougher, but the 49ers have beaten the Los Angeles Rams and Bears and have a chance to sweep Seattle with Week 18’s matchup for the number one seed and NFC West title.
Let’s review the snap counts and grades from Sunday night’s win, according to Pro Football Focus.
Offense
Quarterback
Brock Purdy 72 (81.9)
Purdy is on such a heater that even his mistakes are touchdowns. Sorry, couldn’t resist. It can be argued that this latest stretch of football is Purdy’s best as the 49ers quarterback. Sure, 2023 was magical, but given the missing players and how much Purdy is lifting this offense, I’ll lean with this stretch, and it doesn’t feel like a prisoner of the moment take.
24/33, 303 yards, 9.2 YPA, three touchdowns, two rushing touchdowns, and an interception. Not to mention an NFL QB rating of 118.6. The 49ers will need another huge performance Saturday night (seriously, what the hell are you doing, NFL?) against a formidable Seattle defense. Kittle should be back, but Williams is probably in danger of missing Saturday, given the injury and short turnaround.
Running Back
Christian McCaffrey 61 (81.1)
Kyle Juszczyk 39 (58.0)
Brian Robinson, Jr 11 (74.4)
If you had a Christian McCaffrey is washed, take, throw it in the trash, and apologize to the man. Actually, just look in the mirror and apologize. Another 2,000-yard scrimmage season and the longest run of the season with his 41-yard rush, which looked just like the vintage CMC. With 140 yards on 23 rushes for 6.1 YPA and another touchdown, McCaffrey continues to be the engine of all the skill position players around Purdy. Oh, 102 yards were after contact.
Juszczyk was the recipient of the ridiculous Purdy scramble and touchdown throw. Even Juice was shocked the ball landed safely in his chest after all of Purdy’s scrambling.
Wide Receiver
Jauan Jennings 65 (57.7)
Ricky Pearsall 58 (67.4)
Demarcus Robinson 25 (68.3)
Kendrick Bourne 19 (74.6)
Skyy Moore 4 (63.8)
Ricky Pearsall led all 49ers receivers with five catches for 85 yards and looked great running his routes. He even shook off an early limp to continue to deliver on Sunday night. The 49ers will need his separation at the position down the stretch. Speaking of separation, Jauan Jennings has to run a better route and seal off Jaylon Johnson on the first throw of the game. Sure, maybe you don’t want Purdy throwing there, but Jennings leads the team with seven interceptions when targeted. In the end, all was forgiven as his second catch went for a touchdown.
Tight End
Jake Tonges 50 (86.7)
Luke Farrell 27 (91.8)
Brayden Willis 1 (60.0)
Jake Tonges has been such a huge part of the 49ers’ season. Whenever his number is called, he steps up. He is a one-for-one replacement for Kittle in the passing game. Unfortunately, the two-tight-end set dream is dead for Kittle and Tonges as Shanahan prefers Kittle and Farrell for blocking purposes. Tonges is the unsung hero of the 49ers’ season in 2025. Tonges led all 49ers with seven catches and added 60 yards and a touchdown.
Offensive Line
Dominick Puni 72 (72.3)
Spencer Burford 72 (81.5)
Colton McKivitz 72 (77.5)
Jake Brendel 72 (73.4)
Austen Pleasants 71 (70.7)
Trent Williams 1 (60.0)
It’s never a good thing when a starter goes down on the offensive line. It’s even worse when that starter is a future Hall of Famer and has been healthy all season. But all things considered, Austen Pleasants was solid filling in for Williams. He did allow the only sack, but for the most part, he was very good, especially after being thrown into the fire.
The 49ers collectively allowed five pressures, four hurries, and a sack. One of the pressures allowed was charged to Christian McCaffrey, with the other four going to Pleasants (two), Burford, and Puni. Colton McKivitz finished with a clean sheet—excellent job by the 49ers’ offensive line.
Defense
Defensive Line
Sam Okuayinonu 41 (43,6)
Bryce Huff 34 (41,2)
Clelin Ferrell 32 (47.4)
Kalia Davis 31 (43.9)
Alfred Collins 29 (51.4)
Keion White 28 (82.4)
Jordan Elliott 28 (68.8)
Yetur Gross-Matos 24 (47.4)
CJ West 20 (62.8)
Ok, let’s start with the positives. Keion White has been solid as a disruptor on the inside and was the highest graded pass rusher (81.6) and pass rusher in true pass sets (91.2). Yetur Gross-Matos led the team with three pressures on only 19 pass-rushing snaps. The defensive line generated 16 pressures, but only hit Caleb Williams twice.
Unfortunately, Bryce Huff’s impact dwindles with the more snaps he’s on the field, but at this point, the 49ers have no choice. This is just the state of the 49ers’ defense and pass rush. The 49ers have 18 sacks on the season. Saturday will be their 17th game.
Linebacker
Dee Winters 66 (51.3)
Tatum Bethune 66 (73.8)
Luke Gifford 15 (49.7)
It was good to see Bethune back in the lineup, and he led the team with ten tackles. Winters was right behind him with six tackles. The two linebackers missed one tackle, which was charged to Bethune. As far as coverage goes, Bethune earned a 79.3 coverage grade to go with his team-high run defense grade of 79.5. Both linebackers combined for six defensive stops, with three each.
Secondary
Malik Mustapha 66 (62.4)
Ji’Ayir Brown 66 (37.5)
Deommodore Lenoir 66 (64.5)
Darrell Luter, Jr 64 (62.5)
Chase Lucas 25 (36.8)
Upton Stout 17 (54.4)
Jason Pinnock 8 (49.9)
Ok, let’s start with the positives again? Lenoir and Luter weren’t tested much in coverage, with the two combining to allow three catches for 30 yards total. The problem is everyone else in the secondary, but especially the safeties. Ji’Ayir Brown was dinged for the long touchdown to Luther Burden, but watching back, it looked like Malik Mustapha sank too low, and it forced Brown to go cover his route from the other hash. Either way, if it is a straight coverage bust or straight up coverage, it’s a problem in the secondary.








