COLUMBUS, Ohio (AP) -- Despite its imperfect play, Ohio State is still unbeaten on the season.
Braxton Miller ran for two touchdowns and No. 16 Ohio State overcame a lethargic, mistake-filled and enigmatic effort to hold off UAB 29-15 on Saturday.
Coach Urban Meyer narrowed the problems to ''offense, defense and special teams,'' expressed his disappointment and said his players have to get dramatically better before opening Big Ten play at No. 21 Michigan State on Saturday.
He also reminded fans in so many words that he is no miracle-worker and that it was only a year ago that the Buckeyes were 6-7.
''You've got to think about where this team was, now. This is not a finely tuned machine right now, it hasn't been for a while,'' he said. ''Obviously, there's some growing pains and it's not as easy. I thought we'd be further ahead.''
UAB (0-3) more than held its own against the Buckeyes (4-0), who committed drive-killing penalties, had a punt blocked for a touchdown and had trouble scoring against a defense that gave up 44 points and 477 yards in its first two games.
''We're not playing to our potential,'' wide receiver Corey Brown said. ''Especially after a wakeup call like that, we've got to come out (this week) and practice hard.''
There was plenty of blame to go around.
''We weren't as aggressive as last week,'' Ohio State defensive lineman Johnathan Hankins said. ''I feel like some guys have got to know their place, their schemes, when they're out there.''
The Blazers scored on special teams and started the second half by recovering an onside kick, but were undone by four chop-block penalties and a giveaway that led to a score.
''Moral victories are OK, but we really wanted to come back with a W,'' Blazers running back Darrin Reaves said.
Miller completed passes for 12, 14 and 18 yards and ran for 26 yards to set up his clinching 1-yard TD run with 5:03 left.
It was yet another curious performance by the Buckeyes. They have struggled in all four of their nonconference home games, having to come from behind last week before beating California 35-28 on a late defensive gaffe.
Miller completed 12 of 20 passes for 143 yards and rushed for 64 yards on 11 carries. Jordan Hall gained 105 yards on 17 carries.
Ohio State was a 37-point favorite against UAB, which had lost at home to in-state rival Troy 39-29 in its opener and then been pounded 49-6 by No. 8 South Carolina a week ago.
Yet UAB outgained the Buckeyes, 403-347 and had more first downs 22-20.
''We seem like a very passive team,'' Meyer said. ''They didn't score a touchdown on our defense but we give up a lot of yardage. That hurts. I sit there and I'm pained watching it. On offense our explosiveness is obviously nonexistent for much of the game. If it was one thing we could make adjustments and fix it, it's more than one thing right now.''
UAB's Austin Brown completed 21 of 35 passes for 196 yards with one interception, while Jonathan Perry hit on 7 of 11 passes for 63 yards before leaving after a quarter.
The Blazers, down by nine points at the half, showed some moxie against a ranked opponent by kicking onside and recovering the ball easily.
Ty Long made his third field goal of the afternoon for UAB to cut the gap to 21-15 early in the fourth quarter.
After floundering for the entire half, the Buckeyes finally got untracked to put the game out of reach, going on a 71-yard drive that ended with Miller picking his spot and bulling in off left tackle on a 1-yard carry.
Miller then raced around the left end for the 2-point conversion and the final 14-point margin.
Doran Grant's interception ended the next UAB possession and the Blazers' hopes.
UAB quickly grabbed a 9-0 lead, quieting a crowd of 105,019.
Meyer, who has taken over coaching Ohio State's special teams, was particularly miffed after the Blazers broke through easily and blocked a punt before it got to the toe of Ben Buchanan.
Linebacker Jesse Parrish was credited with the block, with receiver Nick Adams scooping up the loose ball and running 20 yards for the touchdown.
''We told our kids that we were going after the first one, that we were sending everybody and we would score a touchdown,'' he said. ''It happened just as planned.''
After Long's 47-yard field goal pushed the lead to nine points, the Buckeyes went 75 yards to score on a 1-yard plunge by Rod Smith. But the Blazers came right back to make it 12-7 in the half when Long converted a 54-yard field goal - the longest in UAB history and the third-longest by an Ohio State opponent at Ohio Stadium.
From there, however, everything unraveled for the Blazers. It took just 2:42 for the Buckeyes to grab a 21-12 lead.
Miller completed four straight passes and then covered the last 12 yards himself - pirouetting to leave linebacker Greg Irvin grasping at air at the 7 - to give Ohio State its first lead of the day.
Two snaps later, Brown tossed a quick pass in the right flat to tight end Kennard Backman, who was upended by Christian Bryant and Grant - Backman leaving the ball on the ground where Grant fell on it.
Three plays after that, Zach Boren scored from the 2.
Meyer will have a busy week.
''I have a very clear understanding of where we're at,'' he said. ''I'm disappointed, but that doesn't mean I don't love the guys. I think they're working their tails off. We've just got to keep grinding.''
Follow Rusty Miller on Twitter: https://www.twitter.com/rustymillerap