| 1st | 2nd | 3rd | 4th | Tot | |
| SF | 7 | 10 | 3 | 14 | 34 |
| NYG | 7 | 0 | 3 | 14 | 24 |
In a battle featuring two teams with two injury-depleted rosters, the San Francisco 49ers proved to be the one with much more gas in the tank as they put together six scoring drives and 380 yards of offense on route to a 34-24 win over the New York Giants at MetLife Stadium in East Rutherford, New Jersey.
The 49ers opened up a 17-7 halftime lead behind the passing of quarterback Mac Jones, who finished 19-of-24 for 235 yards with two touchdowns and zero interceptions. Then, in the second half, the 49ers moved largely to their ground attack against a Giants run defense ranked as the league's worst and were able to finish things out with big games from running backs Christian McCaffrey (28 carries, 106 yards, one touchdown) and Brian Robinson Jr.(five carries, 53 yards, one touchdown). McCaffrey also chipped in five catches for 67 yards and one receiving touchdown.
Giants quarterback Jaxson Dart finished with 191 yards and two touchdowns on 24-of-33 passing in a losing effort, while also leading his team in rushing with eight carries for 56 yards and one touchdown.
49ers find a first-half groove after a slow start
It was an inauspicious start for the 49ers defense, which began the game by allowing a 10-play, 64-yard scoring drive to the Giants. The Giants moved steadily downfield on the drive with a series of runs and short passes, then on a 1st-and-10 from the 49ers' 15-yard line, Dart connected on a short completion to tight end Theo Johnson, who deflected off a missed tackle by cornerback Deommodore Lenoir and rumbled into the end zone to give the Giants a 7-0 lead.
Theo Johnson powers in for the Giants TD!
SFvsNYG on CBS/Paramount+https://t.co/HkKw7uXVnt pic.twitter.com/wFZARJG1Cy
— NFL (@NFL) November 2, 2025
The 49ers answered with an efficient drive of their own that spanned 68 yards on 12 plays and culminated in a five-yard touchdown pass to running back Christian McCaffrey. The drive included a gutsy call from head coach Kyle Shanahan, who went for a first down on a 4th-and-1 play from the 49ers' 41-yard line. Jones ran for a first down on the play, then went on to complete six-of-six passes for 47 yards on the drive, with the final completion going to a wide-open Christian McCaffrey on a 3rd-and-3 to tie the game at 7.
CMC WIIIIDE OPEN
SFvsNYG on CBS/Paramount+https://t.co/HkKw7uXVnt pic.twitter.com/pHO5qGHSuB
— NFL (@NFL) November 2, 2025
The 49ers bounced back on defense with a three-and-out on the Giants' second possession, then the offense got to work again, putting together an eight-play, 80-yard drive that ended in a touchdown pass to wide receiver Jauan Jennings for a 14-7 lead. A 12-yard completion to fullback Kyle Juszczyk started the drive, then McCaffrey and Robinson Jr. moved the ball into Giants territory with 36 yards on three carries. After a 21-yard completion to wide receiver Kendrick Bourne put the ball in the red zone, Jones connected with Jennings from 11 yards out three plays later for his second touchdown pass of the game.
Mac Jones to Jauan Jennings!
SFvsNYG on CBS/Paramount+https://t.co/HkKw7uXVnt pic.twitter.com/jwZa4OBF9Z
— NFL (@NFL) November 2, 2025
The Giants moved to midfield on the next possession before two consecutive false start penalties on third down moved them into a 3rd-and-13, which they were unable to convert. The 49ers took over at their own 18 after the punt, then moved over the 50 before the Giants forced their first punt of the game. The Giants began at their own 7 but were put into a 3rd-and-12 after a sack by defensive end Clelin Ferrell and were soon forced to punt back to the 49ers once again.
Didn't see him coming 😮?💨
📺: CBS pic.twitter.com/el6Dat5Ftr
— San Francisco 49ers (@49ers) November 2, 2025
Skyy Moore returned the punt to the Giants' 41-yard line, giving the 49ers a short field with 3:32 left in the half. But the Giants came up with a key second-down sack of their own from defensive tackle Rakeem Nunez-Roches that put the 49ers in a 3rd-and-17. A 12-yard completion to McCaffrey got the 49ers back into field goal range at the 36-yard line with two minutes remaining. After trying to draw the Giants offsides, the 49ers sent on kicker Eddy Piñiero for a 54-yard attempt. Piniero booted a low line-drive of a kick that barely cleared the crossbar, but it was enough to give the 49ers a 17-7 lead.
Eddy Piñeiro makes the 54 yard field goal 💵
He's now 18-18 on field goal attempts this season pic.twitter.com/YfLLpXH60M
— Coach Yac 🗣 (@Coach_Yac) November 2, 2025
The Giants took over at their own 27 with three timeouts remaining but punted back to the 49ers after a third-down drop by Johnson. The 49ers began at their own 29 with 38 seconds remaining with the intent on putting together one last drive, but those plans went awry when Jones was hit on first down by linebacker Brian Burns, who sent the ball flying into the hands of linebacker Abdul Carter. The play was ruled a fumble, giving the Giants the ball at the 27. But fortunately for the 49ers, the Giants turned their opportunity into a rather inept final possession that included a first-down run for no gain, another dropped pass, and a missed field goal attempt by kicker Graham Gano that drifted wide left from 45 yards. The 49ers then ran out the clock to take a 17-7 lead into the half.
Brian Burns forces the loose ball, and Abdul Carter recovers!
SFvsNYG on CBS/Paramount+https://t.co/HkKw7uXVnt pic.twitter.com/YCk1WrLdoY
— NFL (@NFL) November 2, 2025
With the play on the late second-quarter sack ruled a fumble, at least initially, Jones finished the half a perfect 14-of-14 with 143 yards and two touchdowns. The 49ers totaled 190 yards in the first half to just 98 from the Giants, who only mustered 34 yards after their opening drive.
49ers running backs take over to ice the game in the second half
The Giants opened the second half with another mistake that helped the 49ers, this one a kickoff that missed the landing zone and started the 49ers off at their own 40. The 49ers moved inside the red zone with the help of a 21-yard completion to Moore but were stopped from there and were forced to settle for another field goal, this one from 33 yards to cap a 13-play, 46-yard drive and extend the lead to 20-7.
The Giants then put together their second scoring drive of the game, with an assist from the 49ers. After starting at their own 26-yard line, the Giants moved across midfield on a short pass to wide receiver Wandale Robinson and an 11-yard run by running back Tyrone Tracy. On the next play, the Giants moved to the 49ers' 25-yard line when an 18-yard run by Dart was complemented by a holding penalty by cornerback Upton Stout. Another run by Dart combined with an unnecessary roughness penalty on linebacker Tatum Bethune put the ball inside the 10, but the 49ers held on defense from there with the help of a third-down stop by safety Malik Mustapha. The Giants chose to finish the drive with a 22-yard field goal, cutting the lead to 20-10 with 6:42 left in the third quarter.
The 49ers were held to a three-and-out on the next possession after an illegal shift penalty negated what would have been a first down on a 3rd-and-1, then the Giants began at their own 21. The 49ers forced a punt after six plays due in large part to a second down sack by defensive end by Sam Okuayinonu and a third down pass broken up by cornerback Renardo Green.
"Nowhere for Dart to go."
📺: CBS pic.twitter.com/eOoyCTZqCZ
— San Francisco 49ers (@49ers) November 2, 2025
The 49ers took over at their own 24-yard line after the kickoff, then after a 13-yard completion to Kendrick Bourne to open the drive, the 49ers took the ground to hammer away at the Giants' beleaguered run defense. McCaffrey gave the 49ers five straight runs to move the ball to the Giants' 33-yard line, then from there Robinson took over with runs of five and 10 yards, followed by an 18-yard dash into the end zone for a touchdown. The drive took almost five minutes off the clock and gave the 49ers a 27-10 lead with 11:35 left in the fourth quarter.
Brian Robinson Jr. trucks his way to a 49ers TD
SFvsNYG on CBS/Paramount+https://t.co/HkKw7uXVnt pic.twitter.com/bNbN6b4lHR
— NFL (@NFL) November 2, 2025
The Giants responded with a seven-play, 65-yard drive that kept them in the game with a six-yard touchdown run from Dart to cut the lead to 27-17. After starting at the Giants' 35-yard line, Dart opened the drive with a 24-yard completion to wide receiver Darius Slayton that moved the ball across midfield. A series of short gains along with an offsides penalty on defensive end Mykel Williams put the ball inside the 10, then Dart ran in to cut the deficit to 10 with just under eight minutes to play.
Jaxson Dart runs it in for 6
SFvsNYG on CBS/Paramount+https://t.co/HkKw7uXVnt pic.twitter.com/avNab5xupS
— NFL (@NFL) November 2, 2025
Robinson Jr. followed his touchdown with a 40-yard kickoff return to the 49ers' 41-yard line, then on the second play of the drive, Jones connected with McCaffrey on a 39-yard catch and run that moved the ball to the Giants' 20-yard line. A 4-yard run from McCaffrey combined with a tripping penalty on the Giants moved the ball inside the 10, then three plays later McCaffrey iced the game with a three-yard touchdown run to give the 49ers a 34-17 lead with 3:59 remaining.
Christian McCaffrey continues his monster game with a gain of 39 yards here pic.twitter.com/7voACkDVVw
— Coach Yac 🗣 (@Coach_Yac) November 2, 2025
The Giants responded with a nine-play, 69-yard drive that ended in a 24-yard touchdown pass from Dart to wide receiver Gunner Olszewski to cut the lead to 34-24 with 1:21 remaining. The 49ers recovered the ensuing onside kick and ran out the clock from there to seal the win.
The 49ers improved to 6-3 on the season with the victory, while the Giants fell to 2-7 with the loss.
Game Notes
With his touchdown in the fourth quarter, McCaffrey became the first player in NFL history to have 16 games of one or more rushing touchdowns and one or more receiving touchdowns, breaking a tie with Marshall Faulk... Sunday's game marked the 44th all-time meeting between the 49ers and Giants in what has been a historic rivalry featuring eight postseason meetings. The 49ers now lead the series 23-21... The 49ers were 2.5-point favorites heading into the game... Piniero's first-half field goal put him at 18-of-18 for the season and 6-of-6 from 50 yards or more... Coming into the game, McCaffrey needed 98 scrimmage yards to become the seventh-fastest player in NFL history to reach 12,000 for his career. He surpassed the milestone in the third quarter... Next up for the 49ers is a home game against the Los Angeles Rams, which will kick off at 1:25 p.m. PT on November 9 (FOX). The 49ers will then take to the road to face the Arizona Cardinals, which will wrap up NFC West play until they host the Seattle Seahawks in the season finale.
Scoring Summary
- Q1 10:58 — SF 0, NYG 7
T. Johnson 15 yd. pass from J. Dart (G. Gano kick) (10 plays, 64 yds, 4:10) - Q1 04:21 — SF 7, NYG 7
C. McCaffrey 5 yd. pass from M. Jones (E. Pineiro kick) (12 plays, 68 yds, 6:34) - Q2 13:14 — SF 14, NYG 7
J. Jennings 11 yd. pass from M. Jones (E. Pineiro kick) (8 plays, 80 yds, 4:03) - Q2 02:00 — SF 17, NYG 7
E. Pineiro 54 yd. Field Goal (4 plays, 5 yds, 1:37) - Q3 09:59 — SF 20, NYG 7
E. Pineiro 33 yd. Field Goal (13 plays, 46 yds, 5:05) - Q3 06:45 — SF 20, NYG 10
G. Gano 22 yd. Field Goal (8 plays, 64 yds, 3:13) - Q4 11:41 — SF 27, NYG 10
B. Robinson 18 yd. run (E. Pineiro kick) (9 plays, 76 yds, 4:58) - Q4 07:57 — SF 27, NYG 17
J. Dart 6 yd. run (G. Gano kick) (7 plays, 65 yds, 3:43) - Q4 04:16 — SF 34, NYG 17
C. McCaffrey 3 yd. run (E. Pineiro kick) (6 plays, 60 yds, 3:39) - Q4 01:27 — SF 34, NYG 24
G. Olszewski 24 yd. pass from J. Dart (G. Gano kick) (9 plays, 69 yds, 2:52)
Game and Player Stats
| SF | Team Stats | NYG |
| 221 | Passing Yards | 179 |
| 159 | Rushing Yards | 117 |
| 380 | Total Yards | 296 |
| 9.79 | Avg Yards per Pass | 5.79 |
| 4.08 | Avg Yards per Run | 5.57 |
| 1 | Fumbles Lost | 0 |
| 0 | Int Thrown | 0 |
| 2 | Sacks Allowed | 2 |
| 00:33:11 | Time of Pos | 00:26:49 |
| 6 | Penalties | 5 |
| 49ers Player Stats | ||||
| Passing | Cmp/Att | Yds | TDs | INTs |
| Mac Jones | 19/24 | 235 | 2 | 0 |
| Rushing | Att | Yds | Avg | TDs |
| Christian McCaffrey | 28 | 106 | 3.8 | 1 |
| Brian Robinson | 5 | 53 | 10.6 | 1 |
| Mac Jones | 4 | 4 | 1 | 0 |
| Adrian Martinez | 1 | -1 | -1 | 0 |
| George Kittle | 1 | -3 | -3 | 0 |
| Receiving | Rec | Tgt | Yds | TDs |
| Christian McCaffrey | 5 | 6 | 67 | 1 |
| Jauan Jennings | 4 | 5 | 41 | 1 |
| Kendrick Bourne | 2 | 2 | 34 | 0 |
| George Kittle | 4 | 4 | 32 | 0 |
| Skyy Moore | 1 | 1 | 21 | 0 |
| Jordan Watkins | 1 | 1 | 19 | 0 |
| Kyle Juszczyk | 1 | 2 | 12 | 0 |
| Luke Farrell | 1 | 1 | 9 | 0 |
| Demarcus Robinson | 0 | 1 | 0 | 0 |
| Fumbles | Fum | Lost | ||
| Mac Jones | 1 | 1 | 0 | 0 |
| Kicking | FG | Att | Lg | XP |
| Eddy Pineiro | 2 | 2 | 54 | 4 |
| Punting | No | Avg | I20 | Lg |
| Thomas Morstead | 2 | 43.5 | 1 | 50 |
| Punt Returns | Att | Avg | TDs | Lg |
| Skyy Moore | 3 | 11.3 | 0 | 14 |
| Defense | T-A | Sck | INTs | FF |
| Renardo Green | 6-4 | 0 | 0 | 0 |
| Upton Stout | 6-2 | 0 | 0 | 0 |
| Dee Winters | 5-3 | 0 | 0 | 0 |
| Malik Mustapha | 5-2 | 0 | 0 | 0 |
| Ji'Ayir Brown | 4-1 | 0 | 0 | 0 |
| Sam Okuayinonu | 4-1 | 1 | 0 | 0 |
| Kalia Davis | 3-2 | 0 | 0 | 0 |
| Clelin Ferrell | 3-2 | 1 | 0 | 0 |
| Jordan Elliott | 2-1 | 0 | 0 | 0 |
| Deommodore Lenoir | 2-0 | 0 | 0 | 0 |
| Tatum Bethune | 16-8 | 0 | 0 | 0 |
| Kevin Givens | 1-1 | 0 | 0 | 0 |
| Robert Beal | 1-1 | 0 | 0 | 0 |
| Mykel Williams | 1-1 | 0 | 0 | 0 |
| Giants Player Stats | ||||
| Passing | Cmp/Att | Yds | TDs | INTs |
| Jaxson Dart | 24/33 | 191 | 2 | 0 |
| Rushing | Att | Yds | Avg | TDs |
| Jaxson Dart | 8 | 56 | 7 | 1 |
| Devin Singletary | 8 | 43 | 5.4 | 0 |
| Tyrone Tracy | 5 | 18 | 3.6 | 0 |
| Receiving | Rec | Tgt | Yds | TDs |
| Darius Slayton | 5 | 7 | 62 | 0 |
| Wan'Dale Robinson | 9 | 11 | 46 | 0 |
| Theo Johnson | 3 | 6 | 27 | 1 |
| Gunner Olszewski | 1 | 1 | 24 | 1 |
| Tyrone Tracy | 3 | 4 | 19 | 0 |
| Devin Singletary | 2 | 2 | 8 | 0 |
| Ray-Ray McCloud | 1 | 1 | 5 | 0 |
| Kicking | FG | Att | Lg | XP |
| Graham Gano | 1 | 2 | 22 | 3 |
| Punting | No | Avg | I20 | Lg |
| Jamie Gillan | 5 | 35.8 | 1 | 60 |
| Defense | T-A | Sck | INTs | FF |
| Tyler Nubin | 8-6 | 0 | 0 | 0 |
| Korie Black | 8-6 | 0 | 0 | 0 |
| Demetrius Flannigan-Fowles | 7-1 | 0 | 0 | 0 |
| Rakeem Nunez-Roches | 6-4 | 1 | 0 | 0 |
| Darius Muasau | 4-2 | 0 | 0 | 0 |
| Brian Burns | 4-2 | 1 | 0 | 1 |
| Deonte Banks | 4-1 | 0 | 0 | 0 |
| D.J. Davidson | 3-1 | 0 | 0 | 0 |
| Jarrick Bernard-Converse | 2-2 | 0 | 0 | 0 |
| Bobby Okereke | 14-7 | 0 | 0 | 0 |
| Dane Belton | 13-9 | 0 | 0 | 0 |
| Kayvon Thibodeaux | 1-1 | 0 | 0 | 0 |
| Darius Alexander | 1-1 | 0 | 0 | 0 |
| Dexter Lawrence | 1-0 | 0 | 0 | 0 |
| Andru Phillips | 1-0 | 0 | 0 | 0 |
| Abdul Carter | 1-0 | 0 | 0 | 0 |