Bayern Munich survived a late scare to beat Hannover 2-1 and turn the screw on Bundesliga leader Borussia Dortmund on Saturday.
Toni Kroos scored in the 36th minute before Mario Gomez came off the bench to make it 2-0 with his league-leading 23rd goal of the season in the 68th.
Hannover substitute Didier Ya Konan pulled one back in the 74th, causing frantic final minutes.
Bayern is two points behind defending champion Dortmund, which visits relegation-threatened Cologne on Sunday.
"We did our homework," Kroos said. "Our task is to put pressure on Dortmund."
Hoffenheim ended Borussia Moenchengladbach's 16-game unbeaten run at home with a 2-1 win, and Schalke took full advantage by beating Bayer Leverkusen 2-0 to move to third, the last automatic Champions League qualification place.
Klaas-Jan Huntelaar scored twice for Schalke. Christian Fuchs delivered a pinpoint cross for the Dutchman to score with a fantastic header in the 18th, then he put the result beyond doubt with another precise header in the 86th, Huntelaar's 22nd league goal of the season and 40th in 38 games across all competitions.
Leverkusen had goalkeeper Bernd Leno to thank for keeping the visitors in the game, the 20-year-old stopping efforts from Jefferson Farfan, Raul Gonzalez, and then Huntelaar in the second half, when Julian Draxler fired the rebound over with the goal at his mercy.
Leverkusen captain Simon Rolfes was lucky to escape a red card for an elbow in the 18-year-old Draxler's face in the first half.
"The whole game thrilled the fans," Schalke coach Huub Stevens said. "The only accusation I have to make against my team is that they have to wrap it up sooner."
Augsburg drew 1-1 at Werder Bremen, Hertha Berlin won 3-1 win at Mainz and Freiburg beat bottom side Kaiserslautern 2-0, results that left Hamburger SV in the relegation zone.
Bayern coach Jupp Heynckes opted to leave Gomez and Thomas Mueller on the bench with one eye on the first leg of the side's Champions League quarterfinal in Marseille on Wednesday.
Both players picked up minor knocks in the win over Moenchengladbach in the German Cup semifinals, and the home side showed the effects of playing three days later.
Kroos was unmarked when he found the breakthrough. Franck Ribery ran at the Hannover defence and Arjen Robben swept the Frenchman's cross on for Kroos to calmly chip the rushing goalkeeper.
Heynckes sent Gomez on in the 61st, and the striker hit the post two minutes later, before Kroos found him on the right of the penalty area to score with a skilful left-footed strike across Ron-Robert Zieler.
Moenchengladbach also looked tired after Wednesday's cup semifinal.
Marco Reus put the home side ahead with his 15th goal of the season in the 38th after Patrick Herrmann found the Dortmund-bound winger on the edge of the penalty area to fire past Tom Starke.
"Of course it's a disappointment," said Moenchengladbach coach Lucien Favre. "We had six, seven chances but only used one."
Hoffenheim equalized when Roberto Firmino's deflected effort gave Marc-Andre ter Stegen no chance in the 77th, and Boris Vukcevic struck again two minutes later with a header from a corner.
Krasimir Balakov's first game in charge of Kaiserslautern got off to a forgettable start when Karim Guede scored his first Bundesliga goal in the eighth minute of his first start for Freiburg, after a defensive blunder from Rodnei.
It got worse six minutes later when Freiburg captain Cedrick Makiadi scored with a header from a poorly defended corner.
"After the two goals I also saw positive things," said Balakov after Kaiserslautern's 17th game without a win, a club record. "At least they tried to fight their way back into the game."
Aenis Ben-Hatira scored Hertha's first goal away from home this year in the 41st at Mainz, and Adrian Ramos added the second in the 52nd.
Eric Maxim Choupo-Moting pulled one back six minutes later, but Ramos sealed the win in the 69th.
"If we had lost here today it would have been very hard," said Hertha coach Otto Rehhagel, whose side remains next-to-last.
The 19-year-old Niclas Fuellkrug, who was making his first start for Werder due to Peru striker Claudio Pizarro's suspension, put his side ahead in the 61st.
But Augsburg defender Paul Verhaegh grabbed a deserved equalizer for the visitors three minutes into injury time.