The San Francisco 49ers beat the Denver Broncos by double digits at home. After a slow start, the offense finished the game with three consecutive touchdown drives.
But the defense kept the Broncos in their stall all game. They responded well after a shaky fourth quarter in Week 3.
Here are my positional grades for the 49ers’ Week 4 report card.
Quarterback: B
To give you an idea of where Purdy ranked among his peers in Week 4. Hat tip to the Broncos for making things tough on the passing game early on.
It was difficult to tell whether they had the 49ers stumped, if the Niners were the ones making mistakes, or a combination of both. Purdy was hovering around a 50% completion percentage before finishing the game 9-of-10. He didn’t make any of the “wow” plays that we’ve seen so far this season, but it never felt like Purdy needed to.
This never felt like a Purdy game. He didn’t lose or win the game. He scrambled for a first down, ran out of a couple of sacks, and used his legs to find Kyle Juszczyk for a much-needed first down. But Purdy was also on target on only 70% of his throws, which was 17th for the week.
Running backs: B+
Christian McCaffrey made Talanoa Hufanga miss on his first carry. Christian McCaffrey made Talanoa Hufanga miss on his first carry. He had a 10-yard gain on 3rd and 1 in the second quarter, where 90% of running backs gain one yard.
McCaffrey was stuffed four times, but those came when the Broncos had the perfect run blitz on, or in short-yardage/goal-line situations where Zach Allen did Zach Allen things.
McCaffrey finished with a pair of missed tackles and only a 26% success rate, but my eyeballs tell me he ran well. Next Gen Stats has McCaffrey for +7 in rushing yards over expected in Week 4. I feel like that number is low.
Kaelon Black only had six carries. He bounced a run when he shouldn’t have on third-and-short. Black did not pick up the first down. Black looked indecisive on half his carries. It wouldn’t be surprising to see Deebo Samuel see an uptick in carries.
Deebo’s first carry was a 22-yard counter where he ran through Hufanga’s tackle attempt. He took a reverse for 20 yards after Hufanga and cornerback Riley Moss stopped Samuel for a gain of three-ish.
The 49ers trust Kyle Juszczyk to block defensive ends and linebackers. They’ll miss that level of trust, even if it’s only for two games. Juszczyk made himself available on his second reception after sprinting across the field.
That type of effort is not something you can replace.
Wide receivers: C
We will never speak ill of Mike Evans for gutting it out. He had no business being on the field. Yet, Evans still produced like a typical WR1.
As for the rest of the wide receiver room, they have work to do. Let the record show this doesn’t include Deebo, who was more of a running back in this game.
Jacob Cowing’s reverse did not go as planned. He is still running too many Senior Bowl routes that may work in practice, but it’s taking too long to get open within the offense’s structure and timing.
Brandin Cooks found out that the 49ers motions aren’t as easy as they look. He was flagged for an illegal shift, and also had a target go through his hands. On that same play, Cooks drifted on his route.
Jordan Watkins regressed as a blocker. He also strictly ran “clear out” routes. On one play, Watkins didn’t hustle to dig out safety Talanoa Hufanga, and Hufanga made a play at the line of scrimmage. That explains why Watkins only ran nine routes.
The passing game revolves around Evans, and for good reason. Demarcus Robinson is missed over the middle, while De’Zhaun Stribling’s blocking could come in handy for the running backs.
Tight ends: B-
Before George Kittle took a screen to the house, the tight ends were unspectacular. Denver put Patrick Surtain on Kittle to begin the game, which is the ultimate sign of respect. Kittle’s targets were largely underneath, save for a seam pass against Surtain.
Kittle and Luke Farrell only had one pass-blocking snap against Denver. They combined to miss three blocks when the 49ers ran it. Outside of the screen, there were a lot of stalemates where most of the plays didn’t result in a positive or a negative. They did their jobs.
I will say it never gets old watching Kittle manhandle a defensive lineman. That’s what he did on his lone pass-blocking rep. It’s a luxury for the 49ers.
Offensive line: B
Kyle Shanahan may never spend another dime on a left guard if the 49ers continue to get this kind of production from Connor Colby. To give you an idea of Colby’s athletic level, he reached 18.54 miles per hour while trying to chase down Kittle.
Colby allowed a team-high three pressures and had two players he’d want back against the run. But that ignores the other plays where Colby either held his own or, like on one McCaffrey run, drove his man 11 yards downfield.
McCaffrey ran into a stacked box 53% of the time. Denver went out of its way to plug gaps. Hufanga made several plays. Jake Brendel had three negative plays against the run out of 31. Colton McKivitz, Colby, and Dominick Puni had two, while Trent Williams had one.
It’s a preventative position, and each player was just as effective in pass protection. Purdy’s average time to throw was 2.86 seconds, and Denver’s average time to a pressure was 2.61 seconds. Those are great marks for the offensive line.
Zach Allen was a nightmare, as expected. But Nik Bonitto was held in check, and the Broncos didn’t get many, if any, clean wins up front.
Defensive line: B+
When the opposing quarterback isn’t looking beyond ten yards, sacks are hard to come by. Denver came into the season boasting one of the NFL’s best offensive lines. This was easily the toughest test to date for the 49ers.
This was the best Romello Height has looked this season.
As you can see from those clips, Keion White flashed quite a bit, too.
I thought the defensive line was even better on the rewatch.
Denver couldn’t accomplish anything on the ground. J.K. Dobbins had a 27.3% success rate. R.J. Harvey had a 28.6% success rate. Naquan Jones and Sebastian Valdez have been pleasant surprises. Gracen Halton and Osa Odighzuwa have been better than expected against the run, and the latter two continue to generate pressure.
Matt Judon only played 14 snaps. Khalid Kareem was in for 19 snaps. In a dream world, that’s Mykel Williams’ workload next week. But the fact that the Niners didn’t get pushed against the run and won when Denver dropped back should be encouraging since they were without Nick Bosa.
Linebackers: A-
Jaden Dugger only saw the field for 15 snaps. Garret Wallow continues to rotate in occasionally in obvious passing situations for Dre Greenlaw. But Raheem Morris wasn’t going to leave Greenlaw on the sideline for long. Not against the Broncos.
Greenlaw has to be exhausted the day after the game. He had 12 tackles, but he was involved in so many more plays that freed up his teammates. Greenlaw hasn’t impacted a game like this since he returned against the Rams late in the season a couple of years ago.
Greenlaw was great. Fred Warner was better. Warner matched Greenlaw’s aggression, which isn’t easy. Warner broke up a pair of passes, met blocks at the line of scrimmage, and helped set the tone for the 49ers defense. It was the best complementary game of the two this year. Greenlaw was surprisingly effective as a pass rusher. Warner was unsurprisingly dominant everywhere.
Missed tackles led to a couple of first downs, which is why there’s an A-.
Secondary: C
I want to give the secondary credit. I really do. But Bo Nix missed a handful of intermediate throws or throws outside the numbers where he could’ve taken advantage of this group. Even if Nix had time to throw, his eyes took him to the checkdown. It was bad.
Upton Stout had a rough day in coverage, allowing all eight of his targets to be completed for 80 yards. Deommodore Lenoir had a penalty. Jack Jones missed two tackles that led to a first down and a touchdown.
Ji’Ayir Brown and Marques Sigle were aggressive. They both missed a pair of tackles. But their mistakes were limited. I thought each would’ve easily given up a first down against any other quarterback.
I wonder how close Malik Mustapha is to starting. He is seeing a rise in snap counts every week. Mustapha played 21 snaps this week compared to Sigle’s 44—the rotations were happening before Sigle’s injury. Malik is a missile.
He had a pressure on his lone pass rush, and showed the kind of recognition you want from the position driving on an underneath throw to break up a pass.
Special teams: B
Eddy Pineiro had two touchbacks and a blocked field goal. Can’t fault him for the blocked kick. It looked like Carver Willis stepped the wrong way. It didn’t come back to bite the Niners in this game, but they can’t expect to get away with it moving forward.
Punter Corliss Waitman had to show up for work in Week 4. He averaged 52 yards per attempt, forced a pair of fair catches, and kicked another punt out of bounds. On the one that was returned, Siran Neal made an incredible open-field tackle, and the Broncos returner fumbled it.
Coaching: B
For the first 2.5 quarters, the offensive coordinator on each side of the ball was losing the fight. Shanahan pressed the correct buttons on the final two drives, but it was the first time we’ve seen his offense struggle for long stretches of the game.
Morris sat back in zone coverage, rotated his safeties enough to throw Nix off, and created the illusion that the intermediate-to-deep windows weren’t there. The way he’s using players like Keion White or Garret Wallow, and even Mustapha to an extent, is impressive.
Brant Boyer takes the fall for the blocked kick, bringing the coaching grade down.













