Ibrahim Afellay and Marco Hoger scored the goals for Huub Stevens' side, who emerged triumphant in the 141st derby encounter between the two sides, gaining revenge for defeat at home to Dortmund last season.
Robert Lewandowski's reply was not enough for the defending champions who, in view of Bayern Munich's 5-0 win at Fortuna Dusseldorf, now trail the league leaders by 12 points and appear to be losing grasp of their title.
Afellay put the visitors in front in the 14th minute when he volleyed Sven Bender's clearing header in off the inside of the left-hand post.
The Royal Blues showed no fear in front of over 80,000 passionate fans and they created chances to double their lead before the break, with Klaas-Jan Huntelaar heading over and Afellay not finding a team-mate with a dangerous cross.
Just three minutes of the second half were up when Hoger silenced the Westfalenstadion, or at least the majority of it, by beating Roman Weidenfeller in a one-on-one situation after being put through by Lewis Holtby.
Joel Matip went close to making it three just moments before Lewandowski brought Dortmund back into the game in the 55th minute.
Marco Reus' cross was met by the Poland international's header as he beat Matip in the air to make it 2-1.
Dortmund inevitably started to gamble and push for an equaliser, but Schalke did not just sit back and defend and, with Afellay, they went close to a third.
Huntelaar wasted the best chances as Schalke more than held on to a sweet victory which keeps them on the heels of Bayern and second-placed Eintracht Frankfurt.