EAST RUTHERFORD, N.J. - The San Francisco 49ers found a way late, rallying behind Christian McCaffrey and Brock Purdy to escape MetLife Stadium with a gritty 24-20 win over the New York Giants in Week 9. The victory moves San Francisco to 5-4 on the season, while New York drops to 3-6 after another frustrating finish.
Kittle sparks the comeback
Trailing 17-10 early in the fourth quarter, Purdy and the 49ers' offense came alive. A crucial 14-yard swing pass to McCaffrey on 1st-and-10 jump-started a drive that had been stagnant for much of the second half. Facing 3rd-and-8 deep in Giants territory, Purdy found tight end George Kittle over the middle for a 7-yard touchdown to tie the game.
"You could feel the momentum shift," said Kittle, his long hair spilling from under his helmet as he spoke to reporters postgame. "We've been fighting for one of those drives that just clicks, and that one did."
Giants answer - but leave the door open
The Giants refused to fold. Russell Wilson led a steady 10-play series, converting two third downs before the drive stalled at the San Francisco 24-yard line. Kicker Graham Gano nailed a 42-yard field goal with 1:58 left to give New York a 20-17 edge.
"We knew they'd give us their best shot," said 49ers head coach Jeff Jarin. "That last drive was all about composure - staying patient and trusting our playmakers."
McCaffrey seals it with a statement run
The 49ers took over at their own 25-yard line with 1:54 remaining, no timeouts, and everything on the line. Purdy opened with a quick strike to McCaffrey for 14 yards, then hit Skyy Moore for another short gain to move the chains. After a defensive holding call advanced the ball near midfield, McCaffrey took over.
Following a short completion to Kittle, McCaffrey ripped off back-to-back runs of 9 and 8 yards, pushing the 49ers into scoring range. With just seconds left, the star halfback took a handoff up the middle, slipped a tackle at the 10-yard line, and powered across the goal line for a 15-yard touchdown - his second of the game.
As the clock wound down to 0:13, McCaffrey flexed in the end zone, surrounded by teammates Nick Bosa, Kittle, and fullback Kyle Juszczyk, in a celebration that felt like a statement of resilience.
"It wasn't about stats or highlights," McCaffrey said afterward. "It was about finishing - and that's exactly what we did tonight."
Defense finishes strong
Wilson had one final shot with 10 seconds left but threw incomplete twice as time expired. San Francisco's defensive front dominated down the stretch, sacking Wilson twice in the second half and forcing a crucial red-zone interception by Deommodore Lenoir.
"Everyone's locked in right now," Bosa said. "This is the kind of win that builds confidence for the rest of the season."
Up Next
The 49ers (5-4) head home to face the Los Angeles Rams in Week 10, while the Giants (3-6) travel to take on the Chicago Bears as they try to snap a two-game skid.
Stats
Passing
San Francisco 49ers
Player |
qbr |
com/att |
pct |
yds |
lng |
td |
int |
sck |
|---|---|---|---|---|---|---|---|---|
| B.Purdy #13 | 61.9 | 19 / 37 | 51.4 | 272 | 50 | 1 | 2 | 3 |
| TEAM | - | 19 / 37 | 51.4 | 272 | 50 | 1 | 2 | 3 |
Rushing
San Francisco 49ers
Player |
att |
yds |
lng |
td |
avg |
big |
yac |
|---|---|---|---|---|---|---|---|
| C.McCaffrey #23 | 15 | 71 | 22 | 2 | 4.7 | 1 | 20 |
| B.Robinson Jr #3 | 3 | 19 | 12 | 0 | 6.3 | 0 | 8 |
| K.Juszczyk #44 | 1 | 5 | 5 | 0 | 5.0 | 0 | 3 |
| TEAM | 19 | 95 | 22 | 2 | 5.0 | 1 | 31 |
Receiving
San Francisco 49ers
Player |
rec |
yds |
avg |
td |
yac |
lng |
drop |
|---|---|---|---|---|---|---|---|
| G.Kittle #85 | 5 | 75 | 15.0 | 1 | 26 | 34 | 1 |
| R.Pearsall #1 | 2 | 65 | 32.5 | 0 | 47 | 50 | 0 |
| C.McCaffrey #23 | 5 | 63 | 12.6 | 0 | 63 | 31 | 0 |
| S.Moore #9 | 3 | 27 | 9.0 | 0 | 6 | 9 | 0 |
| J.Jennings #15 | 1 | 16 | 16.0 | 0 | 0 | 16 | 0 |
| L.Farrell #89 | 1 | 9 | 9.0 | 0 | 6 | 9 | 0 |
| B.Robinson Jr #3 | 1 | 9 | 9.0 | 0 | 11 | 9 | 0 |
| J.Tonges #88 | 1 | 8 | 8.0 | 0 | 2 | 8 | 0 |
| TEAM | 19 | 272 | 14.3 | 1 | 161 | 50 | 1 |
Defense
San Francisco 49ers
Player |
tckl |
sck |
pdef |
int |
int yds |
td |
ff |
ffr |
|---|---|---|---|---|---|---|---|---|
| N.Bosa #97 | 2 | 1.0 | 1 | 0 | 0 | 0 | 0 | 1 |
| M.Williams #98 | 2 | 1.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| N.Martin #45 | 6 | 1.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| J.Jefferson #96 | 1 | 1.0 | 0 | 0 | 0 | 0 | 1 | 0 |
| D.Luter Jr #28 | 1 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| J.Pinnock #25 | 2 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| R.Green #0 | 5 | 0.0 | 2 | 0 | 0 | 0 | 0 | 0 |
| F.Warner #54 | 5 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Y.Gross-Matos #94 | 3 | 0.0 | 0 | 0 | 0 | 0 | 1 | 0 |
| D.Winters #53 | 1 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| D.Lenoir #2 | 0 | 0.0 | 1 | 1 | 1 | 0 | 0 | 0 |
| J.Graham #41 | 1 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| J.Peppers #34 | 5 | 0.0 | 0 | 0 | 0 | 0 | 0 | 0 |
| TEAM | 34 | 4.0 | 4 | 1 | 1 | 0 | 2 | 1 |
Kicking
San Francisco 49ers
Player |
fg |
fg pct |
lng |
xp |
xp pct |
50+ |
50+ pct |
|---|---|---|---|---|---|---|---|
| J.Moody #4 | 1 / 1 | 100.0 | 46 | 3 / 3 | 100.0 | 0 / 0 | 0.0 |
| T.Morstead #7 | 0 / 0 | 0.0 | 0 | 0 / 0 | 0.0 | 0 / 0 | 0.0 |
| TEAM | 1 / 1 | 100.0 | 46 | 3 / 3 | 100.0 | 0 / 0 | 0.0 |
Punting
San Francisco 49ers
Player |
punts |
yds |
avg |
tb |
in20 |
lng |
blk |
|---|---|---|---|---|---|---|---|
| T.Morstead #7 | 4 | 179 | 36.0 | 1 | 1 | 52 | 0 |
| TEAM | 4 | 179 | 44.8 | 1 | 1 | 52 | 0 |



