San Francisco defeated Arizona 41 to 22 at State Farm Stadium on November 16, 2025, behind Christian McCaffrey’s three touchdowns and Brock Purdy’s three scoring passes in his return from turf toe. The Cardinals outgained the 49ers 488 to 281 and controlled possession for over eight more minutes, yet Jacoby Brissett’s NFL record 47 completions meant nothing.
Arizona’s 17 penalties for 130 yards negated the yardage advantage. San Francisco committed one flag all afternoon.
Table of Contents
Key Performance Stats
| Category | San Francisco | Arizona |
|---|---|---|
| Passing | Purdy 19/26, 200 YDS, 3 TD | Brissett 47/57, 452 YDS, 2 TD, 2 INT |
| Rushing | McCaffrey 13 CAR, 81 YDS, 2 TD | Knight 5 CAR, 24 YDS, 1 TD |
| Receiving | Kittle 6 REC, 67 YDS, 2 TD | Wilson 15 REC, 185 YDS |
| Defense | C. Robinson 12 tackles | C. Simon 12 tackles |
| Turnovers | 2 INT, 1 fumble recovery | 0 takeaways |
Record Penalties Sink Cardinals
Arizona set a franchise record with 17 accepted penalties, breaking the 1936 Chicago Cardinals mark of 16. The flags arrived in waves. Eleven penalties occurred in the first half alone, tied for the most before halftime by any NFL team over the past 20 years, according to ESPN’s complete game summary.
San Francisco committed one penalty all game. That 16 flag difference decided the outcome.
Brissett addressed the unusual circumstances before kickoff. “It’s a little different. It kind of blows my mind that a road team can be that loud. I’ve never had to worry about silent count at home before.”
The 49ers faithful filled State Farm Stadium to the point where Arizona operated on a silent count in their own building. The noise contributed to communication breakdowns on offense.
Bam Knight broke through the line on fourth and inches in the third quarter and raced 60 yards untouched for what appeared to be a touchdown. Officials flagged tight end Pharaoh Brown for holding, negating the score. The penalty pushed Arizona back to its own 31. Three plays later, the Cardinals punted.
Arizona outgained San Francisco by 207 yards but couldn’t capitalize.
Head coach Jonathan Gannon spoke to his team after the game. “I am a defensive head coach and it’s not acceptable. You can’t win when you give up that many points and it really doesn’t matter how you get there.”
| Team Stats | 49ers | Cardinals |
|---|---|---|
| Total Yards | 281 | 488 |
| First Downs | 24 | 24 |
| Third Down | 3 of 9 | 6 of 14 |
| Penalties | 1 for 15 yards | 17 for 130 yards |
| Turnovers | 0 | 3 |
| Time of Possession | 25:45 | 34:15 |
Purdy Returns, Exploits Pre-Snap Reads
In his first start since September 28, Brock Purdy completed 19 of 26 passes for 200 yards and three touchdowns after missing six consecutive games with turf toe.
Early in the first quarter, Purdy checked the opposing defense before the snap, made a quick switch at the line of scrimmage, and hit George Kittle for a 30 yard touchdown in the corner of the end zone.
| Purdy Performance | Result |
|---|---|
| Completions/Attempts | 19 of 26 (73.1%) |
| Yards | 200 |
| Touchdowns | 3 |
| Interceptions | 0 |
| QB Rating | 133.5 |
| Sacks | 1 for 14 yards |
“It was vintage Brock, and that’s a huge compliment,” McCaffrey said. “He was poised, made some great plays, some huge third down throws.”
The quarterback distributed passes to six different receivers. His mobility looked limited. Purdy never crossed the line of scrimmage on designed runs or scrambles, choosing instead to work from the pocket. The Cardinals generated just one sack and four quarterback hits on 27 dropbacks.
Brissett’s Record Setting Day Wasted
With 47 completions on 57 attempts for 452 yards, Jacoby Brissett broke Drew Bledsoe’s (1994) and Jared Goff’s (2018) regular season record of 45 completions. He threw two touchdowns and two interceptions while completing passes to nine different receivers.
His offensive line kept him clean all game with zero sacks allowed on 57 dropbacks. Arizona moved between the 20s consistently but couldn’t punch the ball across the goal line.
| Brissett Performance | Result |
|---|---|
| Completions/Attempts | 47 of 57 (82.5%) |
| Yards | 452 |
| Touchdowns | 2 |
| Interceptions | 2 |
| QB Rating | 96.8 |
“Man, I’ll throw for three yards in a win right now,” Brissett said when asked about the individual record.
Turnovers in the second and third quarters shifted momentum. Safety Malik Mustapha jumped a route in the second quarter, picking off Brissett and returning it to the San Francisco 33 yard line. Three plays later, the 49ers kicked a field goal to push their lead to 22 to 10.
Defensive back Deommodore Lenoir read Brissett’s eyes in the third quarter. He broke on the ball at the 22 yard line and sprinted 64 yards to the Arizona 14 before getting tackled. That return, which Pro Football Reference tracks in detail, set up Kittle’s second touchdown three plays later and gave San Francisco a 35 to 10 lead.
Lenoir’s 64 yard return marked the longest interception by a 49ers player since Charvarius Ward took one 66 yards for a touchdown against Arizona in December 2023.
McCaffrey’s Three Scores Pace 49ers
Christian McCaffrey scored from one yard out just 16 seconds into the game after Skyy Moore returned the opening kickoff 98 yards. He caught a nine yard scoring pass early in the second quarter. A four yard run in the fourth quarter gave him his third touchdown of the afternoon.
Those three scores pushed McCaffrey’s career total to 17 games with at least one rushing touchdown and one receiving touchdown, an NFL record. He became the first player in league history to record four seasons with at least five rushing touchdowns and five receiving touchdowns.
| McCaffrey Performance | Rushing | Receiving |
|---|---|---|
| Touches | 13 carries | 5 receptions on 6 targets |
| Yards | 81 | 40 |
| Touchdowns | 2 | 1 |
| Yards Per Touch | 6.2 | 8.0 |
McCaffrey totaled 121 yards from scrimmage, his ninth 100 yard game this season. San Francisco’s rushing attack generated 95 total yards on 25 carries while Arizona managed just 36 yards on 14 attempts. The 2.6 yards per carry average marked the fewest rushing yards the 49ers have allowed since holding the New York Giants to 29 yards in September 2023.
Kittle and Wilson Trade Career Performances
George Kittle caught all six targets for 67 yards and two touchdowns. His scoring catches gave him 50 for his career, making him just the third player in franchise history to reach both 500 receptions and 50 touchdowns. Only Jerry Rice and Terrell Owens accomplished both milestones previously.
The connection between Purdy and Kittle reached 23 career touchdowns, surpassing Steve Young and Brent Jones (22) for second most by a quarterback and tight end duo in team history. Only Alex Smith and Vernon Davis (30) have more.
“Brock’s presence in the huddle is just so elite,” Kittle said. “He plays the game with this joy that’s so infectious. I mean, five plays into the game, he hits me 30 yards downfield with a perfect pass.”
Michael Wilson made his first start as Arizona’s number one receiver with Marvin Harrison Jr. out following appendix surgery. He responded with 15 catches for 185 yards on 18 targets. His 15 receptions rank second in franchise history for a single game behind only Sonny Randle’s 16 catch performance in 1962.
“I haven’t had a game like that since high school,” Wilson said. “Regardless of the outcome of the game, that was a big milestone for myself.”
| Key Receivers | Team | REC | TGT | YDS | TD | Long |
|---|---|---|---|---|---|---|
| Michael Wilson | ARI | 15 | 18 | 185 | 0 | 34 |
| Trey McBride | ARI | 10 | 11 | 115 | 1 | 28 |
| George Kittle | SF | 6 | 6 | 67 | 2 | 30 |
| Greg Dortch | ARI | 6 | 6 | 66 | 1 | 17 |
| Jauan Jennings | SF | 4 | 6 | 54 | 0 | 25 |
Tight end Trey McBride extended his streak of games with at least five catches to 12 straight. He scored a touchdown for the fifth consecutive game, a first for any Cardinals tight end since the 1967 merger. McBride caught 10 passes for 115 yards.
The 49ers game recap on the team’s official site breaks down additional offensive details from San Francisco’s performance.
Turnovers Trump Total Yardage
San Francisco forced three turnovers while committing none. Two interceptions and a forced fumble at the goal line made the difference in a game where Arizona outgained the 49ers by 207 yards.
Upton Stout punched the ball loose at the goal line in the fourth quarter. Elijah Higgins caught a pass near the goal line and turned upfield, but Stout met him and knocked the ball free. Keion White recovered to end Arizona’s drive with San Francisco leading 35 to 10.
Curtis Robinson led the 49ers with 12 tackles while Cody Simon matched that total for Arizona. Linebacker Dee Winters added 10 tackles and one tackle for loss. Nick Martin made his NFL debut after being inactive for the first 10 games, recording seven tackles in his first action.
Josh Sweat recorded Arizona’s only sack, bringing down Purdy for a 14 yard loss in the third quarter on third and four. Sweat now has nine sacks through 11 games. Rookie defensive tackle Walter Nolen posted two tackles for loss in his third game back from injury.
The Cardinals’ coverage on Arizona’s official game recap includes additional defensive stats and post-game quotes.
| Key Defensive Stats | SF | ARI |
|---|---|---|
| Total Sacks | 0 | 1 |
| Interceptions | 2 | 0 |
| Forced Fumbles | 1 | 0 |
| Tackles for Loss | 3 | 3 |
| QB Hits | 4 | 4 |
Special Teams Set Early Tone
Skyy Moore fielded Chad Ryland’s opening kickoff and burst through the Cardinals coverage team, racing 98 yards down the sideline before Kei’Trel Clark made the tackle at the one yard line. The return marked the longest by a 49ers player since Ted Ginn Jr. took a kickoff 102 yards for a touchdown against Seattle in September 2011.
McCaffrey scored on the next play. San Francisco led 7 to 0 after just 16 seconds. Arizona trailed the rest of the afternoon.
Eddy Pineiro converted three field goals from 48, 47, and 47 yards before exiting in the third quarter with a hamstring injury. His perfect streak reached 22 consecutive field goals since joining the 49ers in Week 2.
Greg Dortch returned two punts for 51 yards including a 40 yard gain in the first quarter. His returns set up scoring opportunities, but penalties negated most advantages.
| Special Teams Stats | SF | ARI |
|---|---|---|
| Field Goals | 3 of 3 | 1 of 2 |
| Longest FG | 48 | 26 |
| Extra Points | 2 of 4 | 1 of 1 |
| Punting Average | 46.3 | 40.7 |
| Kickoff Return Yards | 98 (Moore) | 79 total |
| Punt Return Yards | 9 | 51 (Dortch) |
What These Results Mean
San Francisco improved to 7 and 4, sweeping the season series against Arizona for the first time since 2023. The 49ers have won seven of the last 11 matchups against the Cardinals.
Purdy’s return gives the offense its starting quarterback back after six games with backups. His connection with Kittle gives San Francisco a reliable weapon in the red zone.
Pineiro’s hamstring injury creates concern heading into Monday Night Football against Carolina. If the kicker misses time, the 49ers will need to sign a replacement.
Arizona dropped to 3 and 7. The Cardinals are 0 and 4 in NFC West play after getting swept by both Seattle and San Francisco. They have lost six of their last seven games and allowed 40 plus points in back to back weeks for the first time since 2002.
Arizona finished 2024 as the least penalized team in the NFL. This season they’ve drawn significantly more flags.
Gannon addressed his team after the loss. “We’re on the mat. When the alarm goes off tomorrow, you better wake up and come to work and get off the mat.”
Arizona hosts Jacksonville next Sunday. With playoff hopes gone, the Cardinals must clean up mental mistakes. Seven games remain to evaluate young players.
For comprehensive NFL coverage and player statistics, visit The Sportie.
All statistics verified from official sources. Game played November 16, 2025 at State Farm Stadium in Glendale, Arizona.

