| 1st | 2nd | 3rd | 4th | Tot | |
| DEN | 3 | 0 | 0 | 11 | 14 |
| SF | 0 | 3 | 7 | 14 | 24 |
Sunday's game against the Denver Broncos was perhaps the most physical and taxing of the season so far for the San Francisco 49ers, but they fought through it in the end -- with the help of a couple nice bounces and some late heroics from tight end George Kittle in a 24-14 win.
Players fought through heat in excess of 90 degrees at Levi's Stadium in Santa Clara, California, along with rugged, hard-hitting play on both sides of the ball that resulted in a number of injuries for each team. The game was deadlocked at 3-3 in the third quarter when the 49ers turned a fumble recovery on a punt into a touchdown, and then, after building a 17-6 lead, the 49ers fought off a late Broncos comeback when Kittle took a pass from Brock Purdy with less than three minutes remaining and rumbled 56 yards for a game-sealing touchdown.
Purdy finished 19-of-30 for 218 yards with two touchdowns and zero interceptions, while Bo Nix completed 25-of-42 passes for 214 yards and one touchdown for the Broncos. The 49ers won the battle on the ground as well, rushing for 140 yards on 35 carries while holding the Broncos to 82 yards on 22 carries.
Low-scoring first half ends in a tie after last-second field goal block
The Broncos won the pregame coin toss and elected to receive the opening kickoff, but they didn't get the start they were looking for and punted to the 49ers after a three-and-out. The 49ers opened on offense at their own 6-yard line and moved to the 36-yard line on eight plays before punting back to the Broncos.
The Broncos started their second possession at their own 11-yard line and moved to the 49ers' 33-yard line before being driven back by a holding penalty on offensive lineman and former 49er Mike McGlinchey. They were forced to settle for a 52-yard field goal from Wil Lutz, giving them a 3-0 lead after a 13-play, 55-yard drive.
The 49ers began their second possession at their own 35-yard line after a touchback and quickly moved across midfield on a 22-yard run by wide receiver Deebo Samuel. But after three short gains by Samuel and running back Christian McCaffrey, the 49ers elected to go for a first down on 4th-and-1 at the 34-yard line and were stopped short, turning the ball over on downs to the Broncos.
Broncos defense stands tall on 4th down 🐴
DENvsSF on CBS/Paramount+
— NFL (@NFL) October 4, 2026
Stream on @NFLPlus pic.twitter.com/YERbC45ifh
The 49ers forced another three-and-out after the turnover on downs and took over at their own 12-yard line following a punt. The 49ers followed with a three-and-out of their own and punted back to the Broncos with just over 10 minutes remaining in the half. The Broncos started at their own 30 after the punt and moved across midfield with the help of back-to-back third-down conversions, but on a 3rd-and-5 at the 49ers' 42-yard line, safety Malik Mustapha came up with a dazzling deflection on a Nix pass and forced a punt back to the 49ers.
Mustapha breaks it up 🙅?♂?
📺 CBS pic.twitter.com/nMlTBcldjy
— San Francisco 49ers (@49ers) October 4, 2026
5:01 remained on the clock as the 49ers began their next possession at their own 20-yard line. An 18-yard completion to wide receiver Mike Evans opened the drive, followed by runs of two yards by McCaffrey and seven yards by Purdy to set up a 3rd-and-1. McCaffrey stormed across midfield with a 10-yard gain to convert the 3rd-and-1, then Samuel added 20 more yards on a second-down end-around to advance the ball to the 23-yard line as the clock moved to the two-minute warning.
Slime on the move 🏃?♂?
📺 CBS pic.twitter.com/nQNlY4de3q
— San Francisco 49ers (@49ers) October 4, 2026
A 12-yard completion to fullback Kyle Juszczyk moved the 49ers to the 11-yard line, and runs of two yards by running back Kaelon Black and three yards by Purdy set up a 3rd-and-5 at the 6. But the drive stopped there as a Purdy pass into the end zone intended for Evans fell incomplete, and kicker Eddy Pineiro was brought on to tie the game at 3 with a 24-yard field goal with 1:36 left in the half.
The 49ers were able to force a punt after six plays, giving them the ball at their own 18-yard line with 41 seconds left in the half. A 24-yard second-down completion to Evans put the ball at the 42-yard line with 30 seconds remaining. The clock stopped as Pro Bowl cornerback Patrick Surtain limped off after a non-contact injury, then the 49ers took a timeout with 25 seconds remaining after a short completion to McCaffrey. Purdy ran out of bounds near midfield on the next play with 18 seconds on the clock, then an 8-yard completion gave the 49ers a first down at the Broncos' 41-yard line with 13 seconds remaining. Purdy then spiked the ball at the 36-yard line after a five-yard completion to McCaffrey, but a 54-yard field goal attempt by Pineiro was blocked by defensive lineman Zach Allen as time expired, leaving the score tied at 3 as the teams headed to the locker room for halftime.
Broncos block the FG to end the first half!
DENvsSF on CBS/Paramount+
— NFL (@NFL) October 4, 2026
Stream on @NFLPlus pic.twitter.com/G80EeqPecY
The 49ers outgained the Broncos 190-125 in the first half while holding a 101-32 advantage on the ground. Purdy finished the half 10-of-16 for 89 yards, while Nix completed 14-of-24 passes for 93 yards.
Slow-moving first half turns into an action-packed finish in the second half
The 49ers opened the second half with possession but punted after 55 seconds due to a three-and-out. The Broncos held onto the ball for six plays on their first possession of the second half before punting back to the 49ers, who started their second possession at their own 8-yard line.
A second consecutive 49ers three-and-out followed the Broncos' punt, but a strange pair of events from there helped lead the 49ers to the game's first touchdown. The first unexpected twist came on the punt when return specialist Marvin Mims was ruled to have fumbled the ball when his wrist hit the turf during a tackle by defensive back Siran Neal. Neal recovered the fumble, giving the 49ers the ball back at the Broncos' 28-yard line.
Big break for the 49ers! Special play on special teams 😤
DENvsSF on CBS/Paramount+
— NFL (@NFL) October 4, 2026
Stream on @NFLPlus pic.twitter.com/Kfb879a0ke
Four plays later, the 49ers faced a 4th-and-1 at the Broncos' 19-yard line. They elected to go for a first down instead of a field goal and wound up getting a lucky bounce when a botched snap landed in the hands of Kaelon Black, who ran to the 17-yard line for a first down.
Heads up play by Kaelon Black. Unreal lucky first down on 4&1 pic.twitter.com/y30AKLMHFE
— Christian (@ChristianR_Vill) October 4, 2026
An 11-yard run by Purdy gave the 49ers a 1st-and-goal at the 7-yard line, then a 6-yard completion to Samuel moved the ball to the 1-yard line. Two plays later, Purdy escaped pressure to loft a touchdown pass to a wide open Samuel, giving the 49ers a 10-3 lead with just over four minutes left in the third quarter.
DEEBO FINDS THE END ZONE 🕺
📺 CBS pic.twitter.com/GMw45odjja
— San Francisco 49ers (@49ers) October 4, 2026
The Broncos took over at their own 15-yard line after getting called for an illegal block during the kickoff and soon faced a 3rd-and-6 from their own 19. The Broncos converted on a 30-yard completion to wide receiver Patrick Bryant, although the completion proved costly as Bryant was carted off with a leg injury after the play.
The Broncos then moved to the 49ers' 30-yard line as the game moved into the fourth quarter but were soon stopped on a 3rd-and-10 play and were forced to settle for a 40-yard field goal from Lutz to cut the lead to 10-6. The 49ers took over at their own 26-yard line after the kickoff and opened with a first down pass on a dazzling completion to Juszczyk, who needed to be helped off the field after taking a hit to the knee on the play.
Kyle Juszczyk is staying down after taking a BIG hit.
The 49ers medical staff is coming out to check on him. pic.twitter.com/5iehnGChZV
— Aggregate (@AggregateSports) October 4, 2026
A nine-yard completion to Evans then moved the ball across midfield, while McCaffrey added a 14-yard run to move the 49ers to the Broncos' 35-yard line. The 49ers moved to the 23-yard line after an eight-yard catch by Samuel and a third-down run by Black, then were helped by a defensive holding call that moved the ball to the 18. A 17-yard completion to Evans put the 49ers in a 1st-and-goal situation at the 1-yard line, and McCaffrey finished the drive by getting across the goal line on second down to give the 49ers a 17-6 lead with 8:52 remaining in the game.
CMC touchdown!
DENvsSF on CBS/Paramount+
— NFL (@NFL) October 4, 2026
Stream on @NFLPlus pic.twitter.com/eO7Rd1K71H
The Broncos answered with their first touchdown of the game, coming on a pass to wide receiver Jaylen Waddle after an eight-play, 70-yard drive. The drive opened with an 18-yard pass to running back RJ Harvey, then stayed alive four plays later when a Harvey fumble was recovered by offensive lineman Quinn Meinerz. Nix later found Waddle from 13 yards out to finish the drive, then a two-point conversion run from Tyler Badie trimmed the 49ers' lead to 17-14 with 4:05 remaining.
Jaylen Waddle's first TD as a Bronco!
DENvsSF on CBS/Paramount+
— NFL (@NFL) October 4, 2026
Stream on @NFLPlus pic.twitter.com/Z4yGw8NGYk
But the Broncos' momentum was stopped thanks to the game's final highlight play, courtesy of Purdy and Kittle. The 49ers began at their own 31-yard line after the kickoff and moved to the 42-yard line after a two-yard run on third down by Purdy. Then, after a two-yard run by McCaffrey on first down, Purdy found Kittle open for a short completion, then Kittle broke free and dashed to the end zone, giving the 49ers a 24-14 lead with 2:15 left to play.
GEORGE. KITTLE.
DENvsSF on CBS/Paramount+
— NFL (@NFL) October 4, 2026
Stream on @NFLPlus pic.twitter.com/fynYAzwRMn
The Broncos moved close enough on their final possession to give Lutz a chance at a 58-yard field goal, but Lutz missed right to give the ball back to the 49ers. The 49ers kneeled on the ball from there to close out the win and move to 4-0 on the season. The Broncos fell to 2-2 with the loss.
Game Notes
Purdy was not sacked in the game, making it four straight games to start the season without a sack... The blocked field goal at the end of the first half was the first of Pineiro's career... Sunday's game was the 17th meeting between the 49ers and Broncos and the first since an 11-10 win by the Broncos on September 25, 2022. The 49ers now hold a 9-8 all-time advantage in the series... The 49ers were listed as 2.5-point favorites heading into Sunday's game... The 49ers will be on the road next week for their first divisional away game of the season against the Seattle Seahawks (3-1). The game will kick off at 4:25 p.m. ET/1:25 p.m. PT and will air on FOX.
Scoring Summary
- Q1 01:48 — DEN 3, SF 0
W. Lutz 52 yd. Field Goal (13 plays, 55 yds, 7:48) - Q2 01:38 — DEN 3, SF 3
E. Pineiro 24 yd. Field Goal (12 plays, 74 yds, 3:25) - Q3 04:22 — DEN 3, SF 10
D. Samuel 1 yd. pass from B. Purdy (E. Pineiro kick) (9 plays, 28 yds, 5:25) - Q4 14:12 — DEN 6, SF 10
W. Lutz 40 yd. Field Goal (11 plays, 63 yds, 5:07) - Q4 08:55 — DEN 6, SF 17
C. McCaffrey 1 yd. run (E. Pineiro kick) (9 plays, 74 yds, 5:16) - Q4 04:10 — DEN 14, SF 17
J. Waddle 13 yd. pass from B. Nix (T. Badie run) (8 plays, 70 yds, 4:47) - Q4 02:25 — DEN 14, SF 24
G. Kittle 56 yd. pass from B. Purdy (E. Pineiro kick) (5 plays, 69 yds, 1:50)
Game and Player Stats
| DEN | Team Stats | SF |
| 214 | Passing Yards | 218 |
| 82 | Rushing Yards | 140 |
| 296 | Total Yards | 358 |
| 5.1 | Avg Yards per Pass | 7.27 |
| 3.73 | Avg Yards per Run | 4 |
| 1 | Fumbles Lost | 0 |
| 0 | Int Thrown | 0 |
| 0 | Sacks Allowed | 0 |
| 00:30:53 | Time of Pos | 00:29:07 |
| 7 | Penalties | 1 |
| Broncos Player Stats | ||||
| Passing | Cmp/Att | Yds | TDs | INTs |
| Bo Nix | 25/42 | 214 | 1 | 0 |
| Rushing | Att | Yds | Avg | TDs |
| J.K. Dobbins | 11 | 40 | 3.6 | 0 |
| RJ Harvey | 7 | 25 | 3.6 | 0 |
| Bo Nix | 2 | 10 | 5 | 0 |
| Tyler Badie | 2 | 7 | 3.5 | 0 |
| Receiving | Rec | Tgt | Yds | TDs |
| RJ Harvey | 10 | 10 | 68 | 0 |
| Pat Bryant | 3 | 3 | 47 | 0 |
| Jaylen Waddle | 5 | 6 | 35 | 1 |
| Tyler Badie | 2 | 2 | 32 | 0 |
| J.K. Dobbins | 2 | 2 | 12 | 0 |
| Marvin Mims | 1 | 3 | 10 | 0 |
| Evan Engram | 1 | 5 | 6 | 0 |
| Courtland Sutton | 1 | 6 | 4 | 0 |
| Adam Trautman | 0 | 1 | 0 | 0 |
| Fumbles | Fum | Lost | ||
| Talanoa Hufanga | 1 | 0 | 0 | 0 |
| RJ Harvey | 1 | 0 | 0 | 0 |
| Marvin Mims | 1 | 1 | 0 | 0 |
| Kicking | FG | Att | Lg | XP |
| Wil Lutz | 2 | 3 | 52 | 0 |
| Punting | No | Avg | I20 | Lg |
| Jeremy Crawshaw | 5 | 45.2 | 4 | 57 |
| Defense | T-A | Sck | INTs | FF |
| Brandon Jones | 9-3 | 0 | 0 | 0 |
| Zach Allen | 5-3 | 0 | 0 | 0 |
| Justin Strnad | 5-3 | 0 | 0 | 0 |
| Talanoa Hufanga | 4-2 | 0 | 0 | 0 |
| Pat Surtain | 4-2 | 0 | 0 | 0 |
| Jahdae Barron | 3-2 | 0 | 0 | 0 |
| D.J. Jones | 3-1 | 0 | 0 | 0 |
| Malcolm Roach | 3-1 | 0 | 0 | 0 |
| Nik Bonitto | 3-1 | 0 | 0 | 0 |
| Kris Abrams-Draine | 3-0 | 0 | 0 | 0 |
| Riley Moss | 2-1 | 0 | 0 | 0 |
| Que Robinson | 2-1 | 0 | 0 | 0 |
| Alex Singleton | 14-7 | 0 | 0 | 0 |
| Ja'Quan McMillian | 1-1 | 0 | 0 | 0 |
| Jonah Elliss | 1-1 | 0 | 0 | 0 |
| Jordan Jackson | 1-0 | 0 | 0 | 0 |
| Eyioma Uwazurike | 1-0 | 0 | 0 | 0 |
| 49ers Player Stats | ||||
| Passing | Cmp/Att | Yds | TDs | INTs |
| Brock Purdy | 19/30 | 218 | 2 | 0 |
| Rushing | Att | Yds | Avg | TDs |
| Christian McCaffrey | 15 | 52 | 3.5 | 1 |
| Deebo Samuel | 3 | 44 | 14.7 | 0 |
| Brock Purdy | 10 | 29 | 2.9 | 0 |
| Kaelon Black | 6 | 13 | 2.2 | 0 |
| Jacob Cowing | 1 | 2 | 2 | 0 |
| Receiving | Rec | Tgt | Yds | TDs |
| Mike Evans | 5 | 8 | 76 | 0 |
| George Kittle | 4 | 6 | 70 | 1 |
| Kyle Juszczyk | 2 | 2 | 28 | 0 |
| Deebo Samuel | 5 | 6 | 26 | 1 |
| Christian McCaffrey | 3 | 5 | 18 | 0 |
| Brandin Cooks | 0 | 1 | 0 | 0 |
| Jacob Cowing | 0 | 1 | 0 | 0 |
| Fumbles | Fum | Lost | ||
| Deebo Samuel | 1 | 0 | 0 | 0 |
| Kicking | FG | Att | Lg | XP |
| Eddy Pineiro | 1 | 2 | 24 | 3 |
| Punting | No | Avg | I20 | Lg |
| Corliss Waitman | 4 | 52 | 1 | 61 |
| Defense | T-A | Sck | INTs | FF |
| Fred Warner | 7-4 | 0 | 0 | 0 |
| Upton Stout | 6-2 | 0 | 0 | 0 |
| Marques Sigle | 6-2 | 0 | 0 | 0 |
| Deommodore Lenoir | 4-1 | 0 | 0 | 0 |
| Ji'Ayir Brown | 4-1 | 0 | 0 | 0 |
| Gracen Halton | 3-3 | 0 | 0 | 0 |
| Renardo Green | 3-0 | 0 | 0 | 0 |
| Osa Odighizuwa | 2-2 | 0 | 0 | 0 |
| Sebastian Valdez | 2-1 | 0 | 0 | 0 |
| Romello Height | 2-0 | 0 | 0 | 0 |
| Dre Greenlaw | 12-5 | 0 | 0 | 1 |
| Khalid Kareem | 1-1 | 0 | 0 | 0 |
| Naquan Jones | 1-1 | 0 | 0 | 0 |
| Keion White | 1-1 | 0 | 0 | 0 |
| Matthew Judon | 1-0 | 0 | 0 | 0 |
| Ogbo Okoronkwo | 1-0 | 0 | 0 | 0 |
| Jack Jones | 1-0 | 0 | 0 | 0 |
| Malik Mustapha | 1-0 | 0 | 0 | 0 |
More info on: Kaelon Black, Ji'Ayir Brown, Brandin Cooks, Jacob Cowing, Mike Evans, Renardo Green, Dre Greenlaw, Gracen Halton, Romello Height, Jack Jones, Naquan Jones, Kyle Juszczyk, Khalid Kareem, George Kittle, Deommodore Lenoir, Christian McCaffrey, Malik Mustapha, Siran Neal, Osa Odighizuwa, Ogbo Okoronkwo, Brock Purdy, Deebo Samuel, Marques Sigle, Upton Stout, Sebastian Valdez, Corliss Waitman, Fred Warner, Keion White
Comments