Vikings coach Mike Zimmer tends not to subscribe to the notion that the third exhibition game is a harbinger of how the season will go, and the Vikings' penultimate preseason contest a year ago — a ragged showing for their starters, followed by a furious rally for a win against the 49ers — didn't hold much predictive value for a 13-3 season.

As the team played closer to type in a 21-20 win over the Seattle Seahawks, though, it wasn't hard to imagine how both the strengths and weaknesses the Vikings showed could continue into the regular season.

Quarterback Kirk Cousins moved the Vikings into scoring position three times on four drives, in a resourceful performance that helped push the first-team offense's clunky showing last Saturday against Jacksonville into the background. The Vikings' starting defense, which has been sharp all preseason, permitted Seattle to run just three plays in the first quarter, before allowing a second-quarter TD drive.

"We were 3-for-3 in the red zone, 2-for-2 inside the 5-yard line. There were some good things," Zimmer said. "Defensively, for the most part, we did all right; they hit us on a couple traps early that we had to get squared away."

But with center Pat Elflein still on the physically-unable-to-perform list and starting linemen Mike Remmers and Rashod Hill playing only one series on Friday night, the Vikings offensive line struggled to open the holes it has created in the run game during much of the preseason. It meant a busy night for Cousins, who was hit four times in his 29 dropbacks.

And five days after winning the kicking competition over Kai Forbath, rookie Daniel Carlson pulled two 42-yard attempts to the left, churning the stomachs of Vikings fans already given to queasiness about the team's kicking situation because of events of recent years.

The Vikings will finish the preseason on Thursday night against Tennessee, and many of their starters figure to sit out. They have Super Bowl aspirations because of a deep roster, and they will spend the final week of the preseason trying to sand down whatever rough edges they can smooth out.

They had planned for Dalvin Cook to play just a few snaps in what is likely to be his only work of the preseason, and showed a hint of how they might use the running back when they lined him up in the slot on their first offensive play. He was hit in the backfield on the first carry of his return from last October's torn ACL, and gained only a yard on two carries. The Vikings ran 13 times for 27 yards in the first half, meaning Cousins would have to do plenty of work.

Cousins finished 17-for-28 in a busy first half, throwing for 182 yards as the Vikings ran 41 plays and held the ball for a total of 18:07.

In what figures to be Cousins' final work of the preseason, the Vikings' starting quarterback targeted running backs with 10 passes, looking for Cook once during his four-play return and targeting Latavius Murray seven times after that. The veteran had three catches for 32 yards in the first half, while fullback C.J. Ham had two for 26.

Cousins said there was "good and bad" from his performance, adding he'd made a list of the throws he thought he should have made: an out-breaking route at Adam Thielen's feet during a two-minute drill, two high throws to Murray in the flat, an inside throw to Stefon Diggs he thought should have gone for a touchdown.

"When you go 17-for-28 and there's a few you want back, you could have really had a great night," he said. "I feel like we just missed there."

The two backs posted 55 of their 58 combined receiving yards on the Vikings' 13-play, 97-yard touchdown drive, while Cousins connected with Diggs for 27 on an impressive back-shoulder throw on the third-to-last play of the first quarter.

The second quarter began with Bobby Wagner sacking Cousins after coming free through the line on a blitz (though a holding penalty on Shaquill Griffin negated the sack). Frank Clark would drill Cousins on the next play — an incomplete pass to Murray — before the Vikings finished the drive with two Murray runs.

Seattle hit Cousins a total of four times, registering one more shot on the quarterback when former Vikings tackle Tom Johnson walked guard Danny Isidora into the backfield before getting to Cousins.

In his first game as the incumbent kicker, Carlson pulled his first attempt left, meaning the Vikings would end their first drive without any points. They attempted a two-point conversion after Murray's touchdown; Zimmer said after the game he made the decision to let Carlson know "if he's going to miss them, I'm going to go for two."

When they got in field goal range again toward the end of the first half, Carlson missed left again, drawing a round of boos as he walked off the field.

"I don't know if I'm concerned about him in general," Zimmer said. "I'm going to chalk this one up to a bad night, but hopefully it gets better."