Julian Draxler opened the scoring for Schalke in the 51st minute and Ciprian Marica made it 2-0 after 69 minutes as Jens Keller's side picked up their fifth victory in their last six matches to move on to 45 points.
Bremen, meanwhile, extended their winless streak to seven matches to remain on 31 points.
Bremen had the first chance after 11 minutes as Schalke keeper Timo Hildebrand twice stopped attempts by Kevin De Bruyne.
Hildebrand once again was too good for De Bruyne in the 17th minute, hitting away a shot by the Belgian.
Schalke posed little danger in the first half but they forced Bremen goalkeeper Sebastian Mielitz into a fine stop in the 47th minute from a header from four yards by Joel Matip.
Schalke grabbed the lead just four minutes later as a loose ball went to Draxler and he shot through the legs of Bremen defender Sokratis Papastathopoulos and into the back of the net.
The guests nearly doubled the lead in the 54th minute but Bremen defender Assani Lukimya cleared Marica's shot with a bicycle kick on the line.
The hosts were inches from equalising in the 57th minute but Aaron Hunt's free kick went just left of the upright.
But it was Schalke who scored the next goal, making it 2-0 in the 69th minute with Lukimya playing a poor pass to his keeper, which Raffael latched on to and passed to Marica, who slotted home for the decider.