Recap: How the Vikings beat 49ers 23-17 in home opener

The Vikings improve to 2-0, stunning the reigning NFC champion San Francisco 49ers for the second year in a row, but star receiver Justin Jefferson left the game with a quad injury.

The Minnesota Star Tribune
September 15, 2024 at 11:41PM
Vikings wide receiver Justin Jefferson celebrates after a 97-yard touchdown catch in the second quarter of the team's home opener against the 49ers. (Carlos Gonzalez/The Minnesota Star Tribune)

This is the live report from the Vikings’ home opener against the San Francisco 49ers at U.S. Bank Stadium. To read Ben Goessling’s analysis of the Vikings’ 23-17 win, go here.

Vikings coach Kevin O’Connell’s messages before the season, which focused on the team’s play style, all came with a consistent meaning: If the 2024 Vikings were to be successful, they’d do it with a style similar to the one the 49ers had used to make four NFC Championship Game trips in five years.

The Vikings couldn’t have delivered a much stronger statement about their play style than the one they made Sunday afternoon in a 23-17 win over the 49ers.

They built a 20-7 lead in the third quarter after Josh Metellus intercepted Brock Purdy, and they sacked the 49ers quarterback a total of six times. Even though the 49ers held the ball for 34:48, the Vikings countered with a number of big plays, like C.J. Ham’s first-quarter blocked punt and Sam Darnold’s 97-yard touchdown throw to Justin Jefferson.

Darnold finished 17-for-26 for 268 yards and two touchdowns, while running five times for 32 yards.

Why it happened: After the 49ers held the ball for nearly 20 minutes in the first half, the game looked like one where San Francisco might eventually muscle its way to victory. But the Vikings defense stood up in the third quarter, sacking Purdy five times and setting up a touchdown when Metellus intercepted a pass that had bounced off several sets of hands before settling in his arms at the 49ers 10.

They also got more than a few big plays from Darnold on third down, including two scrambles to extend drives and a key series of conversions on a long fourth-quarter drive that sealed the game.

What it means: It’s the second straight year the Vikings have won as home underdogs against the 49ers, and while they’ll have plenty of injury concerns after this one, the victory’s value can’t be understated as an endorsement for how they want to play and for what they can do with Darnold. They troubled Purdy with pressure throughout the game, gained 146 yards on the ground and showed their confidence in Darnold’s ability to push the ball downfield off play action. We talked all offseason about the difficulty of the Vikings’ early schedule; the fact they’re 2-0, before another tough home game against the Houston Texans, stands in marked contrast to their 0-3 start last season.

Play of the game: After a goal-line stand in the second quarter, the Vikings started their drive from the 49ers 2 with a Blake Brandel false start. Two plays later, O’Connell called a deep shot off play action that had Darnold setting up in his own end zone while Justin Jefferson and Jalen Nailor broke downfield off a stack set. Nailor’s crossing route occupied Charvarius Ward, while Jefferson got a step on George Odum and hauled in Darnold’s pass 55 yards downfield. Jefferson crossed the field and crossed back, picking up one last block from Nailor to finish the play with a 97-yard touchdown. According to NFL Next Gen Stats, Jefferson traveled 127.5 yards on the play, the most on any scoring play since the NFL began its player tracking service in 2016.

Turning point: There are too many of them to pick from in a game where both teams had drives of 98 yards or longer, the Vikings blocked a punt and San Francisco forced two turnovers deep in its own territory. But we’ll go with this: After the 49ers pulled to within six, Darnold began a drive from his own 30-yard line with Jefferson out of the game and Aaron Jones in the medical tent. He completed three third-down passes for first-down conversions on the drive, including a 26-yard throw to Nailor that he placed between two 49ers defenders. The drive didn’t finish with a touchdown but led to a Will Reichard field goal that put the Vikings up by two scores.

Up next: vs. Texans, Sept. 22, noon. Houston (1-0) plays Chicago on Sunday night. — BEN GOESSLING

View post on X

Here’s how the Vikings’ home opener played out:

2:57 p.m.: 49ers pull within 6 with field goal

49ers quarterback Brock Purdy completed seven straight passes to march San Francisco back into scoring range, where 49ers kicker Jake Moody hit a 31-yard field goal to make it a one-possession game. The Vikings recovered the ensuing onside kick while up 23-17 with 1:11 remaining. — ANDREW KRAMMER

2:46 p.m.: Vikings burn clock, take 9-point lead

Rookie kicker Will Reichard, the sixth-round pick out of Alabama, is a perfect 9 for 9 to begin his NFL career on field goals and extra points. He drilled a 27-yard field goal with 3:30 left in the game to give the Vikings a late 23-14 lead over the reigning NFC champion 49ers.

