The 49ers got a much-needed 34-31 victory over the Rams on Saturday night. It wasn’t perfect, but San Francisco made plays when they needed to at key points and pulled out the win to move to 12-3 and put themselves in position to win the division in Seattle the final week of the season.
Here’s who was good and who wasn’t Saturday night:
Good: Fourth quarter Jimmy Garoppolo

The 49ers’ quarterback dominated the final 15 minutes Saturday night. In the final frame, he guided a touchdown drive and a drive that led to the game-winning field goal. His stats reflected his tremendous play as well. He went six-of-nine for 134 yards and a touchdown with no interceptions. Twice on the final drive of the game Garoppolo delivered completions on third-and-16 to keep the drive alive, including a 46-yard heave to Emmanuel Sanders to get the team in field goal range. Considering the duress he was under most of the night, his fourth quarter was extremely impressive.
Bad: First three quarter Jimmy Garoppolo

Part of Garoppolo’s struggles in the first three quarters had to do with the pass protection, but there were some issues for the QB too. He tossed a pair of interceptions, and missed a couple of open receivers. It was a little bit of a regression to the quarterback that was so mistake-ridden early in the year. The good news for the 49ers is that Garoppolo pulled out a sensational fourth quarter, but they won’t survive in the playoffs if he’s not more consistent.
Good: Rushing attack

The 49ers offense is at its best when they have an array of multifaceted running backs that allow them to maximize their deception on offense. Tevin Coleman’s disappearance over the second half of the year was becoming a concern, but he ran well last night and the 49ers run game looked as versatile as its been in awhile. Raheem Mostert racked up 53 yards and a touchdown on 11 carries. Coleman had his most consistently productive game since Week 8 with 33 yards on five carries and a long run of 12 yards. Deebo Samuel got involved as well with 28 yards and a touchdown on three attempts. The 49ers run game is trending up at the right time, and they’re dangerous if they get rolling in time for the postseason.
Bad: Pass protection

Garoppolo’s early struggles were partly due to the poor play of his offensive line. With backup center Ben Garland and backup right guard Daniel Brunskill in the starting lineup, the Rams defensive line spent a ton of time in the backfield and sacked Garoppolo six times and hit him eight times. He also had to make a couple of big throws under pressure late in the game. Keeping Garoppolo upright is imperative for San Francisco, and they didn’t do a good job of it Saturday.
Good: Robbie Gould

It looked like the 49ers might have a kicking problem, but Gould came through in a big way when San Francisco needed him. The veteran kicker drilled all four of his extra points and both of his field goals, including the 33-yard game winner as time expired. Gould has missed a career-worst eight kicks this year, but he hasn’t missed since his long try in the rain and muck in Baltimore, and he’s connected on game-winners in two of the last three games. The 49ers don’t want to have to rely on their kicker to win games, but Gould’s been money down the stretch, and much better than he was early in the year.
Bad: Ahkello Witherspoon

Witherspoon had a rough go of it Saturday night. He was picked on in coverage on the Rams’ third-quarter touchdown drive and allowed receptions of 29 and 22 yards as LA cruised down the field for a touchdown. The TD came with Witherspoon in coverage on Cooper Kupp, who got wide open on a crossing route for an easy score. Witherspoon was also the closest defender on the Rams’ first touchdown and couldn’t wrestle the throw away from Brandin Cooks after arriving late. The corner also had a play where he lost contain on the outside and let running back Todd Gurley bounce one to the edge for an eight-yard gain early in the fourth quarter. Witherspoon is having a good third season, but he didn’t have his best night Saturday.
Good: Fred Warner’s catch

The 49ers got a big-time play from their linebacker in a huge moment. The Rams were gashing the 49ers with screens and quick throws to the perimeter, and looked to be on their way to points before the half to extend a 21-17 lead. Jared Goff on a second-and-10 from the 49ers’ 48 floated a swing pass to running back Malcolm Brown that Warner read the whole way. The linebacker cut underneath the throw, snared it, and ran it back 46 yards for a go-ahead touchdown before the half ended. That put the 49ers in front and changed momentum in a key moment. Without that pick, the 49ers could have gone into the half down by as many as 11 points. Instead they went in leading by three. That’s an enormous swing in a game that wound up being decided by three points.