Bundesliga leaders Bayern Munich were left to settle for a 0-0 draw at Bayer Leverkusen as Thomas Muller spurned two second-half chances.
Muller, brought on as a substitute for Arjen Robben, volleyed over after Kingsley Coman had set him up and then wasted the good work of Douglas Costa by firing wide.
Xabi Alonso was sent off six minutes from time on a frustrating day for Bayern, who remain eight points clear at the top as Borussia Dortmund were also held to a goalless draw.
A solid defensive performance from third-placed Hertha Berlin ensured the spoils were shared at the Olympiastadion as the league’s leading scorer Pierre-Emerick Aubameyang was held in check.
Fourth-placed Schalke gained ground on Hertha with a 3-0 win over Wolfsburg, goals from Klaas-Jan Huntelaar, Johannes Geis and Alessandro Schopf sealing the points.
Stuttgart are now five points clear of the relegation play-off place following a thrilling 4-2 victory at Eintracht Frankfurt, which marked their fourth straight league win.
Christian Gentner and Daniel Didavi put Stuttgart 2-0 up in the first half before Alexander Meier pulled one back seven minutes after the restart.
Didavi was then sent off for a second bookable offence after Georg Niedermeier had restored Stuttgart’s two-goal lead, which was turned into a three-goal advantage by Filip Kostic.
Kostic converted from the penalty spot following Carlos Zambrano’s foul on Artem Kravets, which saw the Peruvian shown a second yellow card, with Szabolcs Huszti’s late goal nothing more than a consolation.
Rock-bottom Hannover suffered a sixth consecutive league loss as they went down 1-0 at home to Mainz thanks to Jairo Samperio’s 24th-minute effort.
Elsewhere, Moritz Hartmann’s penalty five minutes from time sealed a 2-1 win over Augsburg for Ingolstadt.