Quarterback Sam Darnold moved the chains on three separate third downs, including a 26-yard strike over the middle to receiver Jalen Nailor. The Vikings are 7 of 12 on third downs against San Francisco. The drive took 6 minutes 46 seconds off the clock. — ANDREW KRAMMER

2:30 p.m.: 49ers inch closer with 99-yard TD drive

Two catches by 49ers receiver Deebo Samuel, including one that survived a challenge by Vikings head coach Kevin O’Connell, and a roughing the passer penalty on Vikings edge rusher Jihad Ward helped propel a 99-yard drive by San Francisco to make this a one-possession game.

49ers running back Jordan Mason capped the drive with a 10-yard rushing touchdown, his first of the afternoon. Mason is up to 20 carries for 100 rushing yards in front of a split crowd at U.S. Bank Stadium. “Let’s go Niners!” chants were being drowned out by booing Vikings fans during the intermission after that Mason touchdown. — ANDREW KRAMMER

2:18 p.m.: Injury to Jefferson mars Vikings’ third quarter

The Vikings and 49ers are locked into a battle of hot potato.

Minnesota seemed to have the edge following two 49ers turnovers: a Brock Purdy interception from safety Josh Metellus and a Purdy “fumble” where he was hit while throwing. The Vikings jumped out to a 20-7 lead, scoring a touchdown off the pick. But after the Purdy fumble, the Vikings lost star receiver Justin Jefferson to an apparent lower leg injury.

Jefferson collided with center Garrett Bradbury during a 5-yard run by Ty Chandler. Jefferson stayed down on the field for a couple minutes. He got up and limped toward the sideline, where he eventually headed inside toward the locker room after being evaluated in the medical tent. Jefferson had four catches for 133 yards, including a 97-yard touchdown before exiting. He is questionable to return with a quad injury.

49ers edge rusher Nick Bosa was also slow to get up on the same play. He walked to the 49ers sideline under his own power.

Running back Aaron Jones fumbled on the next play when 49ers linebacker Fred Warner punched the ball out near the goal line. — ANDREW KRAMMER

View post on X

2:02 p.m.: Purdy INT leads to Vikings TD

The second half fizzled until the Vikings defense provided the spark. 49ers quarterback Brock Purdy threw an interception to safety Josh Metellus, who was the second and fourth defender to touch the bobbled ball before coming down with it. Linebacker Blake Cashman first got hands on the pass intended for 49ers fullback Kyle Juszczyk. Metellus then bobbled the ball to safety Camryn Bynum, who tipped it right back to Metellus.

On the next play from the 49ers’ 10-yard line, Sam Darnold faked a handoff to Aaron Jones and found receiver Jalen Nailor wide open in the corner of the end zone for a touchdown. The Vikings jumped out to a 20-7 lead after rookie kicker Will Reichard’s extra point.

The Vikings defense has been in one word: disruptive. Brian Flores’ group has deflected five passes (one interception) and landed five hits (three sacks) on Purdy so far. — ANDREW KRAMMER

View post on X

1:48 p.m.: Milestones for Jefferson

According to the Vikings, today against the 49ers, Vikings wide receiver Justin Jefferson has:

  • his 400th career reception in his 62nd game, making him the third-fastest player to reach that number in NFL history after Michael Thomas (56) and Odell Beckham Jr. (61)
  • his 30th 100-yard receiving game, becoming the fastest player in NFL history to reach that milestone. Hall of Famer Lance Alworth had the previous mark of 64 games.
  • surpassed 6,000 career receiving yards.

1:28 p.m.: Halftime analysis

We’ve reached intermission at U.S. Bank Stadium, and the Vikings are up 13-7 after Sam Darnold rebounded from his interception to direct a field goal drive before halftime.

The Vikings converted two third-and-longs on the drive, with a 16-yard pass to Justin Jefferson on a third-and-13 and an 18-yard scramble from Darnold on third-and-10 to set up Will Reichard’s 39-yard field goal. Darnold has picked up two first downs with scrambles; he slid in the middle of the field in time for the Vikings to call timeout and set up Reichard’s kick.

The 49ers have run four straight drives of 2:30 or more, and held the ball for 19:13 in the first half. They’ve got 223 yards on 33 plays, and their run game has started to take effect, with Jordan Mason running 12 times for 72 yards. But the Vikings have 251 yards of their own, highlighted by Darnold’s 97-yard score to Jefferson and Ty Chandler’s 25-yard run.

