If the San Francisco 49ers make the playoffs, nobody will look back and say, “Well, they almost lost in Week 3!” You can’t say the same about the other two playoff contenders in the division. Winning is all that matters.

Here’s how the 49ers got there. Let’s hand out some positional grades.

If you didn’t watch the game, you’d look at Brock Purdy’s 55.6% completion percentage and think he played poorly. After all, he only completed 15 of his 27 passes. But 14 of those went for first downs. Another four went for touchdowns.

Winners and Losers mentioned it, but it’s always a great sign when Purdy throws the ball away. No quarterback had a higher throwaway percentage in Week 3 than Purdy. The Cardinals did everything they could to condense the middle of the field. Over 40% of Purdy’s attempts came outside of the numbers. That’s not where the 49ers generally operate.

Winners and Losers also highlighted how Brock Purdy passes Lamar Jackson for the all-time record for the most games in a career with at least a 130 passer rating. In Week 3, Lamar’s EPA per pass was 0.51, an excellent number and second-best in the league that week. Purdy’s was 0.81. A number you’d be hard-pressed to accomplish in Madden. Nearly every time Purdy dropped back, he added a point to the scoreboard.

Purdy gets an A because the Cardinals were down multiple members in their secondary, and it’s the Cardinals. Plus, he wasn’t perfect. There were at least two throws he’d want back. And if we’re going to judge him like the MVP candidate he is, then he should be graded on an MVP scale.

Purdy’s been in complete control through three games. His EPA per pass was higher in Week 2 (the 11th-best mark for any quarterback since 2022). You love to see Purdy pick and choose when to scramble. Purdy became the second quarterback since 2022 to post an EPA per pass of 0.8 or higher in back-to-back weeks.

He was great, and the 49ers need him to be.

Last week in this piece, we mentioned how Kaelon Black left some yards on the field. He’s a rookie. There will be games like that. So it’s no surprise to see Christian McCaffrey get the lion’s share of carries in a divisional game.

Purdy being awesome will overshadow how well McCaffrey played. It shouldn’t.

McCaffrey forced four missed tackles, averaged 2.6 yards after contact, and five yards per carry. When the 49ers ran the clock out toward the end of the game, McCaffrey chewed up much-needed yardage and time, keeping the defense off the field.

McCaffrey picked up three first downs as a receiver. He gained 24 yards after the catch on 41 receptions. He’s still one of the most dangerous receivers out of the backfield, despite the declining speed.

McCaffrey played 41 snaps compared to Black’s 8.

The wide receiver group wasn’t bad, but most of the production came from the quarterback or the scheme. Was it cool to see Jordan Watkins catch passes? Of course.

Making plays in your first regular-season game could be exactly what Watkins needs to build confidence moving forward. He was wide open on both receptions. On the play before the half, he was the only player in the picture.

Deebo Samuel didn’t have a reception. He showed he can still run, but he had zero targets across 22 routes.

Jacob Cowing was targeted twice across 14 routes.

Losing Mike Evans changed everything. He ran only 12 routes but was targeted on six of them.

KhaDarel Hodge played the second-most snaps behind Deebo, but that’s because of what he can do in the run game.

It’s evident that Purdy really only trusts Evans. Maybe a better way to phrase it is that Purdy might be most comfortable throwing to Evans.

If Evans is out for multiple weeks, which it seems like that’s where we’re headed, this group faces an uphill battle, going against two of the best secondaries in the NFL in the next two weeks.

If Luke Farrell stays in-bounds on his one target and George Kittle doesn’t egregiously hold on Purdy’s touchdown run, then this is an A.

Farrell is so much better as a run blocker than he was a year ago. His blocking prowess lets the team let Kittle run routes. A novel concept, isn’t it? Both players have Shanahan’s trust in pass protection:

Purdy’s success rate targeting Kittle was 85.7%. Kittle caught his lone contested catch, forced a missed tackle, picked up 30 yards after the catch, caught a couple of touchdowns, and reached 17.06 miles per hour, which is crazy when you consider he’s basically been playing football for a month after a torn Achilles.

Jake Brendel was the only player to keep a clean sheet in pass protection, but if you allow two pressures — which a few of the linemen did — on 28 pass-blocking snaps, in no way is that a bad game. In what field is being successful 92% of the time considered bad? None that I’m aware of.

For the season, the line has allowed 12 pressures in true pass sets. They are winning almost every rep.

A neck stinger for Trent Williams meant Vederian Lowe would finish the final 19 snaps at left tackle. He held up well. Per Sumer Sports, each lineman recorded impact plays, with Dominick Puni leading the way with three. Brendel and Colton McKivitz each had two apiece.

McCaffrey averaged 2.6 yards before contact on his attempts. That’s incredible.

