Joel Matip and Eric Maxim Choupo-Moting both struck inside the opening quarter, and although Pierre Emerick-Aubameyang pulled a goal back, the hosts held on to win
First-half goals from Joel Matip and Eric Maxim Choupo-Moting at the Veltins Arena sent Jurgen Klopp's men crashing to a third defeat from the opening six games of the new Bundesliga season.
The manner in which Matip and Choupo-Moting were allowed to put Schalke two goals to the good inside 23 minutes will give Klopp plenty to ponder, although the Dortmund coach can take some solace from his players' response to a sluggish start.
Pierre-Emerick Aubameyang made it 2-1 midway through the first half and Schalke goalkeeper Ralf Fahrmann was required to make several fine saves to keep last season's runners-up at bay. But Dortmund could not find a way past Fahrmann and were left frustrated by another costly domestic defeat.
Defender Mats Hummels made his first start of the season for BVB after proving his fitness following muscular problems, while Shinji Kagawa dropped to the bench.
Given the rivalry that exists between the two clubs, a feisty opening appeared inevitable and a clash of heads between Choupo-Moting and Lukasz Piszczek inside the opening 30 seconds resulted in the latter requiring treatment off the pitch.
Aubameyang tested Schalke goalkeeper Fahrmann from 25 yards before Dortmund were left to rue some poor defending at the other end as the home side broke the deadlock after 10 minutes.
Matip - who was back at the centre of the Schalke defence - slipped away from two markers to meet Dennis Aogo's corner on the six-yard box with a powerful header that gave Roman Weidenfeller no chance.
Ciro Immobile fired wide after beating the offside trap and cutting in from the right wing as Dortmund attempted to get a foothold in the game.
But their task became more difficult when Choupo-Moting capitalised on more hesitant defending to make it 2-0 after 23 minutes.
Weidenfeller showed great reactions to palm away Matip's header from Aogo's cross before Adrian Ramos' attempted clearance eventually fell kindly for Choupo-Moting. He made no mistake with a low drive from 10 yards.
The Cameroon international striker's third Bundlesliga goal of the season prompted an almost instant response from the visitors as Dortmund pulled one back four minutes before the half-hour mark.
Ramos surged down the right flank and pulled a pass back that the advancing Aubameyang diverted across Fahrmann from just inside the penalty area.
Only a fine fingertip save from Fahrmann denied Dortmund an equaliser four minutes into the second half. Immobile pivoted and shot from 20 yards, but Fahrmann was down quickly to his right to palm the low drive wide when at full stretch.
Kevin-Prince Boateng spurned a decent chance to make it 3-1 by dragging a shot wide before Schalke were again indebted to another Fahrmann save, this time to turn Aubameyang's free-kick behind.
Dortmund saw claims for a penalty turned down with 23 minutes left when Matip and Ramos came together on the edge of the penalty area, but referee Peter Gagelmann waved play on.
Substitute Milos Jojic headed wide after 79 minutes as the visitors continued to press forward before Klaas-Jan Huntelaar came agonisingly close to adding a third for Schalke in stoppage time.
Huntelaar latched on to a lofted ball downfield and turned past Neven Subotic, but his shot struck Weidenfeller's legs and trickled agonisingly wide.
Victory for Schalke sees them leapfrog Dortmund in the Bundesliga table.