HOUSTON — Chris Borland made one more big play to convince the 49ers he should be in the mix of linebackers to replace injured NaVorro Bowman.
Borland, a third-round pick from Wisconsin, returned an interception 34 yards for a touchdown, third-string quarterback Josh Johnson threw three TD passes and San Francisco beat the Houston Texans 40-13 on Thursday night.
Bowman is expected to miss at least half the season as he recovers from a devastating left knee injury sustained in the NFC championship game loss to the rival Seahawks. Michael Wilhoite is listed as the starter, but defensive coordinator Vic Fangio said younger players would get a "good, healthy dose of snaps" Thursday night to move up the depth chart.
Borland also had a team-high six tackles.
"I think I had one of my better games, but I still made some mistakes I need to fix," Borland said. "That's kind of been the story this preseason, so I have some things to improve on, but it could help."
Colin Kaepernick did not play for the 49ers. Blaine Gabbert played the first half and went 4 for 11 for 60 yards before Johnson took over.
Coach Jim Harbaugh had said earlier in the week that he planned to play Kaepernick. He decided Wednesday that he would rest Kaepernick and the rest of his starters.
"Some of the starters didn't get to play and that was a decision to keep them from that kind of fun," Harbaugh said. "I feel bad for that, for them, but some of our other guys got a chance to play the best game of their career. That's really exciting for me."
Houston quarterbacks Case Keenum and Tom Savage both threw interceptions as they compete for the backup job behind Ryan Fitzpatrick. Keenum went 8 for 17 for 70 yards and Savage went 8 for 12 for 43 yards.
Keenum got the start and misfired on five of his first seven passes. He got the Texans moving on his third series, completing three passes to DeVier Posey.
Rookie Chris Boswell finished the drive with a 41-yard field goal. Boswell is competing with Randy Bullock for Houston's kicking duties.
Gabbert started 1 for 4 and was sacked by outside linebacker Whitney Mercilus on the second-to-last play of the first quarter. Mercilus, a late first-round pick in 2012 now backing up Jadeveon Clowney, tackled LaMichael James behind the line on the next play.
Savage started the second quarter for Houston and completed his first six throws. His first miss was a third-down toss to Mike Thomas and Bullock kicked a 52-yard field goal for a 6-0 lead.
Gabbert completed a 32-yard pass to Derek Carrier to finally kick-start the 49ers and tossed a 14-yard TD pass to Asante Cleveland with 1:18 left in the half.
Harbaugh said Gabbert hurt his shoulder in the first half and underwent an X-ray.
Keenum returned with 1:12 left in the half and the ball at the Houston 19. He threw behind Posey and Chris Cook intercepted and returned it to the Houston 13. Johnson threw a touchdown pass to Bruce Ellington on the next play.
Phil Dawson kicked a 28-yard field goal in the third quarter. Borland then picked off Savage's next throw, stepping in front of tight end Ryan Griffin and racing to the end zone.
"It's just anticipation," Savage said. "I've just got to get the ball out quicker. I think it was the right read. It was just the ball has got to be out and that's something I can definitely improve on."
Texans rookie Andre Hal intercepted Johnson's pass and returned it 77 yards for a touchdown late in the third quarter.
Johnson threw a 5-yard touchdown pass to Kyle Nelson and Kassim Osgood blocked a punt out of the end zone for a safety in the fourth quarter.
Nose tackle Ian Williams, center Daniel Kilgore and right guard Joe Looney were the only San Francisco first-teamers to start. Wilhoite and fullback Bruce Miller were the only other regular starters who played. Wilhoite only played on special teams.
Carrier left the game with a hamstring injury.
Notes: Kaepernick finished the preseason 12 for 22 for 115 yards. ... Texans RG Brandon Brooks was the only first-team offensive player to start. NT Jerrell Powe and defensive end Jared Crick were the first-team starters on defense for the Texans. ... Texans CB Johnathan Joseph and RB Arian Foster missed all four preseason games.