Dortmund – who had not won a Bundesliga match at Signal Iduna Park since thrashing Stuttgart 6-1 on November 1 – returned to winning ways with a comprehensive victory that saw them score twice in each half.
Pierre-Emerick Aubameyang opened Dortmund's account with two early goals before Robert Lewandowski's 47th-minute penalty sealed the result.
And there was still time for Serbian Milos Jojic to complete the scoring on his Dortmund debut in the 68th minute.
The win moves Jurgen Klopp's side to within a point of the second-placed Bayer Leverkusen, although Sami Hyypia's side will play Schalke later on Saturday.
Dortmund were unchanged following a 1-0 DFB Pokal quarter-final win at Frankfurt on Tuesday and they started brightly as Lewandowski, Nuri Sahin and Henrikh Mkhitaryan all had early chances.
All three players were unable to beat Frankfurt goalkeeper Kevin Trapp but they did claim the lead in the 10th minute, taking advantage of some terrible defending from Sebastian Jung.
Mkhitaryan robbed the full-back on the edge of the Frankfurt area and rolled a pass into Aubameyang, with the Gabon international making no mistake from close range as he side-footed past Trapp.
The hosts were in rampant form but had a slice of luck to double their lead midway through the first half.
Sahin's corner was headed towards goal by Manuel Friedrich and although Trapp did well to save, the loose ball dropped to Aubameyang and he stabbed home from three yards.
Dortmund goalkeeper Roman Weidenfeller was a mere spectator for the majority of the first half, but made a good low save to keep out a Constant Djakpa free-kick on the only occasion he was called into action.
Dortmund extended their lead just after the break after Djakpo was adjudged to have fouled Lewandowski while challenging for a left-wing cross.
The Polish striker picked himself up and rifled home the spot kick for his 14th league goal of the season.
Frankfurt were struggling to cope with Dortmund, who saw Marcel Schmelzer's header clawed off the line by Trapp, but within a minute of coming on Jojic got his side's fourth.
Jojic, who replaced Mkhitaryan, pounced after Trapp failed to hold a Kevin Grosskreutz strike, tapping into an empty net.
Despite being beaten four times Trapp continued to do his best to keep the Dortmund forwards at bay, and he made a late stop from Lewandowski to deny the 25-year-old a second goal of the game.
Four goals were more than enough for Dortmund though, as they won their fourth match in a row in all competitions.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.