Leipzig's winless run extended to four games after they failed to collect all three points in their match against Borussia Dortmund. Meanwhile, Hamburg's survival hopes grew dimmer after a scoreless draw with Mainz.
Cologne 2-3 Stuttgart
(Pizarro 7', Jojić 86' — Gomez 45', 45+2', Beck 57')
The great escape looked on when Cologe took the lead after just seven minutes in a boisterous encounter with Stuttgart. It would prove to be a false dawn, however, as a series of goalkeeping errors from the usually solid Timo Horn allowed the visitors to take the initiative. Mario Gomez scored twice in two minutes during first half added time, before Andreas Beck made certain with his second half strike. A delicious freekick from Miloš Jojić in the 86th minute proved to be too little too late. It's going to take a miracle for Cologne to survive now.
RB Leipzig 1-1 Borussia Dortmund
(Augustin 29' — Reus 38')
Dortmund and Leipzig shared the points when both really needed all three. For Dortmund, it meant ceding second place to local rivals Schalke, even though they're still undefeated in the Bundesliga playing Peter Stöger's sometimes tepid football. And for Leipzig, a draw means another week spent outside the Champions League positions, down in sixth. If their players hadn't spent much of the first half offside, the result might have been very different for Dortmund. BVB had a goal rightly ruled out and lost several other promising attacks to the linesman's flag.
Hamburg 0-0 Mainz
A disallowed goal, a missed penalty, a Mainz man sent off: Hamburg did everything but score in their do-or-die game against Mainz. A shared point is of rather more value to 16th-placed Mainz, on 25 points now, than it is to HSV, on 18 points in 17th. The never-relegated dinosaurs remain seven points adrift of even of a hope of safety — now with just nine matches remaining in the season. If Cologne beat Stuttgart on Sunday, that would put HSV bottom of the table.
Eintracht Frankfurt 1-0 Hannover
(da Costa 39')
Surprise package Frankfurt bounced back after their defeat to Stuttgart last week, finding their goal from an unlikely source. Defender Danny da Costa provided a bullet header from a corner to make the difference against Hannover, a tricky and well-organized opponent. The Eagles might not have played champagne football, but they kept a clean sheet and move into third place with that win.
Schalke 1-0 Hertha Berlin
Frankfurt couldn't leapfrog second-placed Schalke, however, who also did the business at home against Hertha on Saturday afternoon. The Royal Blues' goal wasn't the prettiest, a scuffed cross from the right followed by an untidy flick-on from Franco di Santo and finally a mishit finish from Croatia's Marko Pjaca. They all count though, especially in the latter third of the season.
Wolfsburg 1-2 Bayer Leverkusen
(Mehmedi 79' — Alario 31' pen, Brandt 78')
Despite Admir Mehmedi keeping the game alive with 11 minutes remaining, Bayer Leverkusen looked in control throughout on their trip east. Leverkusen had the lion's share of the ball, won more duels, completed a higher percentage of passes and had almost three shots for every one managed by the Wolves. Lucas Alario didn't just convert the first-half penalty, he also combined in a sublime one-two with Julian Brandt, who finished off Leverkusen's second with a cheeky chip. Three points guarantee Leverkusen fifth place for another week; Wolfsburg slide further into the relegation scrap, level with Mainz on 25 points.
Augsburg 0-2 Hoffenheim
(Kramaric 30', Gnabry 50')
Wobbly Hoffenheim scored three big points in Augsburg, helping settle the nerves and recover seventh spot from Borussia Mönchengladbach. Andrej Kramaric had an impressive match, opening the scoring with a powerful header and setting up Serge Gnabry for the second. Hoffenheim had only won one of their last seven going into Saturday's game. Overachieving Augsburg, meanwhile, drop to ninth.
Borussia Mönchengladbach 2-2 Werder Bremen
(Zakaria 5', Moisander o.g. 33' — Delaney 59', Johannsson 78')
It looked like Denis Zakaria had wrapped up three points for Gladbach all by himself on Friday night. The 21-year-old Swiss international opened the scoring with a tidy finish and later delivered a dangerous low cross that Niklas Moisander diverted into his own goal while trying to clear the ball.
Despite their poor recent form and the difficult snowy conditions, a 2-0 home lead might have seemed unassailable for the hosts. But Werder Bremen continued to press forward, as Gladbach began to lack ideas on the ball.
Slapdash marking from a corner allowed Bremen back into contention. Loanee Reece Oxford lost track of Thomas Delaney in the box, allowing the Dane a free header from near the penalty spot. Despite, or perhaps thanks to a deflection off Delaney's own shoulder, the ball looped past Yann Sommer into the top corner.
American Aron Johannsson broke a lengthy scoring drought — he hadn't netted since 2016 in the league — to salvage a valuable point for Bremen, who are still in the battle to avoid finishing in the bottom three. But it's Gladbach who are really struggling to find their stride since the winter break. They may still sit in seventh, but the Foals have now taken just 10 points from their last 10 games in the Bundesliga.
Still to come this weekend in the Bundesliga:
Cologne vs. Stuttgart (3:30 p.m. CET)
Freiburg vs. Bayern Munich (6:00 p.m. CET)