No Dalvin Cook, no problem.

The Vikings were missing their injured star running back Sunday but the offense still flourished in a 30-17 victory over Seattle in the home opener.

With no fans allowed to attend last year due to the coronavirus pandemic, the game was Minnesota’s first with fans at U.S. Bank Stadium in the regular season since Dec. 29, 2019. And the Vikings gave them lots to cheer about.

“I told the team that it’s the best offensive performance that I’ve seen in the eight years I’ve been here,” said Vikings coach Mike Zimmer, whose team got its first win after starting the season with two road losses by a combined four points.

Alexander Mattison filled in admirably for Cook, rushing 26 times to match his career high with 112 yards. He also caught six passes for 59 yards. Cook injured his ankle late in last week’s game at Arizona but remained in the game. Zimmer held out hope that Cook might be able to play after not practicing all week but said he got the word on Sunday morning that he was out.

Newsletter signup for email alerts

“Feels good when you’re able to get the ball and be productive,” Mattison said.

Kirk Cousins completed 30 of 38 passes for 323 yards and three touchdowns as the Vikings roared back from a 17-7 second-quarter deficit. His favorite target was wide receiver Justin Jefferson, who caught nine passes for 118 yards and a touchdown. Jefferson, a rookie last season who was playing before fans for the first time at U.S. Bank Stadium, performed his well-known dance “The Griddy” after his 3-yard touchdown reception put the Vikings up for good at 21-17 with 16 seconds left in the first half.

“It was crazy,” Jefferson said. “It was so energetic, I was waiting for that moment for a long time now, so to finally score a touchdown in front of the fans and then hit ‘The Griddy.’ ”

The win ended the Vikings’ seven-game losing streak against the Seahawks, all with Russell Wilson as their quarterback. The Vikings’ previous win over Seattle came all the way back in 2009 at the Metrodome. Wilson arrived in the NFL as a rookie in 2012, when he beat the Vikings for the first time at the starter.

“That was my first time beating him since I’ve been in the league, so that was huge for me,” said Vikings linebacker Eric Kendricks, who entered the NFL in 2015 and had been on the losing side five straight times. “It definitely was nice.”

It looked for much of the first half as if it would be the same old, same old as the Seahawks (1-2) took leads of 7-0 and 17-7. But in the second quarter, with Seattle leading 17-7, a holding penalty on the Seahawks’ Ugo Amadi nullified a third-down sack of Cousins, and the game completely changed after that.

Cousins soon threw a 15-yard touchdown pass to Adam Thielen to cut the deficit to 17-14, and the Vikings were on their way.

“It’s a razor’s edge,” said Cousins, whose first touchdown pass was seven yards in the first quarter to tight end Tyler Conklin to tie the score 7-7. “I remember after we scored on that drive walking off the field thinking that without that penalty we were punting … We were 0-2 going into the game on a razor’s edge too, so you look at it both ways.”

The Vikings opened the season with a 27-24 overtime loss at Cincinnati, then a 34-33 loss at Arizona. They were doomed in the opener by a Cook fumble late in overtime, then Greg Joseph missed a 37-yard field goal against the Cardinals on the final play.

The Vikings had no issues with Joseph on Sunday. He made all three of his field-goal attempts, hitting from 43, 34 and 20 yards, and all three of his extra-point attempts.

“I wouldn’t say we’re in a good position, but I think we’re going to try to ride this momentum,” Thielen said of the Vikings improving to 1-2. “This is a momentum league. We knew we just had to get a win. It’s been frustrating for the first two weeks, but we knew we were just going to focus on this week.”

The Vikings rolled up 453 yards of total offense. They allowed 389 yards, but just 81 in the second half.

In the first half, Wilson completed 15 of 19 passes for 218 yards and a touchdown. But he was shut down in Seattle’s scoreless second half, and finished 23 of 32 for 298 yards.

“Just settling down, especially in the second half,” Kendricks said of Minnesota’s defense.

Meanwhile, the second half was when Mattison really got going. He had 76 of his rushing yards after intermission.

“We go out there and prepare to be the best offense we can be, so for us to go out there and prove (Sunday), it was a huge win for us individually and as a group,” Mattison said.