PHILADELPHIA — The 49ers just pulled off a stunning playoff upset over the defending Super Bowl Champions, the Philadelphia Eagles, by a score of 23-19, despite George Kittle tearing his Achilles in the second quarter. This was one of the best playoff victories in franchise history.

With than in mind, here are the 49ers’ grades for this performance.

QUARTERBACK: B-MINUSJan 11, 2026; Philadelphia, PA, USA; San Francisco 49ers quarterback Brock Purdy (13) looks to pass the ball against the Phil

Eric Hartline-Imagn Images

Let’s get this out of the way. Brock Purdy threw two horrendous interceptions in this game. Both were forced over the middle and lacked zip because of the strong wind during the game. He had less zip on his throws than Jauan Jennings.

Those interceptions were the main reason the game was so close, considering the Eagles never turned the ball over.

But Purdy was clutch, unlike Jalen Hurts, the reigning Super Bowl MVP. On the 49ers’ final drive of the game, there was no doubt that Purdy would lead the offense down the field for a touchdown, which he did. And on the next possession, there was no doubt that Hurts would fail, which he did.

Some quarterbacks can put their team on their backs with two minutes left in a game, and some can’t. Purdy sure can. That’s the highest praise you can give a quarterback.

RUNNING BACKS: B-PLUSJan 11, 2026; Philadelphia, PA, USA; San Francisco 49ers running back Christian McCaffrey (23) makes a catch for a touchdown

Bill Streicher-Imagn Images

Christian McCaffrey averaged just 3.2 yards per carry, which is par for the course for him this season, but he made a huge impact as a receiver. He finished the game with 66 receiving yards and 2 touchdown catches. He’s having a remarkable season even though he’s not the player he once was.

WIDE RECEIVERS: AJan 11, 2026; Philadelphia, PA, USA; San Francisco 49ers wide receiver Demarcus Robinson (5) celebrates a touchdown against t

Bill Streicher-Imagn Images

The 49ers didn’t have Ricky Pearsall or Brandon Aiyuk. As it turns out, the 49ers didn’t need either of them because Demarcus Robinson went crazy. Led all players with 111 receiving yards and one touchdown. Where was this all season?

In addition, Jauan Jennings threw a beautiful touchdown pass to McCaffrey to save the 49ers’ season in the fourth quarter when they were down by 6. This was the nicest pass thrown by a 49ers player in this game.

TIGHT ENDS: C-MINUSJan 11, 2026; Philadelphia, PA, USA; San Francisco 49ers tight end George Kittle (85) gestures as he is carted off the field

Bill Streicher-Imagn Images

George Kittle left the game in the second quarter after tearing his Achilles. His replacement, Jake Tonges, had just 1 catch for 14 yards. Clearly, Kittle was an integral figure in the game plan tonight and Tonges wasn’t. Expect Tonges to be much more involved next week in Seattle.

OFFENSIVE LINEMEN: BJan 11, 2026; Philadelphia, PA, USA; San Francisco 49ers quarterback Brock Purdy (13) catches a snap against the Philadelphia

Bill Streicher-Imagn Images

They didn’t get much push in the running game, but they gave up only one sack against one of the best pass rushes in the league, which is impressive.

DEFENSIVE LINEMEN: BJan 11, 2026; Philadelphia, PA, USA; Philadelphia Eagles quarterback Jalen Hurts (1) passes the ball under pressure from San

Eric Hartline-Imagn Images

They still have the worst pass rush in the league, but they managed to generate just enough pressure on Jalen Hurts in the second half when they needed, and they helped limit Saquon Barkley to just 4.1 yards per carry and no touchdowns.

LINEBACKERS: AJan 11, 2026; Philadelphia, PA, USA; Philadelphia Eagles running back Saquon Barkley (26) carries the ball defended by San Fr

Bill Streicher-Imagn Images

Eric Kendricks and Garrett Wallow started and combined to record a whopping 21 tackles. The 49ers would not have won this playoff game without these outstanding performances by two linebackers who weren’t on this team a few weeks ago. They might be better than the players they replaced.

DEFENSIVE BACKS: A-MINUSJan 11, 2026; Philadelphia, PA, USA; Philadelphia Eagles wide receiver A.J. Brown (11) is unable to make a catch as San Franc

Bill Streicher-Imagn Images

Deommodore Lenoir shadowed A.J. Brown most of the night and gave up just three catches for 25 yards. This was by far Lenoir’s best performance of the season. Teams have been avoiding him for weeks. Finally, Robert Saleh put Lenoir in the thick of the action. More on Saleh in a minute.

Ji’Ayir Brown left the game with a hamstring injury, and his replacement, rookie Marquise Sigle, was a clear upgrade. It’s incredible how the 49ers seem to have a never-ending stream of talent.

SPECIAL TEAMS: A-MINUSSan Francisco 49ers kicker Eddy Pineiro (18) kicks a field goal Monday, Dec. 22, 2025, during a game against the Indianapolis

Christine Tannous/IndyStar / USA TODAY NETWORK via Imagn Images

Eddy Pineiro missed an extra point and Thomas Morestead had a 25-yard punt. Other than those plays, this unit was good.

COACHES: A-MINUSJan 11, 2026; Philadelphia, PA, USA; San Francisco 49ers head coach Kyle Shanahan shakes hands with Philadelphia Eagles head

Bill Streicher-Imagn Images

Kyle Shanahan was partially responsible for Brock Purdy’s two interceptions. Shanahan is the one who called those greedy passes over the middle against a defense that specializes in taking those passes away.

But with the season on the line, Shanahan called one of the best plays of his career — the reverse wide receiver pass from Jauan Jennings to Christian McCaffrey. Which means Shanahan didn’t choke. Instead, he was clutch for a change. Respect.

But the 49ers won this game primarily because of their defense. Somehow, Robert Saleh held the Eagles offense to just 19 points with a bunch of nobodies. To be fair, the Eagles offense is worse than the sum of their parts, and their offensive coordinator probably will get fired in the next few days.

Still, Saleh officially put him out of business, and he gets credit for that.

Read more