Bayern Munich went 14 points clear at the top of the Bundesliga after beating Bayer Leverkusen in the first game following the winter break.
Javi Martinez blasted in the opener from close range.
Leon Bailey hit the bar for Leverkusen moments before Franck Ribery cut in from the left and slammed home his first league goal of the season.
Kevin Volland pulled one back with a deflected strike, but James Rodriguez curled in a wonderful late free-kick.
Sandro Wagner, a second-half substitute, made his first Bayern appearance for over 10 years. The champions re-signed their former youth striker from Hoffenheim this summer.
Second-placed Schalke are away to RB Leipzig on Saturday (17:30 GMT).