After the San Francisco 49ers offense was dominated in a 28-18 loss to the Kansas City Chiefs in a Super Bowl rematch last month (and lost wide receiver Brandon Aiyuk to a season-ending knee injury in the same game), there was still belief that Kyle Shanahan’s team would be able to find their footing when running back Christian McCaffrey returned from the Achilles injury that had sidelined him for the first half of the season.
But in the two games since McCaffrey’s return, we’ve yet to see the type of offense we’ve grown to expect out of a Shanahan-coached group, and McCaffrey has been unable to create plays in space like he did last season, when the San Francisco offense was nearly unstoppable and he was arguably the most valuable non-quarterback in the league. McCaffrey’s return also hasn’t provided a boost to the passing game, and San Francisco continues to be mired by its poor execution in late-game situations.
Now at 5-5 (and 1-3 in the NFC West), the 49ers enter the toughest stretch of their schedule with their season on the brink. Every loss triggers a referendum on Shanahan and his offense, which doesn’t look right, even though the data is telling us there’s nothing wrong with that side of the ball.
San Francisco’s overall offensive production was in many ways just fine in the eight games McCaffrey missed, as the 49ers ranked in the top four in passing and rushing yards per attempt, were 12th in rushing success rate, and ninth in expected points added (EPA) on passes. Quarterback Brock Purdy had already thrown for over 2,000 yards in the first eight games, continuing to prove himself as a quality starter and distancing himself from Shanahan’s previous San Francisco quarterbacks. Even in the four weeks since losing Aiyuk to injury, their passing offense still ranks second in EPA per dropback and fourth in success rate.
But if you’re a frustrated 49ers fan or a Shanahan skeptic, that might just sound like nerd babble considering this is a team that keeps coming up short in key moments and at the end of big games. The offense is averaging nearly a yard less per passing attempt than last season, so there is evidence of regression. But how much regression, and why is it happening, is not as simple as injuries to key players like McCaffrey and Aiyuk.
For the sake of this exercise, I’m willing to nitpick what is still a good unit. Let’s take a look at the excuses, explanations, and theories for why this offense doesn’t look like the laser show it was a season ago.
Issue: Christian McCaffrey isn’t as effective as a runner.
For an offense that was already moving the ball efficiently in the first half of the season, McCaffrey’s return in Week 10 should have turbocharged a scheme Shanahan designed specifically to feature a dynamic player out of the backfield. In recent seasons, McCaffrey has given this offense an answer against stacked defensive fronts, which is how opponents often try to play the 49ers; this season, San Francisco is second to Baltimore in offensive snaps against eight-man boxes, per Next Gen Stats. Offenses are generally more likely to face those kinds of heavy boxes on early downs, but San Francisco’s success on early-down run plays have taken a major dip since McCaffrey returned, and aren’t even in the neighborhood of how effective those plays were last season. McCaffrey is averaging just 3.6 yards per carry on his first- and second-down runs, with a 33 percent success rate; just 13 percent of those runs have resulted in a new first down. Last season, he averaged 5.4 yards per carry with a 45 percent success rate, moving the chains on 28 percent of those runs. For additional context, Chiefs running back Kareem Hunt has been better in all three metrics on early-down runs, and he was out of a job to start the season.
Schematically, San Francisco’s running game hasn’t undergone any drastic changes, so what explains this drastic slide? We can look to their game against Seattle last week for answers. Below is one of the 49ers’ bread-and-butter concepts—an outside zone run. The Seahawks defense totally cuts the play off with a stunt into the lap of left guard Aaron Banks, and the rest of the offensive line struggles to get necessary movement and open cutback lanes for McCaffrey.
Even when the 49ers add window dressing to the pre-snap look and change it up to confuse the defense, San Francisco’s lack of physicality at the point of attack renders these runs useless. In the next clip, receiver Deebo Samuel is sent in motion before the snap to capture the eyes of linebackers and mask the offense’s intentions to run a counter play to the weak side of Seattle’s defense. Even though the offensive linemen successfully block the correct defenders, there’s simply no space for McCaffrey to work, and it’s another run that goes nowhere.
When he’s been at his best, McCaffrey is athletic enough to create plays in this sort of traffic and find yards after contact, but I’m not sure it’s realistic to expect him to be successful with these current conditions up front. One of the better statistics to measure the health of a running game is yards before contact. The higher the number, the more it suggests that the offense has a smart design and some bullies on the line; San Francisco has the former without the latter. On McCaffrey’s 30 early-down runs this season, he’s averaging a paltry 1.07 yards before contact per carry—which can’t hold a torch to last season’s mark of 1.91 yards, and ranks 28th among running backs since he returned.
McCaffrey remains optimistic about the running game finding its stride, but I’m not certain there’s anything he specifically can do to help out this offensive line. His usage in this run scheme is unchanged, but the running lanes have vanished and the result is he’s performing like a league-average back, falling worlds short of what he can be.
Issue: McCaffrey is being defended differently as a receiver.
It’s rare that a defense has to think about production from a running back as a leading threat of an opponent’s passing attack. That’s one of the things that typically makes Shanahan’s scheme so hard to defend. The threat of McCaffrey catching the ball out in space forced defenses to change their coverage schemes, often assigning players to match McCaffrey’s routes. Last season, McCaffrey averaged just 1.84 air yards per target, and Purdy typically targets McCaffrey near the line of scrimmage in hopes he’ll shred opponents after the catch.
When you look at the coverages Tampa Bay and Seattle threw at McCaffrey in the past two weeks, it seems clear that defenses are willing to play him like he’s San Francisco’s no. 1 receiving option. When he’s lined up in the backfield this season (on 40 of his 44 routes), McCaffrey is seeing Cover 2 and quarters at the highest rate he has since he was traded to San Francisco in 2022—and he’s seeing the lowest rate of Cover 3. This allows defenses to take some of the control away from McCaffrey and Shanahan, preventing their ability to dictate what routes will and won’t be open.
One of McCaffrey’s strengths is his ability to find holes in defenses by running choice routes, and running away from the leverage of the coverage defender. In short: If the defender is playing outside leverage, McCaffrey breaks in (and vice versa). If the defender is deep, he sits on his route down underneath. By playing zone against him, defenses are shrinking the number of options McCaffrey has on any given snap.
The clip below is a good example of how teams can use soft zone coverages to beat this part of San Francisco’s offense. Here, Seattle is playing Cover 2 to McCaffrey’s side, and the corner aggressively sits low and underneath to keep McCaffrey from breaking outside and creating dual high/low stress on the defense, even though it means another receiver is able to get open on a corner route.
With the flats walled off and the linebacker playing high and inside, the best option for McCaffrey here is to sit down in his route as the checkdown option for Purdy. To be clear, this isn’t to say that any one defense’s approach completely eliminates McCaffrey in the passing game, because he’s still productive there. However, I do find it telling that his explosive reception rate in his two games this season is at 10 percent, which would be a career low if it continues.
I expect Shanahan to find ways to get McCaffrey as many receiving opportunities he can handle, but I need to see what Shanahan does with this iteration of the passing game before I believe the backfield production is coming back.
Issue: The 49ers miss Brandon Aiyuk.
Listeners of The Ringer NFL Show know that I love any chance I can find to make a comparison between football and basketball. So here goes: Aiyuk is the prototypical wing, a player who is nearly impossible to guard without help. He was the explosive force that took this 49ers offense from good to great.
San Francisco struggled to get Aiyuk the ball in the first half of the year, and some inaccurate passes were a major reason why his production was down before his season-ending injury. He and Purdy connected on just seven of 21 attempts on throws outside the numbers, plays that have been the defining characteristic of this Shanahan offense when it’s been at its best.
To paint a picture of how valuable Aiyuk was on the perimeter, consider these numbers: In 2023, he ranked 42nd in targets outside the numbers (with 49) but finished the season fifth in yards per reception (18.7) on those routes and led the league in EPA on those routes. In the clip below from the Cardinals game earlier this season, you see that there aren’t many answers for defending Aiyuk outside the numbers, as he’s able to beat single coverage and create yards after the catch, resulting in an explosive gain.
When Aiyuk is on the field, he has a gravity similar to McCaffrey’s, and this offense can operate with him as the engine—even if he’s not the one touching the ball on every snap. The efficiency metrics slightly indicate that this offense is at its healthiest when Aiyuk is on the field.
Player Combinations, 2023 and 2024
While the sample size of games without Aiyuk in 2024 is small, his absence in the passing game is noticeable. Purdy hasn’t attempted a pass of 20 or more air yards since the first quarter of the Cowboys game in Week 8, and he has attempted just 29 passes beyond the sticks since Aiyuk’s injury. His average of 9.67 such attempts per game without Aiyuk is a significant drop from the 13.2 deep attempts per game with Aiyuk in the lineup.
Issue: Deebo Samuel has taken a step back; we just don’t see it on the stat sheet yet.
Wide receiver (and gadget player) Deebo Samuel gives Shanahan an interchangeability that most coaches can only dream of when they’re drawing up plays on their whiteboards. Between 2021 and 2023, Samuel averaged at least 5 yards per carry and 10 yards per reception, proving to be a true playmaker in both phases of San Francisco’s offense. If you’re primarily following the box scores and RedZone-style highlight reels, you might think he’s the same player in 2024 that he’s always been, but that’s not the case. Samuel isn’t giving this offense anything against tight coverage this season, and that’s hurting the offense’s balance.
Samuel’s struggles against tight coverage aren’t exactly new, and we can use his performance in the Super Bowl loss to Kansas City last February as a prime example. Against the Chiefs’ man coverage, Samuel had no catches on six targets—and has had just 18 receptions against man coverage on 42 targets since 2023, including in the playoffs.
Those issues against man coverage continued in 2024, when his 13.4 yards per reception against man has been his lowest since his injury-filled 2020 season. His average of 8.4 yards after the catch against man is a career low. The drop isn’t a result of the 49ers’ attempts to avoid targeting him when he’s facing man coverage. He’s been targeted 21 times in nine games this season, on pace to break his career high of 33, set in his rookie season in 2019. Simply put, this team needs Samuel to get separation in these situations, and he just isn’t right now.
Watch him against Arizona in the clip below. This is a slant route against man coverage. The ball was thrown a bit behind him, but this wasn’t the sharpest route, and he’s at least partially responsible for the defensive back getting in position to make this a contested ball.
The route-running issue shows up on the comeback route clipped below, too. While I wouldn’t say that his footwork is a total mess here, you can see him rounding out of his break early, losing his ability to get the late separation from the defender he would have had if he’d snapped the route off properly. According to Next Gen Stats, Samuel has made just three catches on 13 tight-window targets, and his air yards on those tight-window throws are below the 10-yard threshold, meaning that he’s not really a downfield threat in this offense unless he’s already wide open.
Samuel is averaging fewer YAC per reception this season than he ever has in his career, and he has had a couple of long catch-and-run plays to inflate the numbers this year. If he isn’t consistently able to win his matchups against man coverage or if San Francisco can’t find opportunities for him to create extra yardage after the catch, it’s hard to get the most out of him in this passing game.
Issue: Brock Purdy is doing a lot, but it’s not enough to raise his teammates’ level of play.
The 49ers are asking Purdy to try to be a ceiling-raising quarterback, and they’re finding that there are limits to this approach—especially when the conditions are suboptimal, as we’ve already laid out. Per Next Gen Stats, the 49ers tied with the Cowboys for last in the average separation that pass catchers are getting from coverage defenders. This forces Purdy to be precise as a passer in a way that we typically expect only from quarterbacks with elite arm talent, like Justin Herbert and Patrick Mahomes. That’s not to say Purdy hasn’t done enough this season to make this offense work. He ranks sixth among qualified QBs in completion rate over expected, but he’s living on a diet of throws into tight windows—the antithesis of how Shanahan’s system is supposed to function.
The clip below is a perfect encapsulation of what this offense is striving for in the passing game. The pre-snap motion contorts the distribution of Seattle’s zone defenders, the offensive line correctly picks up the pressure off the edge, and Purdy’s play-action pass captures the eyes of the underneath defenders long enough for him to find an open throwing window. Purdy is able to hit the top of his dropback and deliver the ball with confidence.
In the next clip, we see San Francisco running a curl-flat concept—something you’ll find in every offense across the league. Seattle is running Cover 1, one of the coverages that can give this offensive play problems. To make this type of play work, receivers have to separate at the top of the route and the quarterback has to be able to throw his receivers open. In this case, Purdy completes the pass to Jauan Jennings.
If an offense can’t get soft zone looks for the quarterback to throw into, he must be anticipatory and accurate. In the clip below, Purdy hesitates because the Bucs have rotated their coverage after the snap, from single high to a variation of Cover 4. Purdy has a safe option available (the out-breaking checkdown to McCaffrey) and an ambitious one (the deeper out route from tight end George Kittle). He makes the aggressive choice, trying to push the ball into the end zone. There’s enough space to give Kittle a chance to win, but Purdy throws an uncompetitive ball and takes a scoring opportunity away from his offense.
This doesn’t mean that every throw from Purdy is an issue. I’ve seen him neutralize tight coverage by getting the ball out quickly and accurately in some instances this season, and he’s delivered the ball into narrow windows plenty of times. On the whole, though, this offense can’t maintain the machinelike efficiency we saw in 2023 when defenses are able to play tight with its routes.
How many of these issues are Kyle Shanahan’s fault?
This offensive regression has led to plenty of criticism for Shanahan, the scheme designer and play caller. One of the more common critiques of the passing game is the lack of freedom Shanahan gives his quarterbacks to change the play at the line of scrimmage. Frankly, that’s the worst reason to point blame at Shanahan. While I haven’t played in the NFL, I have spent enough time studying the intricacies of this offense, and I’ve coached with former NFL players familiar with this scheme to say that Shanahan’s control is not a problem—and giving Purdy carte blanche control over the offense isn’t any kind of solution. This offense has the same kinds of checks, audibles, alerts, and flexibility as any other in the league. At least on early downs, the quarterback is breaking the huddle with two or more play calls packaged together, giving him a chance to solve his issues based on the pre-snap look.
In the passing game, Shanahan wants his offense to use a pure progression system, meaning the concepts are set on both sides and it’s the responsibility of the passer to diagnose where to go with the ball based on the defensive look. This is a basic example, but in the clip below, we see Purdy running a three-level stretch play along the sideline with an intermediate in-breaking route on the backside. As long as Purdy can identify the coverage, the throw should be obvious—and indeed, it was an easy completion.
The head coach can’t always be responsible for getting his receivers open against man coverage because there will inevitably be routes that require his players to win. We’ve talked about how a lack of separation has affected Samuel, and it has similarly been an issue for Jennings, but even McCaffrey has been plastered in coverage since his return. Purdy could be working the ball elsewhere, as we see in the clip below, but his decision to force a ball to a clearly covered receiver isn’t the fault of the play caller.
Bigger questions remain about the 49ers’ repeated failure to close out tight games—they’ve led late in the fourth quarter of each of the three division games they’ve lost this season—and Shanahan’s development plan for Purdy.
But for all its issues, this team still has one of the league’s most efficient offenses, and the defense doesn’t give up too many explosive plays. And while it’s clear that the 49ers haven’t lived up to their lofty expectations so far this season, they are still at .500 in spite of the bad injury luck and offensive issues we’ve laid out here. If this were any other team, I doubt there’d be much consternation.
Of course, the 49ers have never been just any other team, and especially not under Shanahan. This team has white-knuckled its way through the past half decade, making (and nearly winning) a Super Bowl with Jimmy Garoppolo and drafting (and giving up on) Trey Lance, and it is now trying to squeeze another deep playoff run out of this group. Perhaps there is a price to pay for chasing the Lombardi Trophy every year.
The 49ers have a capable defense but not an elite one, so they needed to be the best in the league on offense again to widen their margin for error. What we’ve learned through the first 11 weeks of the season is that there’s no pathway for San Francisco to replicate that sort of offensive success this year. Now, the team has to face off with Green Bay, Buffalo, and Detroit in the next six weeks—and injuries continue to be an issue when the team needs to be healthy now more than ever. Purdy is the latest concern, leaving Thursday’s practice early because of shoulder soreness.
For now, Shanahan is throwing everything he can at the 49ers’ problems, but his good answers haven’t been good enough. The season is hanging in the balance. If this team is going to drag itself back into NFC contention and quiet the noise about its ability to finish games, Shanahan will have to call upon the best play calling of his career. Anything less will be insufficient.