Marcus Coker ran for 132 yards and a pair of touchdown and host Iowa held off a late Michigan rally to beat the 13th-ranked Wolverines 24-16 on Saturday.
James Vandenberg added 171 yards passing and a TD for the Hawkeyes (6-3, 3-2 Big Ten), who have won three straight over Michigan for the first time in school history.
Michigan drove to Iowa's 3-yard line with 16 seconds left. But Denard Robinson missed on four straight throws, with Iowa's B.J. Lowery breaking up Robinson's final toss to seal the win.
Vincent Smith appeared to pull the Wolverines (7-2, 3-2) within 24-22 on an 82-yard TD run after bouncing off Iowa's James Morris and going untouched for the score. Replay officials, however, ruled Morris' elbow had touched the ground. Still, Michigan drove to the Hawkeyes doorstep before being stopped.
Robinson finished 17-of-37 passing for 194 yards and two TD passes.
Coker's second touchdown, a 13-yard run with 10:42 left, put Iowa ahead 24-9. Robinson wasted little time answering, finding Kevin Koger for a 7-yard touchdown pass that pulled Michigan within 24-16 with 7:53 to go.
The Hawkeyes had a chance to put it away on a 4th-and-1 at the Michigan 43 with 5:22 to go, but they were called for an illegal snap and chose to punt it away. Iowa, which was gashed for a pair of fourth-quarter TDs in last week's 22-21 loss at Minnesota, forced the Wolverines to punt it right back, but Michigan made a stop and gave Robinson one more shot to win it.
In the final sequence, Junior Hemingway's apparent TD grab was ruled out of bounds, and Smith dropped one in the end zone on the next play.
Robinson couldn't connect with Roy Roundtree on fourth down, sending the jubilant Hawkeyes streaming onto the field.
Robinson led the Wolverines to a field goal on their first possession of the second half, cutting Iowa's lead to 17-9 with 6:19 left in third quarter. But he was dinged up after getting drilled by Iowa safety Tanner Miller and replaced for a series by Devin Gardner.
Robinson found himself and the Wolverines in a big hole when he got back.
The Hawkeyes took 5:27 off the clock, and Coker burst through a huge hole and went into the end zone untouched for a 13-yard TD run to put the Hawkeyes ahead 24-9.
The upset was a huge win for Iowa after losing at Minnesota — a game that ranked among the worst in coach Kirk Ferentz's 13-year tenure.
The Hawkeyes came out like they'd had enough of hearing about that stinker, driving 76 yards on just six plays and going ahead 7-0 on Coker's 4-yard TD run less than five minutes in.
Michigan answered on Robinson's 5-yard TD pass to Toussaint late in the first quarter. But holder Drew Delio bobbled the snap on the kick, allowing Iowa to stay ahead 7-6.
Iowa made it 14-6 on Vandenberg's 1-yard TD pass to Brad Herman midway through the second — and pushed it to 17-6 at halftime behind a pair of Robinson blunders.
Iowa's Tyler Neilsen had Robinson wrapped up for a sack, and as Robinson tried to slip away he put the ball on the ground to steady himself. The ball stayed there, though, and Neilsen's recovery led to a 42-yard field goal by Mike Meyer.
Robinson finished the half by being picked off by Christian Kirksey on a deflected ball at the Iowa goal line with 1:02 left before the break.
Michigan had gained over 500 yards of offense in three of its last four games, but Iowa held the Wolverines to 323 yards.