Match ends, Borussia Dortmund 0, FC Bayern München 0.
Bayern Munich maintained their five-point lead over second-placed Borussia Dortmund following a 0-0 draw at Westfalenstadion.
A seventh win in eight league games would have lifted Dortmund to within two points of Bayern following the champions' shock 2-1 defeat at home to Mainz in midweek.
But Pep Guardiola's side rarely looked like losing again.
The visitors' Arturo Vidal was closest to a winner when he hit the bar.
Only thing missing was a goal
It was not an epic 'Der Klassiker' but there was still plenty of quality on show.
Both sides struggled in front of goal, with Dortmund's lively striker Pierre-Emerick Aubameyang twice being denied by Manuel Neuer.
Robert Lewandowski had a quiet night, with Bayern's best openings falling to Thomas Muller, Douglas Costa, Arjen Robben and Vidal, whose close-range volley was superbly touched onto the bar by Roman Burki.
Bayern 'Pep' up title hopes
Guardiola's side will be the happier of the two as they maintained the status quo at the top of the table with nine games to go.
A third league defeat of the season would have made it a nervy run-in to the end of the season and raised further question marks about Bayern's ability to get the job done before Guardiola leaves to join Manchester City in the summer.
There was no doubt his side looked fully focused on their jobs at a passionate Westfalenstadion and, if anything, the more likely winners.
Bayern dominated the second half and have every chance of retaining their title in tandem with a challenge for the Champions League.
The home leg of their last-16 tie with Juventus, currently locked at 2-2, will be played later this month.
A tough man to please
Guardiola dished out some tough love to Joshua Kimmich after he helped Bayern keep a clean sheet.
The 21-year-old midfielder was pressed into service as a central defender to cover for injuries and produced a top-class performance.
That didn't stop Guardiola marching onto the pitch after the final whistle to remonstrate at length with the seemingly bemused young man.
All ended well, though, with Guardiola dishing out hugs and praise.
The Bayern boss said: "He is passionate, he has absolutely everything."
It could be interesting at Manchester City next season......
Bayern Munich have a blank midweek before playing improving Werder Bremen at home next Saturday.
Borussia Dortmund turn their attention back to Europe and the home leg of an appetising last-16 tie against Tottenham in the Europa League on Thursday.
What they said
Bayern forward Thomas Muller: "Nil-nil is definitely a result we can live with. I'd like to have seen our efforts rewarded with a 1-0 win.
"It stays exciting. We're still under pressure for the remaining games."
- 6BenderBooked at 37mins
- 8GündoganSubstituted forSahinat 90+1'minutes
- 11ReusSubstituted forRamosat 81'minutes
- 14AlonsoBooked at 22minsSubstituted forBenatiaat 90'minutes
- 11Douglas CostaSubstituted forRibéryat 75'minutes
- 6Thiago Alcántara
- 13Ferreira de Souza
- Tobias Stieler
- Shots on Target
Second Half ends, Borussia Dortmund 0, FC Bayern München 0.
Substitution, Borussia Dortmund. Nuri Sahin replaces Ilkay Gündogan.
Substitution, FC Bayern München. Medhi Benatia replaces Xabi Alonso because of an injury.
Delay over. They are ready to continue.
Delay in match Xabi Alonso (FC Bayern München) because of an injury.
Attempt missed. Thomas Müller (FC Bayern München) right footed shot from outside the box misses to the right. Assisted by Arjen Robben.
Attempt missed. Adrián Ramos (Borussia Dortmund) header from the centre of the box is close, but misses to the left. Assisted by Pierre-Emerick Aubameyang with a cross.
Attempt missed. Thomas Müller (FC Bayern München) left footed shot from outside the box is high and wide to the left.
Robert Lewandowski (FC Bayern München) wins a free kick on the right wing.
Foul by Mats Hummels (Borussia Dortmund).
Corner, Borussia Dortmund. Conceded by Xabi Alonso.
Attempt blocked. Henrikh Mkhitaryan (Borussia Dortmund) right footed shot from outside the box is blocked. Assisted by Pierre-Emerick Aubameyang.
Hand ball by Philipp Lahm (FC Bayern München).
Substitution, Borussia Dortmund. Adrián Ramos replaces Marco Reus.
Juan Bernat (FC Bayern München) wins a free kick on the left wing.
Foul by Marco Reus (Borussia Dortmund).
Attempt missed. Xabi Alonso (FC Bayern München) right footed shot from more than 35 yards misses to the left. Assisted by David Alaba.
Attempt missed. Arturo Vidal (FC Bayern München) right footed shot from outside the box is too high. Assisted by Franck Ribéry.
Corner, FC Bayern München. Conceded by Sven Bender.