Kaepernick threw two touchdown passes to Vernon Davis, one after the first of three interceptions from Romo, and the 49ers cruised to a 28-17 win over the sloppy Cowboys on Sunday.
The 49ers (1-0) came in with questions about their defense, missing key players because of injuries or suspensions. Defensive tackle Ray McDonald got the start just a week after his arrest in a domestic violence case.
The secondary put all those issues to rest, getting Chris Culliver's 35-yard fumble return for a touchdown on the second play of the game and two of the Romo picks on their way to a 28-3 halftime lead.
"There's been a lot of rhetoric," said coach Jim Harbaugh, who improved to 4-0 in season openers. "This game was about steel in the spine. When it comes to 49er players, that's where they excel."
For one game, it didn't matter that linebacker Aldon Smith will miss the first nine games on a suspension over off-the-field issues and fellow linebacker NaVorro Bowman is out until midseason because of a knee injury.
After Culliver picked up a loose ball stripped from DeMarco Murray and ran untouched for a score, safety Eric Reid returned Romo's first interception 48 yards to the Dallas 2, setting up Kaepernick's second scoring toss to Davis.
"Our front seven did a good job getting pressure on the quarterback, and the secondary played well," Reid said.
Romo looked like a quarterback who was limited in the offseason and training camp, not a good start for a team trying to avoid tying a franchise record with a fifth straight year of missing the playoffs.
He didn't see Reid on a throw to Dez Bryant, then didn't see wide-open receiver Dwayne Harris for what would have been an easy touchdown. Instead he forced a pass to Jason Witten that was intercepted by Patrick Willis in the end zone.
The picks kept coming even after starting San Francisco cornerbacks Tramaine Brock (toe) and Culliver (concussion) had been knocked out of the game. Backup Perrish Cox had his second career interception when Romo threw deep to Bryant in double coverage.
"I felt comfortable," said Romo, who threw for 281 yards and a late touchdown. "Just couple poor decisions that I made tonight."
It didn't take Kaepernick long to put that rough preseason behind him, leading the 49ers 80 yards in just three plays on their first possession. He stepped out of an ankle tackle by Jeremy Mincey and threw 29 yards on the run to Davis, who juggled the ball as the crossed the goal line before holding on for a 14-3 lead.
The 49ers also had an efficient drive in their 2-minute offense to finish the first half, with Kaepernick throwing for 39 yards leading to Carlos Hyde's 4-yard scoring run for a 28-3 halftime lead.
"Everyone was ready to get to the season, ready to play and ready to start putting these wins together," said Kaepernick, who was 16 of 23 for 201 yards without an interception.
When Romo wasn't throwing interceptions, the Dallas offense was getting false-start penalties and using timeouts to avoid delay-of-game penalties.
Part of the problem was the noise from large swaths of red-clad 49ers fans seeing their team for the first time in the regular season in the $1.2 billion home of the Cowboys.
"I noticed that," Harbaugh said of the crowd. "Much appreciated. Means a lot."
Murray bounced back from the fumble on his first carry of the season to get 71 yards in the first quarter and 118 with a touchdown for the game.
But he didn't get the ball on second-and-1 from the San Francisco 2 with a chance to tie the score early. Instead, Romo was sacked and Dallas settled for a field goal.
49ers RB Frank Gore had 63 yards rushing, becoming the 29th NFL player with 10,000 for his career. He's also the 10th player with 10,000 yards and 10 seasons with the same team. ... Bryant stayed down for several moments after Reid's interception return and later was treated for dehydration. He had four catches for 55 yards. ... Davis now has 53 receiving touchdowns, most of the NFL since 2009, playoffs included. Detroit WR Calvin Johnson, who plays Monday night, has 52. ... Cowboys S C.J. Spillman and LB Justin Durant left the game with groin injuries. ... The Cowboys lost for the first time (11-1) when Murray, a fourth-year back, had at least 20 carries.
New Era asks to pull out of Buffalo Bills stadium naming rights deal
The decision to drop out of the agreement comes four years after New Era acquired the naming rights for what was previously called Ralph Wilson Stadium, and named after the team's late Hall of Fame owner.
Sources: Myles Garrett's extension with Browns includes $100M guaranteed, most for defensive player
Myles Garrett's contract extension with the Browns contains $100 million in total guarantees, the most ever paid to a defensive player, according to league sources, with $50 million guaranteed at signing.
Philadelphia mayor's office clarifies stance on fans at Eagles, Phillies games
The Philadelphia mayor's office clarified its stance on fans at sporting events in 2020, saying "discussions between the City and the Eagles are ongoing."
Myles Garrett pens a message to Cleveland
Myles Garrett sends a clear message after signing a five-year extension with the Browns.
Signing Derrick Henry seals Titans' commitment to 2019 blueprint
The Titans' offense was an efficient machine in the second half of the 2020 season. By locking up Henry, they aim to see that in the future.
What's next for the Patriots and franchise-tagged guard Joe Thuney?
New England and Joe Thuney now take a year-to-year approach in their working relationship, and anything is possible in the future.