Eintracht Frankfurt took a major step toward Bundesliga survival by recording a 1-0 victory over Borussia Dortmund, which will finish the season as runner-up after Bayern Munich was crowned champion on Saturday.
Dortmund needed to win and hope Bayern suffered a shock loss at Ingolstadt to keep its title challenge alive, but Pep Guardiola's team sealed its fourth championship in succession with a 2-1 triumph.
And even if the Bavarian giant had slipped up, BVB could not do what was required of them, Stefan Aigner's early header consigning the visitors to a narrow defeat at a raucous Commerzbank-Arena.
It was a crucial result for the home team, which moves one point clear of the relegation play-off places courtesy of Werder Bremen's 0-0 draw at Cologne and Stuttgart's loss at Mainz.
Dortmund is at least guaranteed second place — granting automatic Champions League qualification — and has a DFB-Pokal final against Bayern in Berlin to look forward to on May 21.
Frankfurt, meanwhile, travels to Bremen's Weserstadion next weekend in a huge clash between two teams still struggling against the threat of relegation.
The host was expected by many to struggle against a Dortmund side which has been rampant of late, but it instead converted sustained early pressure into a deserved 15th-minute lead. Makoto Hasebe's cross from a short corner was met by the head of Aigner, who steered the ball into the bottom-right corner of Roman Burki's net.
The goal vindicated the decision of Frankfurt coach Niko Kovac to start Aigner, who came off the bench to net the winner in a vital 2-1 derby victory over Darmstadt last weekend.
Thomas Tuchel's men looked unstoppable as it mauled Wolfsburg 5-1 in its previous outing, but was without Julian Weigl after he became the first Dortmund player of the Bundesliga season to incur a suspension; yellow card accumulation consigning the midfielder to the sidelines.
Ilkay Gundogan was also unavailable after suffering a knee injury playing basketball, a problem that has ruled him out of Germany's Euro 2016 campaign.
And the diminished visitor could only carve out two half-chances in the opening 30 minutes. Both fell to Pierre-Emerick Aubameyang, who scored twice last time out after being introduced as a second-half sub.
The Gabon international had an opportunity to level the scores barely a minute after the opening goal when a Marco Reus throughball split the Frankfurt defence, but the striker tripped at the vital moment. He then fired over the crossbar in the 25th minute from a cutback supplied by Reus.
Despite its struggles to create openings, Dortmund should have gone in level at the break, Mats Hummels' header from a Nuri Sahin free-kick incorrectly ruled out for offside in first-half stoppage time.
That was as close as the away team came to forcing an equaliser in a frustrating second half for BVB, which saw Christian Pulisic fire high over the target when presented with a rare sight of goal.
Henrikh Mkhitaryan tested Lukas Hradecky in the 72nd minute, but found the Frankfurt goalkeeper once again equal to the task.
A desperate David Abraham block then denied the Armenia international with eight minutes to go as the determined host held out to secure a result that could yet preserve its top-flight status.
Key Opta stats:
- Keeper Lukas Hradecky had the most touches for Frankfurt against Dortmund (46) and he played the most passes for Frankfurt (36, no other player from Frankfurt had more than 16).
- Dortmund has lost the first Bundesliga match in this year and has failed to score for the first time since matchday 25 (0-0 against Bayern).
- Frankfurt had only 134 passes, this is the lowest amount for a team in a single Bundesliga match since 2004-05 (beginning of detailed data collection). Frankfurt never had such a bad passing accuracy like today (49.3 per cent).
- Mats Hummels was subbed off in the 65th minute and had 119 passes, 14 more than Frankfurt as a whole team at that time.
- For the first time since November/December 2014 Frankfurt have won three games in succession.
- IND vs ENG Live Score Updates, 4th Test Day 4: IND 120/3, 72 runs away from win; Gill, Jadeja recalibrate innings
- Ranji Trophy Live Score, Day 4 Quarterfinal updates: MP beats Andhra by 4 runs; Karnataka makes comeback vs Vidarbha
- NBA roundup: Pacers snap Mavs’ 7-game win streak
- Klopp puts faith in kids to win ‘most special’ trophy of his career
- Gujarat Giants vs Mumbai Indians Highlights, WPL 2024: Harmanpreet Kaur seals five-wicket win with a six