COLUMBUS, Ohio -- Urban Meyer is a perfectionist.
His second-ranked Ohio State team was less than perfect.
Braxton Miller threw two touchdown passes before fighting leg cramps and Jordan Hall ran for two more scores to lead the Buckeyes to a 40-20 victory over Buffalo on Saturday in the season opener for both teams.
"I preached all week about coming out fast and playing hard, and they did it. Two quick scores, the first quarter (went by the) script. You can't play much better than our guys did," Meyer said. "And then we rough a punter, and we have a fourth down (play) we don't make and then we throw a screen and it goes the other way. In a tight game, you're going to lose."
The Buckeyes, striving for a crisper start after a lethargic outing in Meyer's debut in 2012, led 23-0 after the first quarter before the Bulls made things interesting. Joe Licata threw two TD passes and linebacker Kahlil Mack returned a Miller interception 45 yards to make it 30-20 in the third quarter.
A crowd of 103,980 didn't know what to think.
But after Miller was sidelined a second time with cramps, sub Kenny Guiton promptly tossed a 21-yard touchdown pass to Chris Fields and the Buckeyes were never threatened again.
"After we created a little momentum going our way, then all of a sudden -- BAM! -- they're right back in the end zone," Bulls coach Jeff Quinn said. "That's the mark of a good football team."
Licata completed 19 of 32 passes for 185 yards and two scores with one interception, with Branden Oliver gaining 73 yards on 26 carries for the Bulls, who were playing Ohio State for the first time.
"If you're looking for a moral victory, that means you lost the game," Licata said. "No, we don't feel good about losing."
Ohio State was in control after its first three possessions. Miller, who was 15 of 22 passing for 178 yards and also ran for 77 yards on 17 attempts, hit Devin Smith on a 47-yard scoring pass on the fourth offensive play of the season. Then he found Fields on a 7-yard scoring pass.
As good as that first 15 minutes was -- 216 yards of offense, a big lead and Buffalo looking thoroughly defeated -- the Bulls were far from dead.
The Buckeyes, who had 10 new starters on defense to start the game, missed a punt block and roughed the punter, then failed on a Hall run on fourth and 1 near midfield. Meyer chewed out his offensive line when it returned to the bench.
After Ron Tanner picked off a tipped Licata pass for Ohio State, speedy freshman tailback Dontre Wilson gave it right back on the next play when he was hit by linebacker Blake Bean and Buffalo's Derek Brim recovered.
The always expressive Meyer hung his head on the sideline.
Licata needed just three plays to cover the 44 yards, hitting three consecutive passes with help on a late hit against Ohio State cornerback Armani Reeves. Reeves was starting in place of All-Big Ten standout Bradley Roby, suspended for the opener after a bar skirmish in Bloomington, Ind., in July. The Buckeyes were also without starting tailback and 2012 leading scorer Carlos Hyde (listed as a person of interest in an alleged assault against a female) and his backup, Rod Smith (who sat out due to an unspecified violation of team rules).
Licata flipped a pass over the middle to tight end Matt Weiser, who rumbled into the end zone from 16 yards out.
Four plays later, Miller tossed a short pass directly to the Bulls' Mack, considered one of the top linebackers in the nation, and he outran intended receiver Wilson into the end zone to make it 23-13.
"We was rolling at first," Miller said. "(With) that screen, that blind throw I threw, the momentum went down and shifted a little bit."
Wilson redeemed himself for the turnover by taking the kickoff back 51 yards. On first down, Hall bolted through another massive hole at left tackle and there was nobody on the second level to stop him as he raced 37 yards.
Buffalo threatened again in the third quarter, with Licata hitting Alex Neutz on a 10-yard scoring pass, cutting the lead to 30-20.
The next series was almost a disaster for the Buckeyes.
Miller went down without being tackled and left the field, causing some concern before it was determined he had cramps. He returned a play later only to be sacked by Mack and then fumbling at his own 1. But Mack was called for a hands-to-the-facemask penalty which nullified the turnover and instead gave the Buckeyes a first down at their 37.
"That turnover would have changed the game," Mack said. "That was a blow. A big blow."