The Spartans' defense sacked Devin Gardner seven times and held Michigan to negative rushing yards as Mark Dantonio improved to 5-2 against the Wolverines.
Michigan came out early and drove down to the MSU 22-yard line before a sack and good pressure on Gardner forced a field goal. Matt Wile knocked it through from 40 yards and gave Michigan a 3-0 lead after its first drive.
The Spartans came back with a big play on their first drive with a throwback to fullback Trevon Pendleton who ran for 49 yards down to the Michigan 26. The Spartans drive stalled and Michael Geiger knocked through a 40-yard field goal with 9:10 to go in the first quarter.
Brendan Gibbons gave Michigan the lead with a 39-yard field goals with 3:22 left in the second.
The Spartans responded with a long touchdown drive which ended with a 14-yard pass from Connor Cook to Bennie Fowler in the corner of the end zone for a 13-6 lead going into halftime.
The Spartans opened the second half with an impressive drive down to the Michigan 18 before a false start by Michael Dennis moved the Spartans back and they settled for a 35-yard field goal from Geiger and a 16-6 lead.
The Spartans had opportunities to put drives together, but stalled into Michigan territory. After exchanging punts, the Spartans started a drive from their 47, but Cook's pass for Josiah Price was intercepted by Raymon Taylor who returned it to the MSU 40.
The Spartans defense came up strong on the following three plays, taking Gardner down for a loss of 5 before back-to-back sacks forced Michigan into a punt from its 38 on fourth-and-31.
The Spartans took the following drive downfield for a 1-yard touchdown by Cook to put the Spartans ahead 22-6 with 10:31 to go.
The drive was keyed by a third-and-11 conversion where Cook was forced out of the pocket but threw a perfect touch pass to Bennie Fowler down to the Michigan 9-yard line.
The Spartans put the icing on the cake when Darqueze Dennard intercepted Gardner at the MSU 3-yard line.
Eight plays later, Langford scampered in from 40 yards out to put MSU up 29-6