SANTA CLARA — Here is how the 49ers (9-1) rallied for a 36-26 win over the Arizona Cardinals (3-7-1) on Sunday at Levi’s Stadium:

PASS OFFENSE: A-

SANTA CLARA, CALIFORNIA – NOVEMBER 17: San Francisco 49ers starting quarterback Jimmy Garoppolo (10) throws under pressure against Arizona Cardinals’ Cassius Marsh Sr. (54) in the fourth quarter at Levi’s Stadium in Santa Clara, Calif., on Sunday, Nov. 17, 2019. (Nhat V. Meyer/Bay Area News Group) 

Two red-zone interceptions were so baffling because Jimmy Garoppolo was, otherwise, so on-target with a career-high 424 passing yards (34-of-45, 4 TDs, 2 sacks, 5 drops). Practice made for the perfect winning combination of Garoppolo finding surprise-choice Jeff Wilson Jr. for a 25-yard, go-ahead touchdown with 31 seconds to spare. All four touchdown passes went to undrafted players (tight end Ross Dwelley for two, wide receiver Kendrick Bourne with one for the third straight game). Deebo Samuel had his second straight 100-yard game (eight catches, 134 yards), Kyle Juszczyk (7 catches, 7 targets) was money getting them into first-and-goal situations and Emmanuel Sanders (three catches, 33 yards) valiantly played through a rib injury. Ex-starters Marquise Goodwin (one catch, one drop) and Dante Pettis (not one snap) are afterthoughts.

RUN OFFENSE: F

SANTA CLARA, CALIFORNIA – NOVEMBER 17: San Francisco 49ers’ Raheem Mostert (31) runs after a catch against the Arizona Cardinals in the fourth quarter at Levi’s Stadium in Santa Clara, Calif., on Sunday, Nov. 17, 2019. (Nhat V. Meyer/Bay Area News Group) 

Uh oh. The 49ers can’t run, certainly not like a No. 2-ranked rushing attack. Their 34 yards (19 carries) were their fewest since 2009, and that’s not just because Matt Breida sat out with an ankle injury. Tevin Coleman (12 carries, 14 yards) and Raheem Mostert (six carries, 13 yards) had trouble finding lanes. That is a byproduct of defenses loading up the box with sound tacklers. The 49ers have failed to average more than 3.5 yards a carry in five of their past six games.

PASS DEFENSE: A

SANTA CLARA, CALIFORNIA – NOVEMBER 17: San Francisco 49ers’ Arik Armstead (91) celebrates his sack against the Arizona Cardinals in the fourth quarter at Levi’s Stadium in Santa Clara, Calif., on Sunday, Nov. 17, 2019. The ball was ruled down. (Nhat V. Meyer/Bay Area News Group) 

Four sacks, four different defenders — Dee Ford, DeForest Buckner, Arik Armstead, Jimmie Ward. Typical for this season. And, for the first time since 1997, the 49ers have produced at least three sacks in seven straight games. Richard Sherman’s three pass-interference penalties, even if they weren’t all warranted, are a concern heading into a crucial three-game stretch. Emmanuel Moseley started ahead of Ahkello Witherspoon, and Moseley reclaimed that job after briefly leaving with cramps, so it may stay that way.

RUN DEFENSE:  B-

SANTA CLARA, CALIFORNIA – NOVEMBER 17: San Francisco 49ers’ Fred Warner (54) heads off the field following their 36-26 win over the Arizona Cardinals at Levi’s Stadium in Santa Clara, Calif., on Sunday, Nov. 17, 2019. (Nhat V. Meyer/Bay Area News Group) 

Kyler Murray and Kenyan Drake each ran for 67 yards, though Murray was much more electric and dangerous, as evidenced by his 22-yard touchdown run past Nick Bosa and Jimmie Ward with 6:30 remaining. Linebackers Fred Warner (12 tackles) and Dre Greenlaw (10 tackles) are working well together and each had a tackle for loss. Jullian Taylor (two tackles for loss) filled in well for injured nose tackle D.J. Jones. Let’s not forget Damontre Moore’s debut and his forced fumble on the Cardinals’ first snap after Wilson’s TD. Gamblers on the 10-point spread surely won’t forget the Cardinals’ game-ending fumble that D.J. Reed returned for a touchdown.

SPECIAL TEAMS: A-

SANTA CLARA, CALIFORNIA – NOVEMBER 17: San Francisco 49ers’ Joe Staley (74) walks off he field with San Francisco 49ers defensive coordinator Robert Saleh heads off the field following their 36-26 win over the Arizona Cardinals at Levi’s Stadium in Santa Clara, Calif., on Sunday, Nov. 17, 2019. (Nhat V. Meyer/Bay Area News Group) 

Quiet day. Good. Rookie Chase McLaughlin made his only try (43 yards) and didn’t have to attempt a game-tying, last-minute field goal nor an overtime won, er, one. Mitch Wishnowsky averaged 50.5 yards on his only two punts. Richie James’ returns were sure-handed, and the Cardinals’ kickoff returns were muted.

COACHING: A-

SANTA CLARA, CALIFORNIA – NOVEMBER 17: San Francisco 49ers head coach Kyle Shanahan looks up at the big screen during a review during his teams game versus the Arizona Cardinals at Levi’s Stadium in Santa Clara, Calif., on Sunday, Nov. 17, 2019. (Randy Vazquez / Bay Area News Group) 

Unlike the 2017 team, Kyle Shanahan has closers, guys on every unit that seem to come alive late in the game, perhaps with the exception of the run game. And because that rushing attack isn’t working, Shanahan and Garoppolo have had to turn to a pass-heavy scheme amid an epidemic of receiver drops. Enough flaws exist to keep the 49ers humble, hungry and overlooked by outsiders, which is just as it should be for the coming gauntlet against Green Bay, Baltimore and New Orleans.