[PHOTOS: See images from Sunday's game]
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 over the Texans on Sunday.
Minnesota (4-4) returned from the bye week fully recharged. Madieu Williams intercepted Sage Rosenfels in the end zone in the third quarter, and Antoine Winfield picked off Matt Schaub at the Vikings 5 before Houston's starting quarterback was sidelined at halftime by an injury to his left knee.
Schaub also lost a fumble that led to a 49-yard scoring toss on third down from Frerotte to Bernard Berrian that stretched the lead to 21-7. The Texans (3-5) missed their chance to win four straight games for the first time in the franchise's six-year history.
The Texans got the ball back with 1:57 remaining at their own 10, but Rosenfels was sacked twice to end any chance of tying it.
Frerotte finished 11-of-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.
The Vikings let Johnson get loose for a 14-yard score on a pass from Rosenfels on third down that 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, with Cedric Griffin covering him well and safeties Williams and Darren Sharper providing support until his late touchdown.
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.
Schaub went 11-for-16 for 139 yards, but he was limping at times in the first half and looked rattled at others. Rosenfels took over and capped a 10-play, 72-yard drive with a 3-yard touchdown toss to David Anderson, and Houston had new life.
After Minnesota punted and another deep drive, however, Rosenfels rolled out on third-and-1 at the 18 near the end of the third quarter and threw into double coverage on backup tight end Joel Dreessen. Williams jumped as high as he could and came down with the ball to preserve the lead.
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.
The Texans played all four games in October at home, due to a hurricane-related postponement, and their return to the road was a bit of a wakeup call. They're 12-40 away from Reliant Stadium all time, and 4-24 since the start of 2005.