They’ll have the second-half kickoff after extending their lead to six at halftime. If they’re able to open with a touchdown drive, take a 13-point lead and make the 49ers lean more heavily on Brock Purdy, they could be in position to get to 2-0.

BEN GOESSLING

1:14 p.m.: Darnold INT leads to 49ers TD

The first half of this game has swung on big plays. The 49ers’ first touchdown of the day was precipitated by an interception that set up a potential 14-point swing.

The Vikings were in pursuit of a 17-0 lead deep in 49ers territory when Fred Warner read Sam Darnold’s eyes on a post route for Trent Sherfield Sr. and intercepted his pass while dropping into coverage. Brock Purdy found Deebo Samuel for 28 yards on the next play, and Jordan Mason continued the rushing attack that’s starting to take its toll. His three runs on the drive covered 30 yards, before Purdy hit George Kittle with a scoring pass that made it 10-7. It was the fourth straight 49ers drive that last at least 2:30, after a three-and-out to start the game.

The Vikings will have 1:54 before halftime, and they’ll receive the second-half kickoff. — BEN GOESSLING

Vikings receiver Justin Jefferson scores a touchdown on a 97-yard touchdown pass during the team's home opener against the 49ers. (Carlos Gonzalez/The Minnesota Star Tribune)

12:52 p.m.: 97-yard TD from Darnold to Jefferson

The Vikings kept the 49ers out of the end zone when San Francisco decided to throw on fourth-and-goal from the 2, rather than sticking with the run game that had been working through much of the drive. Three plays later, the Vikings responded with a thunderbolt.

The Vikings kept the 49ers out of the end zone when San Francisco decided to throw on fourth-and-goal, rather than sticking with the run game that had been working through much of the drive. Three plays later, the Vikings responded with a thunderbolt.

On a second-and-9 from the Vikings’ 3, Kevin O’Connell called a play-action pass with a pair of deep routes from Jalen Nailor and Justin Jefferson out of a stack set. Nailor’s crossing route pulled one defender, while Jefferson got past Ji’Ayir Brown and George Odum and Darnold flung one that traveled 52 yards in the air. Jefferson has talked all summer about the importance of trust from his quarterback, and he got it from both O’Connell and Darnold on that play; the coach dialed up an aggressive concept from deep in his own territory, and Darnold bet on his own arm strength as well as Jefferson’s route-running and ball-tracking skills.

The result was the longest touchdown of Jefferson’s career (and the second longest in Vikings history), and a 10-0 lead for the Vikings.

BEN GOESSLING

View post on X

12:37 p.m.: First-quarter analysis

The Vikings have a 3-0 lead over the 49ers, having survived a couple of their own first-quarter mistakes.

They lost 13 yards on a botched play that sent both Johnny Mundt and Justin Jefferson in motion, before Mundt drifted into the path of Darnold’s dropback. The quarterback had to avoid Mundt, and tried flipping a jump pass that Aaron Jones couldn’t catch. The Vikings recovered the loose ball, but had to punt at the end of the series. Dallas Turner tried downing Ryan Wright’s punt at the goal line, but the rookie carried it into the end zone for a touchback.

C.J. Ham’s blocked punt set up the only points of the game so far, leading to Will Reichard’s 22-yard field goal. The 49ers had 80 yards in the first quarter to the Vikings’ 66, though the Vikings averaged 5.6 yards per rush in the first quarter (thanks in part to a 16-yard scramble from Darnold to pick up a first down after he was flushed from the pocket).

The Vikings have put Stephon Gilmore on Brandon Aiyuk’s side of the field early, and things are already getting chippy between the cornerback and receiver. After a Jordan Mason run late in the first quarter, Gilmore gave Aiyuk a shove while the two were working on the backside of the play, and the two exchanged words as they went back to their huddles. — BEN GOESSLING

Vikings fullback C.J. Ham (30) blocks a punt by 49ers punter Mitch Wishnowsky (3) in the first quarter of Minnesota's home opener Sunday. (Jerry Holt/The Minnesota Star Tribune)

12:26 p.m.: Blocked punt leads to Vikings’ first score

Last week, the Vikings fell behind 3-0 after C.J. Ham’s fumble gave the Giants a short field. This week, it was Ham who put the Vikings in scoring range with an early big play.

The fullback broke through the middle of the 49ers’ line on Mitch Wishnowsky’s punt, blocking the kick before Theo Jackson recovered the loose ball and returned it to the 49ers’ 24. The Vikings had a first-and-goal series after Aaron Jones’ 14-yard gain on a swing pass, but couldn’t finish the drive after Sam Darnold’s third-down pass to Jalen Nailor was tipped by safety George Odum in the end zone.

