MINNEAPOLIS >> Mistakes mounted from one quarter to the next, from the 49ers’ special teams to their defense’s pass coverage to an offense lacking punch without Christian McCaffrey.

For their eighth straight visit, the 49ers lost to the host Minnesota Vikings, a 23-17 decision that came after a fourth-quarter comeback attempt.

“It was too sloppy on our part,” coach Kyle Shanahan said. “Two turnovers on offense, struggling on third down on offense and defense, special teams with a blocked punt is like a turnover. It was disappointing.”

The 49ers last won here in 1992, when Steve Young was at quarterback. Now, they are 1-1 for the fourth time in coach Kyle Shanahan’s eight seasons, unable to match the 2-0 starts that propelled their Super Bowl seasons in 2019 and ’23.

The 49ers play their first NFC West opponent next Sunday when they visit the Los Angeles Rams at SoFi Stadium, where the 49ers have a much better history than here; the 49ers have won all four regular-season visits since SoFi opened in 2020, although they did lose the 2021 season’s NFC Championship Game.

Minnesota simply made more big plays this game than the 49ers — in all three phases.

All-Pro linebacker Fred Warner made a bevy of plays to at least keep the 49ers close, from grabbing a first-half interception to forcing a goal-line fumble, as well as a tackle for loss, a third-down pass breakup, and a fumble-forcing sack out of bounds.

“That’s what gave us a chance,” Shanahan said of Warner’s two takeaways.

Shanahan lamented the 49ers’ woes on third downs. Their offense converted 2-of-10 third-down plays, and 1-of-3 on fourth down. Defensively, the 49ers allowed the Vikings to convert on 7-of-12 third-down opportunities.

A day after putting McCaffrey on Injured Reserve because of Achilles tendinitis, the 49ers got solid production for a second straight start from Jordan Mason, but their offense clammed up too often, and Brock Purdy committed a pair of second-half turnovers.

The 49ers’ closing quarter made things interesting, yet questionable. On third-and-1 from the 4-yard line, rather than call for a carry from 100-yard rusher Jordan Mason, the 49ers attempted a pass that nearly got intercepted before Deebo Samuel snagged the bobbling ball and allowed for an ensuing field goal with 1:12 remaining.

A fourth-and-goal throw from the 2-yard line in the first quarter backfired even more. That ended a 93-yard, scoreless drive, with Purdy’s pass getting tipped at the line and falling short of Jauan Jennings’ grasp. Minnesota took that momentum and ran away toward a home-opening win.

The 49ers defense gave up two touchdown passes to Sam Darnold, their backup last year, and each of those scoring strikes immediately followed momentum-swinging plays. Darnold’s 97-yard touchdown pass to Justin Jefferson put the 49ers behind 10-0, and it came two snaps after Purdy’s fourth-and-goal incompletion from the 2-yard line.

Darnold’s second touchdown pass made it a 20-7 lead in the third quarter, and it came on a 10-yard lob to Jalen Nailor after a coverage snafu between Charvarius Ward and Ji’Ayir Brown. On the preceding snap, Purdy threw his first interception of the season.

The Vikings nearly made it a three-score ballgame until Warner rushed to the rescue, punching the ball from Aaron Jones’ grasp at the 2-yard line, with Isaac Yidadom recovering at the 1. A touchdown run by Mason capped the ensuing 12-play, 99-yard drive with 10:16 remaining.

Mason finished with 100 yards on 20 carries for a strong encore from his 28-carry, 147-yard starting debut in Monday’s season-opening win over the Jets. But the 49ers got no rushing help elsewhere, aside from Purdy’s 12 yards on two scrambles; Samuel lost 10 yards on two carries, and rookie Isaac Guerendo was stopped for no gain on his first and only career carry.

Purdy got sacked six times, and when he did throw, he was 28-of-36 for 319 yards with a touchdown, an interception and a lost fumble.