| 1st | 2nd | 3rd | 4th | Tot | |
| TEN | 3 | 7 | 0 | 14 | 24 |
| SF | 7 | 10 | 14 | 6 | 37 |
Losing a game against a team with a 2-11 record can be a recipe for disaster for a team in the middle of a playoff hunt. Fortunately, the 49ers were able to avoid that fate on Sunday by taking care of business against the lowly Tennessee Titans in an offense-heavy 37-24 win at Levi's Stadium in Santa Clara.
The 49ers looked sharp on offense coming off a bye week, rolling up 430 total yards on the Titans while quarterback Brock Purdy threw for 290 yards and three touchdowns on 23-of-30 passing. The 49ers also did a significant amount of damage on third downs, converting 9-of-15 opportunities while adding one conversion on fourth down.
The Titans hung with the 49ers for a half, but the 49ers pulled away and didn't look back after a dominant third quarter that saw the 49ers score two touchdowns while running 20 plays to the Titans' six. Titans quarterback Cam Ward finished with 170 yards and two touchdowns on 18-of-29 passing.
49ers build halftime lead after scoring on each first-half possession
Things got off to a positive start for the 49ers, who held the Titans to a three-and-out to start the game before putting together a scoring drive on their opening possession. The drive spanned 70 yards on 12 plays, with the biggest gain coming on a 23-yard completion to tight end George Kittle on the third play of the drive to move the 49ers to the Tennessee 30. After several consecutive shorter gains, Purdy finished the drive with a four-yard touchdown pass to wide receiver Jauan Jennings on a 3rd-and-Goal to give the 49ers a 7-0 lead.
Purdy to Jennings puts the @49ers in front
TENvsSF on FOX/FOX Onehttps://t.co/HkKw7uXVnt pic.twitter.com/2Ygal1XFXu
— NFL (@NFL) December 14, 2025
The Titans got their offense moving on the second possession, largely due to running back Tony Pollard chipping in four carries for 42 yards on the drive. The Titans moved downfield to an eventual 1st-and-Goal situation at the 5-yard line, but after linebacker Dee Winters stopped wide receiver Chimere Dike for a seven-yard loss on that first down play, the 49ers were able to get off the field, allowing just a field goal.
Dee Winters with the big tackle for a loss and the Titans settle for the field goal pic.twitter.com/ItJLbuYHfC
— Coach Yac 🗣 (@Coach_Yac) December 14, 2025
Chunk plays helped the 49ers move downfield on their second possession, in particular a 30-yard completion to wide receiver Demarcus Robinson on a 3rd-and-3 and a 24-yard catch and run by Kittle that put the 49ers in a 1st-and-Goal. After a pass interference penalty put the 49ers at the 1, Christian McCaffrey finished the job with his ninth rushing touchdown of the year to give the 49ers a 14-3 lead.
CMC TD
TENvsSF on FOX/FOX Onehttps://t.co/HkKw7uXVnt pic.twitter.com/EA7fMk9Uqc
— NFL (@NFL) December 14, 2025
The Titans responded with a second straight scoring drive, this one carried by Ward's passing. After moving the ball to midfield, Ward connected on passes of 16 and 11 yards to wide receiver Chig Okonkwo to move the ball inside the 30, then a holding penalty backed the Titans up to the 34. But Ward then found tight end Gunnar Helm wide open for a completion inside the 10-yard line, then Helm did the rest to give the Titans their first touchdown of the game and cut the lead to 14-10.
WARD TO HELM FOR 34-YARD TD!
TENvsSF on FOX/FOX Onehttps://t.co/HkKw7uXVnt pic.twitter.com/6wK6aJe4L1
— NFL (@NFL) December 14, 2025
The 49ers took over at their own 35-yard line after a touchback on the ensuing kickoff, then they quickly found themselves in a hole after a first down incompletion and a sack on Purdy for a three-yard loss on second down. But Purdy came up with another big third-down conversion on the next play, finding wide receiver Ricky Pearsall for a 14-yard gain and a first down. The 49ers eventually moved inside the Titans' 20 with the help of two more third-down conversions, but they fell short when facing a 3rd-and-11 at the 15, which led to a 33-yard field goal by kicker Eddy Pineiro to open up a 17-10 lead with less than a minute left in the half.
Pineiro's kickoff after the field goal went out of bounds after the ball rolled off the tee, giving the Titans a break and the ball at their own 40. The Titans got a couple more breaks when their possession was kept alive on a third-down holding penalty called on cornerback Upton Stout and an interception was dropped by safety Malik Mustapha, but the 49ers then got a break when Ward overthrew an open Van Jefferson downfield with less than 20 seconds remaining. Eventually, the Titans worked their way to the 49ers' 33-yard line, where kicker Joey Slye set up a 50-yard field goal. But Slye's kick sailed to the right, leaving the score at 17-10 at halftime.
The teams were fairly even on the stat sheet, with the 49ers holding a narrow 179-173 edge in total yardage. The 49ers converted 7-of-8 third downs in the first half, while the Titans connected on 2-of-4. Both Purdy and Ward finished 10-of-15 passing with a touchdown in the first half, with Purdy totaling 135 yards and Ward 106.
49ers pull away in the third quarter
After spending a big portion of the first half executing lengthy drives, the 49ers made quick work of the Titans on their first drive of the second half. The 49ers started at their own 35-yard line after a touchback, then moved to the Titans' 15-yard line after a 14-yard completion to McCaffrey and a 38-yard completion to Pearsall. Following a two-yard run by McCaffrey, Purdy and Jennings connected for their second touchdown of the day, this one from 13 yards to take a 24-10 lead with just over two minutes gone in the third quarter.
Purdy to Jennings for their 2nd TD connection of the day!
TENvsSF on FOX/FOX Onehttps://t.co/HkKw7uXVnt pic.twitter.com/RqX5N5CP73
— NFL (@NFL) December 14, 2025
The Titans punted back to the 49ers on the next possession following a three-and-out, then the 49ers picked up where they left off on offense by moving across midfield on four plays after taking over at the 6-yard line. A 14-yard completion to Pearsall and a 26-yard scramble by Purdy put the ball at the 46-yard line, then McCaffrey ran across the 50 on an 8-yard run. A 4th-and-1 conversion by Purdy at the 33 followed by a 13-yard completion to Kittle put the ball inside the 20, then a run by McCaffrey and a 7-yard catch by fullback Kyle Juszczyk put the 49ers in a 1st-and-Goal at the 7. Then three plays later, Purdy found Kittle on a 3rd-and-Goal jump pass from the 1-yard line to cap a 15-play, 95-yard drive and open up a 31-10 lead. The drive took over nine minutes off the clock, giving the 49ers 14 second-half points while eating up most of the third quarter clock.
Purdy's third TD of the day goes to George Kittle!
TENvsSF on FOX/FOX Onehttps://t.co/HkKw7uXVnt pic.twitter.com/JlU7QJApIC
— NFL (@NFL) December 14, 2025
The Titans were forced to punt after another three-and-out, but stopped some of the bleeding from there on an unusual series of events that saw defensive tackle Jeffrey Simmons give them the ball on a strip sack before cutting the lead to 14 on a touchdown reception. Simmons pulled off a strip sack of Purdy on the third play of the 49ers' possession after the punt, giving the Titans the ball at the 49ers' 44-yard line after a recovery and nine-yard return by K Elam. A 43-yard completion to Van Jefferson put the ball at the 1-yard line, then Ward found Simmons wide open in the end zone after a wild scramble to trim the deficit to 31-17.
Cam Ward to JEFFERY SIMMONS for the TD!
TENvsSF on FOX/FOX Onehttps://t.co/HkKw7uXVnt pic.twitter.com/q6OfAvFbIZ
— NFL (@NFL) December 14, 2025
The next possession was a sloppy one for both teams, but it ended in a field goal from Pineiro to further ice the game for the 49ers. The 49ers began the possession at their own 40 after Slye sailed the kickoff out of bounds, then moved into Titans territory on a 20-yard completion to Jennings. Two penalties halted the drive and led to a 51-yard field goal attempt from Pineiro, which was no good. But Simmons was flagged for unnecessary roughness on the play, giving the 49ers a first down. The 49ers wound up moving backwards again after a holding penalty on guard Dominick Puni, but they were able to recover enough to give Pineiro a 37-yard field goal attempt, which was good to give the 49ers a 34-17 lead with under 10 minutes remaining.
The Titans responded with a 10-play, 64-yard drive that ended with a six-yard touchdown run from Pollard to bring them within 34-24 while taking just under four minutes off the clock. The 49ers then faced a 3rd-and-11 on the next possession and the prospect of giving the ball back to the Titans with over four minutes to play, but Purdy connected on another crucial third-down conversion, this one a 12-yard completion to Pearsall. The drive kept going into Titans territory on an 11-yard completion to wide receiver Kendrick Bourne, which led the Titans to call their final timeout. The 49ers held onto the ball until just over the one-minute mark before adding another field goal from Pineiro, this one from 40 yards to open up a 37-24 lead.
The 49ers moved to 10-4 on the season with the win, staying within one game of the Los Angeles Rams and Seattle Seahawks in the NFC West. The Titans fell to 2-12 with the loss.
Game Notes
Today marked the 16th meeting between the 49ers and Titans, dating back to 1970 when the Titans were the Houston Oilers. The 49ers now lead the series 10-6... The 49ers inducted tight end Brent Jones into their Hall of Fame on Sunday... Purdy's 26-yard run in the third quarter was a career-long... The road ahead gets more challenging for the 49ers, who will be facing three winning teams to close the season, starting with their final road game of the season against the Indianapolis Colts (8-6) and recently unretired quarterback Philip Rivers next Monday night. Home games against the Chicago Bears (10-4) and Seattle Seahawks (11-3) finish out the regular season schedule.
Scoring Summary
- Q1 07:54 — TEN 0, SF 7
J. Jennings 4 yd. pass from B. Purdy (E. Pineiro kick) (12 plays, 70 yds, 6:03) - Q1 01:26 — TEN 3, SF 7
J. Slye 25 yd. Field Goal (10 plays, 63 yds, 6:26) - Q2 13:07 — TEN 3, SF 14
C. McCaffrey 1 yd. run (E. Pineiro kick) (7 plays, 70 yds, 3:19) - Q2 07:52 — TEN 10, SF 14
G. Helm 34 yd. pass from C. Ward (J. Slye kick) (8 plays, 68 yds, 5:20) - Q2 01:00 — TEN 10, SF 17
E. Pineiro 33 yd. Field Goal (14 plays, 50 yds, 6:47) - Q3 13:00 — TEN 10, SF 24
J. Jennings 13 yd. pass from B. Purdy (E. Pineiro kick) (4 plays, 67 yds, 2:06) - Q3 02:14 — TEN 10, SF 31
G. Kittle 1 yd. pass from B. Purdy (E. Pineiro kick) (15 plays, 95 yds, 9:14) - Q4 14:25 — TEN 17, SF 31
J. Simmons 1 yd. pass from C. Ward (J. Slye kick) (2 plays, 44 yds, 0:30) - Q4 09:32 — TEN 17, SF 34
E. Pineiro 37 yd. Field Goal (8 plays, 41 yds, 4:48) - Q4 05:37 — TEN 24, SF 34
T. Pollard 6 yd. run (J. Slye kick) (10 plays, 64 yds, 3:55) - Q4 01:14 — TEN 24, SF 37
E. Pineiro 40 yd. Field Goal (10 plays, 43 yds, 4:23)
Game and Player Stats
| TEN | Team Stats | SF |
| 170 | Passing Yards | 292 |
| 136 | Rushing Yards | 138 |
| 306 | Total Yards | 430 |
| 5.86 | Avg Yards per Pass | 9.83 |
| 6.8 | Avg Yards per Run | 3.63 |
| 0 | Fumbles Lost | 1 |
| 0 | Int Thrown | 0 |
| 0 | Sacks Allowed | 2 |
| 00:22:55 | Time of Pos | 00:37:05 |
| 7 | Penalties | 6 |
| Titans Player Stats | ||||
| Passing | Cmp/Att | Yds | TDs | INTs |
| Cam Ward | 18/29 | 170 | 2 | 0 |
| Rushing | Att | Yds | Avg | TDs |
| Tony Pollard | 14 | 104 | 7.4 | 1 |
| Tyjae Spears | 3 | 34 | 11.3 | 0 |
| Kalel Mullings | 1 | 3 | 3 | 0 |
| Cam Ward | 1 | 2 | 2 | 0 |
| Chimere Dike | 1 | -7 | -7 | 0 |
| Receiving | Rec | Tgt | Yds | TDs |
| Gunnar Helm | 4 | 4 | 49 | 1 |
| Van Jefferson | 1 | 5 | 43 | 0 |
| Chig Okonkwo | 4 | 6 | 33 | 0 |
| Elic Ayomanor | 1 | 1 | 17 | 0 |
| Chimere Dike | 4 | 5 | 17 | 0 |
| Tony Pollard | 1 | 2 | 8 | 0 |
| Tyjae Spears | 2 | 2 | 2 | 0 |
| Jeffery Simmons | 1 | 1 | 1 | 1 |
| James Proche | 0 | 1 | 0 | 0 |
| Kicking | FG | Att | Lg | XP |
| Joey Slye | 1 | 2 | 25 | 3 |
| Punting | No | Avg | I20 | Lg |
| Johnny Hekker | 3 | 39.3 | 1 | 56 |
| Defense | T-A | Sck | INTs | FF |
| Kendell Brooks | 8-5 | 0 | 0 | 0 |
| T'Vondre Sweat | 7-4 | 0 | 0 | 0 |
| Jeffery Simmons | 7-3 | 1 | 0 | 1 |
| Amani Hooker | 7-2 | 0 | 0 | 0 |
| Marcus Harris | 7-2 | 0 | 0 | 0 |
| Cody Barton | 5-4 | 0 | 0 | 0 |
| Darrell Baker | 5-1 | 0 | 0 | 0 |
| James Williams | 4-0 | 0 | 0 | 0 |
| Jihad Ward | 3-2 | 0 | 0 | 0 |
| Arden Key | 2-2 | 0 | 0 | 0 |
| Sebastian Joseph-Day | 2-1 | 0 | 0 | 0 |
| Kaiir Elam | 2-1 | 0 | 0 | 0 |
| Jaylen Harrell | 2-1 | 1 | 0 | 0 |
| Cedric Gray | 16-9 | 0 | 0 | 0 |
| James Lynch | 1-1 | 0 | 0 | 0 |
| Kevin Winston | 1-0 | 0 | 0 | 0 |
| 49ers Player Stats | ||||
| Passing | Cmp/Att | Yds | TDs | INTs |
| Brock Purdy | 23/30 | 295 | 3 | 0 |
| Rushing | Att | Yds | Avg | TDs |
| Christian McCaffrey | 22 | 73 | 3.3 | 1 |
| Brock Purdy | 7 | 44 | 6.3 | 0 |
| Brian Robinson | 9 | 21 | 2.3 | 0 |
| Receiving | Rec | Tgt | Yds | TDs |
| Ricky Pearsall | 6 | 7 | 96 | 0 |
| George Kittle | 8 | 9 | 88 | 1 |
| Jauan Jennings | 3 | 5 | 37 | 2 |
| Demarcus Robinson | 2 | 2 | 36 | 0 |
| Kendrick Bourne | 2 | 3 | 17 | 0 |
| Christian McCaffrey | 1 | 1 | 14 | 0 |
| Kyle Juszczyk | 1 | 1 | 7 | 0 |
| Fumbles | Fum | Lost | ||
| Brock Purdy | 1 | 1 | 0 | 0 |
| Kicking | FG | Att | Lg | XP |
| Eddy Pineiro | 3 | 3 | 40 | 4 |
| Punt Returns | Att | Avg | TDs | Lg |
| Skyy Moore | 1 | 18 | 0 | 18 |
| Defense | T-A | Sck | INTs | FF |
| Curtis Robinson | 7-4 | 0 | 0 | 0 |
| Clelin Ferrell | 6-4 | 0 | 0 | 0 |
| Dee Winters | 5-3 | 0 | 0 | 0 |
| Deommodore Lenoir | 4-3 | 0 | 0 | 0 |
| Renardo Green | 4-2 | 0 | 0 | 0 |
| Jason Pinnock | 3-2 | 0 | 0 | 0 |
| Bryce Huff | 2-2 | 0 | 0 | 0 |
| Upton Stout | 2-2 | 0 | 0 | 0 |
| CJ West | 2-0 | 0 | 0 | 0 |
| Malik Mustapha | 10-4 | 0 | 0 | 0 |
| Luke Gifford | 1-1 | 0 | 0 | 0 |
| Kalia Davis | 1-1 | 0 | 0 | 0 |
| Robert Beal | 1-1 | 0 | 0 | 0 |
| Keion White | 1-1 | 0 | 0 | 0 |
| Ji'Ayir Brown | 1-0 | 0 | 0 | 0 |