Will Reichard kicked a 22-yard filed goal to put the Vikings ahead 3-0. — BEN GOESSLING

11:40 a.m.: Did you know?

The 49ers are trying to end an odd streak in Minnesota. They haven’t won in Minneapolis since Dec. 13, 1992, when Amp Lee ran for 134 yards and two touchdowns in a game the 49ers won 20-17 despite the Vikings sacking Steve Young six times.

Since then, the 49ers have lost seven straight in Minnesota, including the home debuts of two different Vikings starting quarterbacks. Kirk Cousins threw two touchdown passes while Mike Hughes ran one of Jimmy Garoppolo’s three interceptions back for a touchdown in 2018. And in 2009, the Vikings pulled out a 27-24 win on perhaps Brett Favre’s most famous throw in purple: his 32-yard last-second touchdown pass to Greg Lewis in the back of the Metrodome end zone. — BEN GOESSLING

11:15 a.m.: Vikings-49ers predictions

After posting the most lopsided victory of the Kevin O’Connell era with a 22-point win over the Giants, the Vikings open their home schedule with what might be their toughest game of the year against a 49ers team that has reached the Super Bowl or NFC Championship Game four of the past five years. Can they repeat their Week 1 success? Can they pull off an upset like they did last season?

10:40 a.m.: Vikings-49ers inactives

The hip injury that Vikings safety Harrison Smith picked up in the middle of this week isn’t enough to keep him sidelined from Sunday’s game against the 49ers.

Smith is officially active after being in and out of practices and listed questionable to play. He played nearly every snap in last week’s win against the New York Giants. Smith has appeared in 177 of 196 (90%) possible regular season games through 13 seasons.

Right tackle Brian O’Neill (elbow) and right guard Ed Ingram (triceps) are also active after being listed as questionable. Both had their reps limited in Friday’s practice.

Receiver Jalen Nailor, the 2022 sixth-round pick, is expected to make his second NFL start replacing Jordan Addison.

Addison won’t get a chance to provide an encore to his first meeting with the 49ers, when he had a 60-yard touchdown in last year’s Vikings win at U.S. Bank Stadium. Addison suffered a second ankle injury in the past month when he was tackled low by a Giants defender last week. He did not practice this week.

On Saturday, the NFL levied a fine of $4,696 for unnecessary roughness on Giants linebacker Darius Muasau, who tackled Addison. The NFL also fined Giants cornerback Adoree Jackson $9,804 for unnecessary roughness on an apparent hip drop tackle on Vikings tight end Johnny Mundt. Neither player was penalized during the game.

Receiver Trishton Jackson is active for the first time this season.

The Vikings elevated running back Myles Gaskin and defensive lineman Jonah Williams from the practice squad for depth. The team can elevate Gaskin, the veteran special teamer, one more time before he needs to be signed to the 53-man active roster in order to play. Players can be elevated three times per season.

The 49ers will not be at full strength.

Running back Christian McCaffery was placed on injured reserve on Saturday due to a calf injury and Achille tendinitis. Running back Jordan Mason, undrafted in 2022 out of Georgia Tech, will get the start after running for 147 yards in San Francisco’s Week 1 win over the Jets.

San Francisco’s Pro Bowl safety Talanoa Hufanga (knee) and linebacker Dee Winters (ankle) are both inactive.

Vikings’ inactives: Addison (ankle), OT Walter Rouse, DT Jalen Redmond, DT Levi Drake Rodriguez, CB Fabian Moreau, CB Dwight McGlothern

49ers’ inactives: Hufanga, Winters, OL Ben Bartch, CB Darrell Luther Jr.

— ANDREW KRAMMER

To get exclusive analysis on the Vikings by Ben Goessling in your inbox every Friday, sign up for the free Access Vikings newsletter here.

about the writers

Ben Goessling

Sports reporter

Ben Goessling covers the Vikings for the Star Tribune. He has covered the team since 2012, and has previously covered the Twins, Wild, Washington Nationals and prep sports.

See More

Andrew Krammer

Reporter

Andrew Krammer covers the Vikings for the Star Tribune, entering his sixth NFL season. From the Metrodome to U.S. Bank Stadium, he's reported on everything from Case Keenum's Minneapolis Miracle, the offensive line's kangaroo court to Adrian Peterson's suspension.

See More

More from Vikings

card image

Vikings coach Kevin O’Connell said Wednesday that wide receiver Justin Jefferson participated in Wednesday’s walk-through and was limited in practice, but Jordan Addison is day-to-day.

card image