Although the 49ers lost the game 32-31, on a soul-crushing, two-point conversion by QB Taylor Heinicke, their starters dazzled in the first half, giving the fans a bevy of hope for the 2017 season. As QB Brian Hoyer was leading touchdown drives and the 49ers' defensive line was controlling the game, you couldn't help but wonder: are the 49ers really this good?
Minnesota had one of the top defenses last year and added two solid running backs to an offense that was missing exactly that. They rebuilt the offensive line and are looking for more continuity after fielding eight different combinations last season. At the same time, you're thinking: could the Vikings be this bad?
Let's run it back for you if you didn't get a chance to catch the 49ers' domination in the first half. For the first defensive play of the game, LB Reuben Foster blew up a play in the flat, taking down RB Dalvin Cook for a loss, similar to what you saw at Alabama all of last season. A bad snap from C Nick Easton and QB Sam Bradford just has to fall on the ball to protect it. A zone look on third down allowed for a Vikings' completion, but the 49ers hit the receiver immediately after the play. Three and out.
Now was the real test: the 49ers' first-team offense has been sub-par in the preseason and needed to step it up in their final showing before the season opener against Carolina. This drive was vintage Kyle Shanahan. Use the running attack to set up the passing game. Start out with a RB Carlos Hyde run for five yards. Then come back with a pass to WR Pierre Garcon -- who was looking like a bigger WR Anquan Boldin on the field.
Follow that with another Hyde carry for two yards. Then back to Garcon for 16 yards. Wash. Rinse. Repeat. But here comes the home run play. WR Marquise Goodwin blows past the defense for a 46-yard touchdown pass from Hoyer that would put the 49ers up 7-0. We had heard all training camp about the chemistry that's been developing between Hoyer and Goodwin and we finally saw it on display.
Goodwin celebrates with his now patented "track" celebration and the 49ers were showing signs of life on offense. Immediately, the defense gets a stop and gives the ball right back to the offense.
Although the first drive was rather quick, taking up only 2:29 and five plays, this next drive would be ten plays and chew up 5:31 on the clock. Exactly what the doctor ordered and what we'll need to see in the regular season.
A lot of short passes to the running backs and a FB Kyle Juszczyk sighting early in the drive. Then RB Carlos Hyde lines up in the slot like a WR and catches a 24-yard dart from Hoyer for a touchdown. 14-0 -- 49ers.
Following these two drives were a series of punts by both teams and the first-team offense and defense for the 49ers was officially done for the day as they headed to halftime.
After having two games that were filled with penalties and offensive miscues, the 49ers came out blazing hot in their prime-time dress rehearsal game and showed off what they could be capable of. There'll be growing pains throughout the season, but it's these kind of games that could make it worthwhile for a 49ers' fan.
There was a lot of action in the second half as well, primarily led by RB Raheem Mostert, who showed up out of nowhere. He had four rushes for 26 yards, but had 2 catches for 104 yards. QB C.J. Beathard came out misfiring early and went 1-of-5 for 13 yards with an interception, before Mostert helped pad his stats.
Beathard was missing high on some open targets -- a problem that was prevalent at Iowa as well. The 49ers also gave up a kickoff touchdown, which can't bode well for those players trying to make the roster via special teams. WR Louis Murphy had a catch that was pried away from him, which won't help his shaky case to make the roster.
More importantly, the 49ers only turned the ball over once, after turning it over five times last week. They also came back and only were penalized for nine times -- which can be called progress.
After an ugly performance at Levi's Stadium against the Broncos, the 49ers showed up in Minnesota. Even though they finished with a loss, Kyle Shanahan showed that he was capable of facing adversity and leading his team.
But after watching that first half, the question that kept running in my head was: are the 49ers this good or the Vikings this bad? We'll have to wait till the regular season to find out the truth.
For more on the Monday Morning Blitz, just tweet out @akashanav on Twitter or @49ersHub. Stay tuned for the column every Monday morning, recapping all things 49ers.