Bayern Munich increased their lead at the Bundesliga summit to 18 points with a routine 2-0 win at Mainz.
Sandro Schwarz's hosts enjoyed moments of encouragement during both halves at Opel Arena but Bayern's extra class ultimately told.
Franck Ribery is seemingly back to top gear following his knee ligament injury at the end of last year and the former France star showcased his enduring class with a sweetly struck half volley to put Jupp Heynckes' men ahead.
James Rodriguez made it two a minute before the break, controlling and finishing immaculately, to leave Mainz with an uphill task they approached gamely but with little prospect of success.
Schalke's surprise 2-1 home defeat to struggling Werder Bremen means they will travel to the Allianz Arena next weekend 19 points shy of Bayern, with Bayer Leverkusen now the closest of any team vaguely resembling a challenger.
Both sides enjoyed spells of inquisitive pressure during the opening stages and Alexandru Maxim might have punished Bayern with a more accurate finish after Jean-Philippe Gbamin nutmegged Sebastian Rudy to create the opening.
Mats Hummels was back in the Bayern defence for the first time in 2018 and a shuddering tackle from the Germany centre-back on Gerrit Holtmann halted Mainz's latest charge midway through the first half.
A Bayern side featuring the playmaking talents of Corentin Tolisso and James were strangely lacking for inspiration until Ribery brilliantly opened the scoring.
The veteran winger crashed a brilliant half-volley into the bottom corner from the edge for box after Mainz only partially cleared a 33rd-minute corner.
Thomas Muller saw a one-on-one opportunity run away from him before Tolisso picked out James with a wonderful floated pass. The Colombia star's chest control and volleyed finish was of a similar standard.
Mainz resumed very much on the ropes and Sandro Wagner – making his first Bayern start as Robert Lewandowski rested on the bench – struck the outside of the post on the end of James' deft throughball.
Two brave blocks in quick succession were required to thwart Tolisso before Robin Zentner saved well from James and Mainz scrambled the rebound clear.
Zentner's opposite number Sven Ulreich had become a virtual spectator but the Bayern keeper showed razor sharp reactions to deny half-time replacement Robin Quaison from Giulio Donati's cutback.
That encouraged greater ambition from the hosts and Hummels threw his body on the line to stop Abdou Diallo from turning in Stefan Bell's free-kick.
David Alaba replaced Bayern holding midfielder Rudy with 20 minutes remaining and unleashed a perfectly weighted throughball for Muller, but the Germany international's radar was off as he prodded wide.
It was profligacy Heynckes' side were never likely to regret, although the same could not be said for Quaison when he dragged a shot wastefully wide.
A lively showing overall from the Swedish forward made his case well enough for a return to Schwarz's starting XI at Eintracht Frankfurt next week, where Mainz will arrive below Werder on goal difference following the fourth-bottom side's unexpected heroics.
Key Opta stats:
- Mainz have lost their last six home league games against Bayern Munich (F2, A15) – their worst-ever run against one side in the Bundesliga.
- Bayern have won 10 competitive games in a row – their best run since August-October 2015 (12 in a row under Pep Guardiola).
- With 20 points, Mainz are playing the worst Bundesliga season in their history – only in 2005-06 did they have as few at this stage of the season.
- Jerome Boateng played in his 150th Bundesliga game for Bayern.