It may not have come as easily as it had the past few weeks, but the 49ers beat the Arizona Cardinals 28-25 to move to 8-0 on the season. The run game and defense weren’t at their best, but quarterback Jimmy Garoppolo’s play made up for it. The 49ers’ lead was as big as 14 points, but they had to fight off a late comeback by Arizona, and converted a pair of big third downs to keep the Cardinals offense off the field in the final minutes.
Here are the studs and duds from the 49ers’ closest game of the season:
Stud: QB Jimmy Garoppolo

A very important question was answered for the 49ers on Thursday. Could Jimmy Garoppolo have a game where he’s the reason they won? After Thursday, the answer is a resounding, “yes.”
Garoppolo finished the game 28-of-37 for 317 yards and a career-high four touchdown passes. He was on a new level Thursday with some of his throws, including a third-down pass to Emmanuel Sanders that hit the receiver as he came out of his break, and a touchdown 21-yard touchdown pass to Dante Pettis. Even his game-sealing play to Ross Dwelley stood out with his ability to step up in the pocket and find the tight end for a first down. In a game where the running game and defense struggled, the 49ers needed Garoppolo to step up and he put on arguably the best performance of his career.
Dud: RB Tevin Coleman’s stats

Coleman looked to follow up his big game against Carolina with another huge performance, but couldn’t get much going Thursday night. He finished with just 23 yards on 12 carries and two receptions for 13 yards, including a dropped pass. Coleman just couldn’t get anything going all night and essentially was a non-factor for the offense. However, he did have two big runs on the final drive to help put the game away.
Stud: RB Matt Breida

Breida helped pick up the slack left from Coleman in the run game. He didn’t have his best game, rushing for 78 yards on 15 carries. His biggest impact came near the end of the first half when he had his two best carries of the night going for 31 and 19 yards. That drive resulted in a touchdown that put the 49ers ahead by two scores. He was questionable all week with an ankle injury, but was vital in giving the 49ers a much-needed threat in the run game.
Dud: Emmanuel Moseley, Richard Sherman, and Jimmie Ward

The 49ers were looking good up 11 points with five minutes to go and Arizona 88 yards away from the end zone. Then Kyler Murray hit Andy Isabella on an out route that was barely out of the reach of Moseley. Isabella turned upfield and made both Sherman and Ward look foolish with a cut back toward the middle. His jaunt into the end zone made it a five-point game with the two point conversion bringing the 49ers’ lead down to three. There were plenty of opportunities for the defense to stop Isabella, but they couldn’t and it almost cost them the game.
Stud: WR Emmanuel Sanders

It appears the 49ers have found their No. 1 receiver. Sanders finished with seven receptions on nine targets for 112 yards and a touchdown. He was a reliable target so much so that when George Kittle was off the field on the final drive of the game due to his knee injury, Garoppolo found Sanders on third-and-11 for a 16 yard reception to extend the drive that ultimately iced the game. Sanders has been a welcome addition to the 49ers offense already tied for the team lead for touchdown receptions with two.
Stud: TE George Kittle

What a gutsy performance from the 49ers’ tight end. Kittle took a hit that forced his knee to bend the wrong way on the first play from scrimmage. He had to miss the remainder of that drive, but came back into the game the following series. He then finished the game with six receptions on eight targets for 79 yards and a touchdown. His touchdown was what we’ve come to expect from Kittle: get open, catch, turn, bounce off would-be tacklers and score. He missed the final drive of the game with his knee injury, but what he did while on the field made a huge impact.