There were two to three series that felt like the Cardinals got the best of the line, but across 50 plays, the Niners won the battle and did so convincingly.

There’s no need to sugarcoat it: the offensive line is a strength for the 49ers, and pretending otherwise is either being purposely obtuse or you’re living off plays from past years.

The real test happens over the next two games.

Since we are humans, we don’t have to trash a defensive line whose longest-tenured player is Keion White:

You cannot have high expectations when you enter a game with two defensive tackles who were on the roster entering training camp, and one of those gets hurt halfway through the game.

Khalid Kareem played 51 snaps. He was a last-minute add ahead of Week 1.

Raheem Morris did everything in his power to increase the variance. He blitzed Jacoby Brissett on 50% of his dropbacks. In a way, it worked. Ogbo Okoronkwo and Keion White had a sack. Okoronkwo managed a 15.2% pressure rate. Newcomer Viliami Fehoko won a couple of his pass rushes and turned them into pressures.

White has been closer to good than average through three weeks. His pass rush win percentage was 15.9%.

The problem is when you ask role players, in this case pass rush first players, to play the run, they wear down, and you get the second half against the Cardinals.

Fehoko was the only edge rusher to make a run stop. Jeremiyah Love averaged 1.81 yards before contact on 21 attempts.

Sebastian Valdez had two run stops, and Naquan Jones added a run stuff. Those two held up well against the run but offered little in the pass-rush department.

Kevin Givens flashed. Osa Odighizuwa made an impact rushing the passer. Gracen Halton was headed for another strong performance before an injury.

But after he left, Odighizuwa couldn’t leave the field, Givens was stretched to the max, and the lack of bodies up front really hurt the defensive line’s effectiveness.

Early on, I thought Dre Greenlaw played his best football to date this season. He lived in the backfield, whether as a run defender or a pass rusher. Greenlaw limited almost all of his damage in coverage. On five targets, he allowed seven yards. But then Greenlaw missed a few tackles and eventually left with an injury.

Fred Warner made his usual splash plays at or behind the line of scrimmage. But something was off with Warner. He’s as sure of a tackler as it gets, but he whiffed three times. The biggest surprise was that Warner allowed three first downs on seven targets as the primary defender. This might be the last time all season that Warner allows a 100% completion percentage.

Seventeen tackles look great in the box score, but only a few of those benefitted the defense. In fairness, when you’re playing behind a makeshift defensive line, the production will inevitably drop. But I view this player as a Defensive Player of the Year candidate, and I’ll grade him accordingly all season.

Warner rushed the passer a career-high nine times to offset the lack of a pass rush. I wonder if he simply ran out of gas having to do so many tasks, and that’s why there was a drop in performance, relatively speaking.

It’ll be interesting to see if Jaden Dugger or Garret Wallow start next to Warner if Greenlaw is out. Wallow has Raheem Morris’s trust as a pass defender, but rarely sees the field on run downs.

The cornerbacks were a pleasant surprise to start the season, but they made Michael Wilson look like Larry Fitzgerald.

Renardo Green allowed five first downs on 11 targets. Jack Jones gave up four first downs on six targets. Deommodore Lenoir surrendered two first downs on five targets.

Green is still a work in progress in zone coverage. You can tell it’s not something he’s fully comfortable doing, especially playing underneath at the Cover 2 defender in quarters.

Lenoir and Green both broke up a pass, but pass interference by Lenoir and Jones offset it. They’ve also been superb against the run, but the unit made only two run stops, and Upton Stout missed two tackles.

Malik Mustapha entered the game in the second quarter for Ji’Ayir Brown. Mustapha played 16 defensive snaps, with 12 in coverage. On the next series, Brown stayed on the field, and Marques Sigle came off. Mustapha’s play to stuff a run is why it won’t be long before he never comes off the field.

There’s an obvious plan in place to ramp Mustapha up. Against Arizona, he played the entire second quarter, but never stepped onto the field with the defense for the other three quarters.

Brown should’ve had an interception. He allowed all three of his targets to be completed. But neither safety made any extreme blunders, and that’s the bar for this group.

You cannot control how the ball bounces. Siran Neal found that out the hard way. A special-teams fumble erased the defense’s stop and led to a Cardinals touchdown.

Neither returner had a big return.

Corliss Waitman net was only 41.6. Eddy Pineiro nailed a 57-yarder, but the two missed extra points kept Arizona in the game.

Kyle Shanahan against a secondary with three backups is like shooting fish in a barrel. Shanahan deserves credit for throwing the ball to end the game. Put the ball in your best player’s hands and trust that he’ll ice the game. That happened. Twice.

Morris is trying to press every button he can. My biggest complaints were the excessive number of free releases the Cardinals’ wideouts had. But that would put more pressure on his safeties to cover—something Morris has made clear he does not want to do.