It took two late stands, but the San Francisco 49ers moved to 6-0, holding on for a 23-17 win over the Washington Commanders. The result is overshadowed by Mike Evans leaving early after his Achilles tendinitis flared up again, but it’s a win nonetheless.

San Francisco led 20-3 at halftime and, save for Evans walking off slowly in clear pain, was on its way to a worry-free win. But looks can be deceiving. After the 49ers extended the lead to 23-3, the Commanders’ offense — sans Terry McLaurin, who was carted off early — finally got going, first with a touchdown pass from Jayden Daniels to Stefon Diggs and then another touchdown pass from Daniels to Rachaad White.

The 49ers, meanwhile, responded to both drives with three-and-outs.

Suddenly, Washington (1-4-1) had the ball down just six points and drove into San Francisco territory. Jeremy McNichols appeared to have tied the game on a 31-yard touchdown dash, but it got called back for a facemask. Eventually, it was Malik Mustapha — who was all over the place all game — making the game-defining breakup on a throw to Treylon Burks.

Washington got another quick stop and got into San Francisco territory, but a Daniels grounding penalty proved costly, and he got sacked setting up for a Hail Mary.

The 49ers remain one of three undefeated teams along with the Chiefs and Vikings, though their worries will now turn to Evans. The veteran wide receiver has been magnificent since joining the team this offseason but now joins a long list of injured wide receivers that also features Deebo Samuel, De’Zhaun Stribling, Ricky Pearsall, Christian Kirk and Demarcus Robinson.

Brock Purdy finished with 264 passing yards and a touchdown to George Kittle; Christian McCaffrey had 117 yards from scrimmage and two touchdowns.

49ers need wide receiver reinforcements

Evans has battled ribs and Achilles issues all year. He has not missed a game. He’s one of the toughest players in the NFL, and he played this week without practicing at all. And he looked terrific while clearly hobbled, posting three catches for 94 yards.

But that last catch — he went low for it and was in clear discomfort afterward — ended his night. He was initially ruled questionable but then ruled out. That left San Francisco with the following wide receivers: Jordan Watkins, Jacob Cowing, Brandin Cooks and Malik Turner. Those four players have combined for six catches this year.

Without Evans, it got ugly. With Washington able to load up on defending Kittle and McCaffrey and blitz the living daylights out of Purdy, San Francisco went three-and-out on its final three drives. Purdy took two sacks in the second half; he had only taken three all season entering the night.

49ers offense

1st half

2nd half

Plays

41

19

Yards

303

72

Yards per play

7.4

3.8

Sacks

0

2

It’s hard to figure out where the reinforcements will come from, especially if Evans misses extended time. Christian Kirk (calf) was close to returning this week but remains on IR, but expecting him to take on a major role immediately is unlikely. Samuel is out through at least the bye, and the same is likely true about Robinson. Stribling isn’t close to returning, either.

Kyle Shanahan will have his work cut out for him next week against Atlanta and then potentially beyond; regardless, the Week 8 bye will be a welcome one.

49ers defense excellent again

It’s not like the injuries are contained to just the offensive side — Nick Bosa was out again for the defense — but this was another excellent effort from Raheem Morris’ defense. It racked up four sacks of Daniels, and all four sacks were by players who joined the team within the last two years:

The 49ers were one of the worst defenses in the NFL last year. They have climbed to the middle of the pack not just thanks to a better pass rush, but to the return of superstar linebacker Fred Warner and the outstanding play of a rapidly improving secondary. Mustapha was great. Rookie linebacker Jaden Dugger had 11 tackles playing in place of the suspended Dre Greenlaw. The 49ers have had some issues against the run but limited Washington to 53 yards on 17 carries, and Daniels had just 10 yards on four carries.

Morris deserves a ton of praise, as do his players.

Jayden Daniels comes alive, but makes too many mistakes offensively

After a brutal start on both sides, Washington got going in the second half thanks to Daniels. He was terrific in several clutch moments, but it wasn’t quite enough. He was far from perfect — a throwaway on fourth down early in the game was particularly poor — but he gave his team a chance.

He is not getting a ton of help, and McLaurin’s serious injury is yet another brutal blow for a team that can ill afford one. Without Laremy Tunsil, the offensive line has struggled mightily; Daniels being sacked by a three-man rush on his Hail Mary attempt is a bad look for the group up front. Furthermore, the Commanders had seven penalties — six by the offense — and Diggs had a bad drop early. The running game was nonexistent once again, and Washington’s running backs rank 27th in rushing success rate.

The Commanders head into the bye somehow still with hope in the dreadful NFC East, which made history by producing exactly zero wins over the past two weeks. Still, there is a lot to fix on both sides, and it seems like fixing it (or at least covering for it) is up to Daniels once again.