Bayern Munich need two wins from their last four games to win an eighth straight Bundesliga title after hitting back to beat Bayer Leverkusen.
Hansi Flick’s side have lost just once in their past 21 games in all competitions but did it the hard way after trailing at Leverkusen.
Kingsley Coman, Leon Goretzka and Serge Gnabry all netted in the first half following Lucas Alario’s opener.
Robert Lewandowski headed in his 30th league goal of the season.
Bayern have lost just two games in 26 since Flick replaced the sacked Niko Kovac in November and come up against Eintracht Frankfurt in the German Cup semi-final on Wednesday.
Second-placed Borussia Dortmund maintained their slim hopes of overhauling Bayern and winning the title by edging a 1-0 victory over Hertha Berlin – ex-Liverpool midfielder Emre Can scoring for the hosts.
It did not start well for Bayern against Leverkusen, who had been in fine form with just one defeat in their previous 14 games but were without injured star man Kai Havertz, as Argentine striker Alario beat the offside trap and kept his cool to finish from Julian Baumgartlinger’s through ball.
The setback sparked Bayern into life, France international Coman slotting home the equaliser and Goretzka turned from provider to scorer by drilling in from the edge of the box.
Ex-Arsenal and West Brom man Gnabry converted his 19th goal of the season by latching onto a long ball over the top to lob a smart finish over the advancing goalkeeper Lukas Hradecky.
Teenager Florian Wirtz, 17, came off the bench to score a lovely consolation goal late on, cutting onto his left foot inside the area and curling a strike past the reach of Manuel Neuer.
Bayern striker Lewandowski picked up a yellow card, meaning he will be suspended for their league game against Borussia Monchengladbach next Saturday.
The Poland international has 44 goals overall this campaign, but will now only have three games to chase down Gerd Muller’s record of 40 in a single Bundesliga season.