Match ends, Rotherham United 0, Bradford City 0.
Rotherham United's hopes of automatic promotion suffered another blow as they drew with mid-table Bradford City.
Jon Stead volleyed Bradford's best chance over the bar early on.
Michael O'Connor hit a post, Haris Vuckic chipped off target and Kari Arnason headed over from eight yards as the Millers were frustrated in their search for a winner in the second half.
Rotherham's failure to win means Wolves will be promoted to the Championship if they win at Crewe on Saturday.
Steve Evans's side, who have just four matches remaining, are eight points behind second-placed Brentford, having played a game more than the Bees.
It could have been worse for Rotherham, who needed goalkeeper Adam Collin to deny Adam Reach's toe-poked effort after the Bradford winger beat two defenders in a mazy run.
Rotherham manager Steve Evans told BBC Radio Sheffield:
"I keep saying it, we're Rotherham United. We don't get them [penalty decisions], we get them against us. We'll see what the referee's excuses are.
"I looked for a response from Tuesday [a defeat at Sheffield United] and they gave us a response, because if we play like that in the play-offs, it may not win matches for us but we'll take what comes and we were terrific.
"We played better football tonight and we made better chances."
- 37AdamsSubstituted forVuckicat 63'minutes
- 6DruryBooked at 42mins
- 32BennettSubstituted forThompsonat 90+4'minutes
- 4DolanSubstituted forDe Vitaat 77'minutes
- 20De Vita
- David Webb
- Shots on Target
Second Half ends, Rotherham United 0, Bradford City 0.
Substitution, Bradford City. Garry Thompson replaces Kyle Bennett.
Attempt missed. Kári Arnason (Rotherham United) header from the centre of the box is too high.
Corner, Rotherham United. Conceded by Rory McArdle.
Attempt blocked. James Tavernier (Rotherham United) right footed shot from outside the box is blocked.
Foul by Kári Arnason (Rotherham United).
Jon Stead (Bradford City) wins a free kick in the attacking half.
Foul by Haris Vuckic (Rotherham United).
Adam Reach (Bradford City) wins a free kick in the defensive half.
Substitution, Bradford City. Raffaele De Vita replaces Matthew Dolan.
Attempt missed. Haris Vuckic (Rotherham United) left footed shot from outside the box is too high.
Corner, Rotherham United. Conceded by Gary Jones.
Michael O'Connor (Rotherham United) wins a free kick in the defensive half.
Foul by Jon Stead (Bradford City).
Attempt missed. Haris Vuckic (Rotherham United) right footed shot from the left side of the six yard box is too high.
Attempt missed. Jon Stead (Bradford City) header from the centre of the box misses to the left.
Attempt saved. James Tavernier (Rotherham United) right footed shot from the right side of the box is saved in the top centre of the goal.
Substitution, Rotherham United. Haris Vuckic replaces Nicky Adams.
Attempt saved. Ben Pringle (Rotherham United) left footed shot from outside the box is saved in the top centre of the goal.