Here are grades for each position group in Sunday’s Lions’ 31-29 win:

Quarterback: A

Through the first six games of the season, Jared Goff is playing himself into the MVP conversation. He had his third perfect first half in the last four games and started 15-for-15 before his first incompletion on a tipped pass midway through the third quarter.

Goff completed 22-of-25 for 280 yards and a pair of touchdowns. His first scoring pass came on a perfectly placed ball to Amon-Ra St. Brown for 35 yards, and the second was a strike to Kalif Raymond. Another key play came when he stepped up in the pocket just enough to avoid a strip-sack and delivered a rocket across the middle to Tim Patrick.

Running backs: B+

David Montgomery briefly left the game early, setting the stage for Jahmyr Gibbs to have his first big game of the young season. Gibbs scored two touchdowns and surpassed 100 yards on the ground, including a career-long 45-yard run in the second quarter. Gibbs also added 44 rushing yards, pushing his all-purpose total to 160 yards.

He had 30 yards on the final drive, notching a 14-yard run and a 16-yard catch to help set up the game-winning field goal.

Montgomery returned to the game in the second quarter but struggled to get his footing. He had 31 yards on nine carries, and committed a fumble that was returned for a go-ahead touchdown by Vikings defender Ivan Pace Jr.

Wide receivers: A-

Amon-Ra St. Brown had a big game, giving him three straight against the Vikings in which he’s had at least 100 receiving yards and a touchdown catch. His scoring grab came in the second quarter, and he finished with eight catches for 112-yards.

While the rest of the receiving corps was mostly quiet, there were moments that will show up on tape from them as blockers.

Patrick, in particular, had a hand in St. Brown’s touchdown as he stayed in to help protect Goff.

Tight ends: B+

Sam LaPorta had two targets in Sunday’s game, catching one for 25 yards. It was another mostly quiet afternoon for the second-year tight end, but he continues to make his presence felt in the run game as a blocker. Brock Wright did not have a target.

Offensive line: B-

There was plenty of good, but also plenty of bad from the Lions’ offensive line. Kayode Awosika started in place of the injured Kevin Zeitler and had a first series to forget. He was flagged for holding on back-to-back plays, with the second being declined because he was beaten for a sack.

Awosika wound up being penalized three times, and center Frank Ragnow was the only member of the offensive line that did not draw a penalty. Penei Sewell was called for a false start, Graham Glasgow was whistled for a false start and a hold that was declined on Montgomery’s fumble and Taylor Decker was also called for holding.

Minnesota sacked Goff four times, including two by Andrew Van Ginkel. However, the line was able to consistently open run lanes for Gibbs and Montgomery.

Defensive line: C

The first game without Aidan Hutchinson had up-and-down results. There was a noticeable lack of edge pressure, as the Michigan product’s elite production was missed. However, there were bright spots most notably from Josh Paschal.

The Kentucky product notched the Lions’ first sack of the game when he wrestled Sam Darnold to the turf in the third quarter. DJ Reader recorded the only other quarterback hit, as the Lions couldn’t quite get around Darnold for much of the game.

Linebackers: B

Part of the solution to Hutchinson’s absence was to generate more pressure from linebacker blitzes. Malcolm Rodriguez and Jack Campbell had back-to-back sacks, though both resulted in minimal losses.

Trevor Nowaske also got in on the action, as he sacked Darnold on the final play of the game. Alex Anzalone led the team with eight tackles, including one for loss.

Rodriguez up a screen play on Minnesota’s first play from scrimmage and had seven tackles. Campbell also had seven tackles.

Secondary: B

Brian Branch continues to play at an elite level, as he generated a takeaway for the fourth time in four games played. He picked off Darnold on a diving play in the second quarter, which set up the Lions’ final first half touchdown.

Branch also nearly added a defensive touchdown to his resume, as he scooped and scored a forced fumble by Carlton Davis. The play was overturned due to Jalen Nailor stepping out of bounds.

Rookie cornerback Terrion Arnold passed an early test when Darnold threw to Jefferson in his direction, which the rookie exhibited solid coverage in forcing an incompletion. Kerby Joseph did not record an interception for the first time since Week 2, but had seven tackles.

Davis, meanwhile, was penalized twice. Nickel cornerback Amik Robertson was beat for a touchdown by Justin Jefferson, but the replay appeared to show Jefferson pushing off to make the catch.

Jefferson, who has tormented the Lions in recent years, had seven catches for 81 yards and a touchdown.

Special teams: B

The big story from Sunday’s game will be Jake Bates’ game-winning field goal, and rightfully so. Bates is an excellent story, going from college soccer player to the UFL. He remains perfect on field goals.

Coaching: B+

Campbell had a head-scratching decision early in the game, as the Lions tried a fake punt speed option. The call was likely the result of a favorable alignment by Minnesota’s return team, but it evidently didn’t work out and led to the Vikings’ fast start with a touchdown two plays later.

Outside of that, though, the Lions looked adequately prepared once they settled in. Ben Johnson’s offense cooked for much of the second quarter and into the third.

After stalling in the fourth quarter, the Lions’ offense turned it around for the game-winning drive.

This article was produced by the staff at Detroit Lions On SI. For more, visit si.com/nfl/lions