It may have been ugly, but the 49ers were able to tough out a 24-20 win against the Pittsburgh Steelers on Sunday at Levi’s Stadium. The 49ers won with a minus-three turnover differential while outscoring the Steelers 14-6 on points off of turnovers.
In a game where the 49ers committed five giveaways, there was plenty of bad, but also plenty of good that helped lift them to a win. Here are the studs and duds from Sunday:
Dud: The turnovers

The 49ers kept shooting themselves in the foot with five turnovers. The first two turnovers were interceptions, both of the hands of pass catchers. The final three were fumbles. Three of the five turnovers happened inside the red zone, including one that could have sealed the game for the Steelers when a snap bounced off Richie James was in motion. The turnover number was too high and could have resulted in a loss had it not been for the defense.
Stud: The defense after turnovers

The defense had a stellar game overall, holding the Steelers offense to 4.7 yards per play and a 25 percent third down efficiency. The defense, specifically after the offense turned the ball over, was other-worldly. On drives that followed a a 49ers turnover, the Steelers scored just six points on a combined 20 plays for 45 yards. To put it in perspective, Steelers drives averaged four plays for nine yards after a takeaway.
Stud: DE Arik Armstead
Armstead has been having a solid season, and Sunday wasn’t his best game, but it included his biggest play. Following the James fumble late in the fourth quarter, Armstead chased down Steelers running back James Conner in the backfield and forced a fumble that was recovered by DeForest Buckner. The play set up the game-winning drive for the offense.
Dud: CB Jason Verrett
Verrett didn’t play a down on defense until after Ahkello Witherspoon was carted off with a foot injury. Steelers quarterback Mason Rudolph targeted Verrett on the second play the corner was in the game and drew a 32-yard pass interference penalty. The quarterback went at Verrett on the next play as well, connecting with receiver Diontae Johnson for a 39-yard touchdown. Emmanuel Moseley replaced Verrett after that series.
Stud: Jimmy Garoppolo
Sunday was one of Garoppolo’s best games as a 49er, and by far his gutsiest. The two interceptions are a bit deceitful since the first was bobbled by Matt Breida and the second was off the fingertips of Dante Pettis. If the two interceptions are taken away, Garoppolo finished the game 23-for-30 for 277 yards and a touchdown. Garoppolo took a beating the entire game too. He was sacked once and hit eight times after being hit just three times the first two games. He stood strong in the pocket the entire contest, including the game-winning touchdown to Pettis.
Dud: OT Justin Skule

The rookie was hardly noticeable in the first half, which is typically a good thing for an offensive lineman. Then the penalties starting piling up in the fourth quarter. Skule was called for back-to-back penalties early in the fourth, first for a holding, followed by an illegal block in the back. The drive resulted in a punt which allowed the Johnson touchdown that put Pittsburgh ahead 20-17. On the final drive, Skule was called for a second holding that put the 49ers in a second-and-17 situation. The offense was bailed out by a defensive holding which put them in position for the game-winner. Skule could be starting on a game-to-game basis and committing three penalties in the clutch won’t help his case.
Stud: FB Kyle Juszczyk
Four different 49ers pass catchers finished with 40-plus receiving yards. The 49ers’ fullback was one of them with 51 yards on three receptions. Two of his receptions were particularly noteworthy. The first was a 27-yard reception that saw Juszczyk make a tremendous diving catch. On the next drive, Garoppolo hit Juszczyk again and as the fullback made the catch, he turned and hit Steelers defensive back Minkah Fitzpatrick with a nasty stiff arm to extend the play for a gain of 22.
Juszczyk was also a key in the run game, lead blocking for a rushing attack that averaged 4.2 yards per carry.
Stud: WR Dante Pettis

It wasn’t Pettis’ most productive game as a pro. He had four catches for 20 yards and a touchdown, but his touchdown was the game winner and might’ve signaled a turning point for the second-year receiver. Two plays before the touchdown, Pettis had a ball bounce out of his hands in the end zone because he didn’t come back to it aggressively enough. Garoppolo trusted the receiver to make a play in traffic at the goal line, and Pettis came down with the game-winning score with 1:15 to play. If Pettis starts becoming more involved in the passing game, that touchdown will be a big reason why.