Kingsley Coman opened the scoring early, and while Sebastian Haller momentarily had Dortmund fans believing in their title chances, David Alaba and Renato Sanches scored soon after to lock up the title.
Franck Ribery celebrated his final match for the club by getting on the scoresheet as well:
Not to be outdone, Arjen Robben also bagged a final goal for the club.
Frankfurt just snuck into the UEFA Europa League spots despite losing, as Hoffenheim gave away a two-goal lead at Mainz, losing 4-2 and dropping to ninth place. Bayer Leverkusen beat Hertha 5-1 and locked up the final UEFA Champions League ticket, while Wolfsburg romped past Augsburg, winning 8-1.
Bayern came into the day needing just a draw against Frankfurt to defend their Bundesliga crown. They have won the title in seven consecutive years.
The hosts started the day by honoring three veterans set to depart the club, as Robben, Ribery and Rafinha put on the iconic red kit for the final time:
Coman gave the Bavarians the perfect start inside four minutes, finding the breakthrough after a swift attacking move.
Per Goal's Ronan Murphy, any excitement regarding the title race seemed gone already:
Serge Gnabry had a goal ruled out by the video assistant for offside, and for most of the first half, the hosts cruised against a Frankfurt side that needed a result themselves to secure their European ticket.
Over in Monchengladbach, Dortmund struggled for much of the first half, but Jadon Sancho gave the visitors the lead shortly before half-time. There was some controversy involved with the goal, as the ball may have gone over the line prior to Marco Reus' cross:
There was no top-down image that could confirm the ball had gone completely out, however, and without conclusive evidence to overturn the call, the goal stood.
Haller equalised for Frankfurt after just 51 minutes, pushing his team to within a single goal of the win and a possible title for Dortmund, but Alaba restored the lead within minutes, crushing those dreams:
Reus doubled BVB's lead shortly after, but Dortmund then needed a ton of help from a Frankfurt side that was on the ropes.
And when Sanches made it 3-1, the title race was as good as over. The Portuguese picked a good time to open his Bundesliga account, per sports writer Chris Williams:
Robben made his final appearance off the bench, replacing Gnabry, but it was Ribery who got to celebrate his final outing for the club first, with a goal after 72 minutes. He had replaced Coman after 61 minutes.
The Dutchman would get his goal soon after, capping a perfect final matchday for the Rekordmeister.
Bayern have now won the Bundesliga title 28 times.