SANTA CLARA, Calif. — It would be easy to blame the absences of Emmanuel Sanders and Chris Harris Jr.

Indeed, the Broncos could have used their top receiver Sanders, who suffered a season-ending Achilles tear during practice Wednesday, and No. 1 cornerback Harris, who is out for the rest of the regular season with a fractured fibula.

Maybe the Broncos are simply running out of players. Then again, maybe it was a matter of time before their slow starts eventually beat them. Despite a strong, second-half rally, the Broncos lost to the woeful San Francisco 49ers, 20-14 here Sunday on a comfortably cool December afternoon at Levi’s Stadium.

The 49ers are now 3-10, while the Broncos are 6-7 and with little chance of making the playoffs.

"We didn't play well, simple as that," said Broncos head coach Vance Joseph. "Every game now is a must win. We haven't talked about that. But we have to now."

MORE | Chubb breaks Von's rookie team record; eyes Kearse's NFL sack mark

Even during the three-game winning streak the Broncos carried into this venue where they captured Super Bowl 50, they did not start well. The Broncos have now gone without a first-quarter touchdown in five straight games, scoring just two field goals in that span.

They didn’t come close to scoring early against the 49ers as through the first quarter, the Broncos had been outgained 160 yards to 20. The 49ers had 9 first downs to the Broncos’ 1.

The Broncos were down, 20-0 at halftime. San Francisco tight end George Kittle had seven catches for 201 yards -- including an 85-yard catch-and-run off a blown coverage in the first half. Needing just 5 yards in the second half to break Shannon Sharpe's single-game record for tight ends, Kittle got zip.

"You can't do that every week and expect to be successful," said Broncos quarterback Case Keenum, who has exemplified his team by struggling early (7 of 15, 43 yards in the first half) only to be much-improved in the second half (17 of 27, 143 yards, 1 touchdown). "I think we rolled the dice too many times. We came up short this time. Ran out of time. Literally. It's a bunch of things. It's third down."

Third down was a problem early and late. They were 2 of 15 overall on third down, forcing Joseph to make several, critical, fourth down decisions in the fourth quarter. The Broncos failed on fourth down twice before converting on fourth down during their second touchdown drive that made it interesting.

"The numbers speak to going for it on fourth down there," Joseph said. "So we stayed with our chart and we went for it."

The Broncos made a defensive adjustment on 49ers' tight end George Kittle in the second half while Keenum led the offense to a third quarter touchdown drive that was capped off by Phillip Lindsay's 3-yard touchdown run. Keenum led another touchdown drive in the fourth quarter that finished with a fourth down, 1-yard touchdown pass to DaeSean Hamilton with 3:53 remaining.

Bradley Chubb's second sack of the game early in the second half appeared to spark the Broncos. Chubb now has 12.0 sacks to break the Broncos' rookie record of 11.5 set by Rulon Jones in 1980 and tied by Von Miller in 2011. Miller had a sack to give him 97.0 in his career -- one away from setting the team record as Simon Fletcher had 97.5.

Where the Broncos were particularly inept was in covering Kittle in the first half. He entered the game ranked third among the league’s tight ends in catches and yards. Kittle had a Hall-of-Fame performance in the first half with seven catches for 210 yards – including an 85-yard catch-and-run touchdown early in the second quarter. The NFL single-game record for tight ends is 214 receiving yards set by the Broncos' Shannon Sharpe in a 2002 win against the Chiefs.

"They had a good scheme for him," said Broncos safety Darian Stewart. "Those first 15 plays (on Shanahan's script) I could see from the beginning their plan was to get him the ball. And they fed him today."

Sharpe would be happy to know Kittle did not break his record as the Denver defense stiffened in the second half and didn't allow him another reception.

"Four yards," Kittle said. "Halfway through the fourth quarter someone told me that. I was like, 'Oh really? That would be fun.' Next time."

Kittle also drew three, offensive holding penalties against the Broncos’ secondary. The Broncos drew 10 penalties in the first half, many of them coming from their Harris-less secondary. Kittle now has 1,103 yards receiving this season, a 49ers' record for tight ends.

While the 49ers’ offense coached by Kyle Shanahan had two long drives end with field goals, they went one-and-done with their second possession of the second quarter.

Somehow, no one covered Kittle who ran a simple middle pattern on the 49ers’ first play. He caught it across the middle, and turned up along the right side. He cut away from Broncos’ cornerback Isaac Yiadom, who was blocked out of the play, before lumbering into the end zone to give San Francisco a 13-0 lead.

Joseph said it was a blown assignment.

"That was a zone, but that was about bad eyes by the safeties," Stewart said. "We knew they did a lot of misdirection stuff and we knew we couldn't move our eyes.That was probably the key on that play."

Kittle had 179 yards receiving with 9:47 left in the second quarter. The 49ers finished the half with a touchdown pass from Mullens to rookie receiver Dante Pettis. That play was set up by a pass interference penalty against Yiadom, the rookie who replaced Harris in the starting lineup.

Broncos rookie star Phillip Lindsay has just 3 yards rushing on 5 carries in the first half, before winding up with 14 carries, 30 yards and a touchdown. Keenum finished 24 of 42 for 186 yards, one touchdown and had his fifth consecutive game without an interception.

49ers quarterback Nick Mullens was 20 of 33 for 332 yards, two touchdowns and one interception to Stewart in the fourth quarter as the Broncos nearly rallied. Besides their two, second-half touchdowns, the Broncos had another fourth-quarter drive end on downs at the San Francisco 21.

Entering the game with hopes of capturing the AFC’s final wild-card spot, the Broncos got mixed results from the other games. Kansas City rallied to beat Baltimore, dropping the Ravens to 7-6, and the Steelers lost to the Raiders to fall to 7-5-1.

But a miraculous, final-play, series of pitch-and-run touchdown enabled the Miami Dolphins to stun New England.

And Indianapolis snapped the Texans’ nine-game winning streak with an impressive win in Houston.

The Ravens, Dolphins, Texans and Colts are now all 7-6. Thus, the Broncos are all but done after dropping to 6-7. With three weeks remaining, the Ravens and Dolphins have the tiebreaker scenarios on the Broncos.

The Los Angeles Chargers also beat Cincinnati to improve to 10-3 and eliminate the Broncos from the No. 5 AFC playoff spot.

"If we win out we still have a chance," said Broncos' defensive end Derek Wolfe. "We need some help but 9-7 has made it before."

The Broncos play a rare Saturday game next -- against the 5-7-1 Cleveland Browns -- in six days at Broncos Stadium at Mile High.