MINNEAPOLIS -- Andre Johnson's record streaks were stopped rather quietly.
Holding Johnson to 62 yards on four receptions and a late score, the Vikings forced three turnovers and got three touchdown passes from Gus Frerotte in a 28-21 victory against the Texans on Sunday.
"If you talk about a complete game where we put everything together," Frerotte said, "that's what we did today."
Minnesota (4-4) was recharged against a team trying to win four straight games for the first time in its six-year existence.
Madieu Williams intercepted Sage Rosenfels in the end zone in the third quarter, and Antoine Winfield picked off Schaub at the Vikings 5 before he was sidelined at halftime by an injury to his left knee. Ben Leber fell on a fumble by Matt Schaub in the first half that preceded a 49-yard touchdown pass from Frerotte to Bernard Berrian.
The Texans (3-5) played all four October games at home, due to a hurricane-related postponement, and their return to the road was a bit of a reality check. They're 12-40 away from Reliant Stadium all time and 4-24 since the start of 2005.
"If we can just eliminate those mistakes, we're as good as any offense, any team in this league," said Rosenfels, who went 21-for-29 for 224 yards, two touchdowns and the costly interception. "We thought we were pretty equal to this team. We thought this was a team we could play four quarters with. We did that, but they made the plays and we made the mistakes."
The Texans got the ball back with 1:57 left at their own 10, but Rosenfels was sacked twice to end any chance of tying it. Jared Allen reached out from around his blocker and yanked him to the turf with one hand on third down, and Kevin Williams finished him off on fourth down. The Vikings had five sacks in all.
"That's how you kill a 2-minute drive," Allen said.
Frerotte finished 11-for-18 for 182 yards, his only blemish a first-quarter interception that Berrian bobbled and allowed Jacques Reeves to snatch out of the air and return 44 yards for a tying touchdown.
Adrian Peterson scored early and ground down the Texans late with three long gains -- for 40, 21 and 22 yards -- in the second half to keep the clock moving. He finished with 139 yards on 25 carries and set the Vikings up nicely for a 25-yard pass from Frerotte to tight end Visanthe Shiancoe for a touchdown that made it 28-14 with 6:26 remaining.
The Vikings let Johnson get loose on third down when a 14-yard pass from Rosenfels to the corner of the end zone cut the lead to seven with 2:58 left, but he finished well shy of his recent remarkable performances.
Johnson matched two NFL records by posting at least 130 yards in his previous four games and 10 or more catches in his past three, but the Vikings had the league's leading receiver bracketed all afternoon. Cornerback Cedric Griffin covered him well, and safeties Williams and Darren Sharper provided support until his late touchdown.
"I guess the coach told him, 'Just beat him up,"' Johnson said. "I got thrown down a couple of times, and things like that. They came up with a great game plan."
The only other time these teams have met, an overtime victory by the Vikings on the road in 2004, Johnson had 12 receptions for 170 yards and two touchdowns.
"We did a great job to re-route him," coach Brad Childress said. "That's a timing offense. When the quarterback's able to get back there and set his feet and get the ball out with a clean look and know what coverage they're attacking, they're pretty good."
Schaub went 11-for-16 for 139 yards, but was limping at times in the first half and looked rattled at others.
"When he came in at halftime, the knee had swelled and he'd stiffened up," coach Gary Kubiak said. "When I watched him come out for the second half, with what the doctors told me and what I saw, it made no sense. Sage gave us the best chance in the second half."
One month ago in Houston, the Texans led Indianapolis 27-10 while Rosenfels subbed for a sick Schaub. Peyton Manning and the Colts rallied for a 31-27 win, fueled by two lost fumbles and an interception by Rosenfels.
This was better, but not enough.
- Owen Daniels had 11 catches for 133 yards for Houston.
- Backup RB Ahman Green (thigh) was inactive for the Texans. Starter Steve Slaton had 118 total yards on 16 carries and eight catches.
- Former NBA coach Flip Saunders, still a Minnesota native, was in attendance.
- Houston's Jacoby Jones, who has two punt returns for touchdowns this season, had one fair catch, lost 2 yards on one attempt and gained 1 yard on another as Minnesota's Chris Kluwe successfully kicked the ball away from him and the coverage team was flawless.
- The Texans shuffled their secondary again. Backup CB Eugene Wilson started at FS for Nick Ferguson, and Ferguson replaced Brandon Harrison as the SS.