The San Francisco 49ers held on for dear life at home against the Arizona Cardinals in Week 3. The score was 36-30, but Kyle Shanahan’s aggressive approach to ending the game showed how he felt about letting his defense decide it.
Here are the winners and losers from Week 3.
Winners
Kyle Shanahan
Shanahan’s ability to sequence plays and keep the offense ahead of schedule is uncanny. Historic, even.
Missing Mike Evans, the 49ers still managed explosive plays. They didn’t miss a beat on the ground, either. The passing success rate was over 55%. The rushing success rate was 59%. Both of those are elite figures.
Despite missing Mike Evans for much of the game, the Niners still had the league’s highest EPA per play, nearly double the second-place team. The offense ran only 50 plays, but averaged a whopping 8.7 yards per play.
The offense is a juggernaut, and Shanahan is to thank for that.
Brock Purdy
Several measures show when a quarterback is under duress or when their receivers aren’t open. The Cardinals pressured Purdy on nearly 40 percent of his dropbacks. Purdy threw the ball away on 10.7% of his attempts. A couple of close, tight-window throws may have made you nervous, but Purdy ran out of multiple sacks once again to keep the Niners ahead of schedule.
Purdy scrambled for 34 yards. He should have a touchdown on his ledger. It’s impressive how he stands stall against pressure in his face and knows where every wideout is.
Purdy has a knack for playing on time and making aggressive decisions, and his four-touchdown performance was a big reason why San Francisco hung on against the Cardinals.
Purdy recorded his 14th career game with a 130+ passer rating, the most by any player before turning 27 in NFL history. He surpassed Lamar Jackson.
George Kittle
Kittle led the 49ers with eight impact plays, per Sumer Sports. That is a team-high this season. Fifty percent of Kittle’s targets came in the red zone. He caught six of his seven targets for 82 receiving yards, and averaged an impressive 5 yards after the catch.
The broadcast highlighted how well Kittle blocked. That goes without saying. The 49ers are a different team through the air and, more importantly, on the ground, with Kittle on the field.
Kittle’s two touchdown receptions bring his career total to 55, tying Vernon Davis for fourth in the franchise.
Christian McCaffrey
McCaffrey was second on the team with four impact plays. He rushed for a season-high 75 yards, with 39 of those coming after contact. McCaffrey caught four passes on five targets for 41 yards, bringing his total to over 100 scrimmage yards.
McCaffrey had two explosive runs against the Cardinals. Add in his production as a receiver, and it’s hard to leave him off this list.
Losers
The tackling
Fred Warner uncharacteristically missed three tackles. Dre Greenlaw also missed three. Jaden Dugger missed one. Osa Odighizuwa missed one. Keion White missed a tackle. Upton Stout missed two tackles.
The 49ers are at a disadvantage once they take the field with the plethora of injuries. If they miss 10 tackles a game, they’re not going to have a chance to stay competitive.
The soft coverage
The 49ers played four cornerbacks. Each of them was targeted at least five times. Every one of them allowed at least two-thirds of their targets to be completed. Upton Stout allowed all five of his targets to be completed for 7.2 yards per target. Jack Jones allowed 8.3 yards per target.
The cornerbacks are going to have to step up for a banged-up pass rush. They had two pass breakups, but Deommodore Lenoir had the pass interference in the end zone.
Aside from that, the 49ers gave up so many easy completions underneath, that it allowed the Jacoby Brissett to be comfortable and take the short profit. That’s why the Cardinals ran 31 more plays than the Niners.
Raheem Morris should look to change the variance and put more pressure on the opposing quarterback with tighter coverage. He can only do so much with so many starters out along the defensive line, but the secondary is fully healthy. There’s no excuse for Sunday’s performance.
Winners
The offensive line
For the second time this season, McCaffrey averaged over 1.5 yards before contact (1.9). He reached that mark just three times in 2025. That is an offensive line stat.
The line allowed only four pressures, and Purdy averaged 3.26 seconds to throw across 27 dropbacks. That is an offensive line stat.
It’s a unit that remains one of the team’s strengths, and one the 49ers will keep leaning on as injuries pile up.
The makeshift defensive tackle group
Odighizuwa had four pressures and a tipped pass that probably should’ve resulted in an interception.
Before he left with an injury, Halton had three impact plays, including a tackle for loss on a screen.
Kevin Givens has a couple of pressures, including a near sack.
Sebastian Valdez had a pair of run stops.
Naquan Jones had a run stuff.
All things considered, the defensive tackle group competed.













