Matt Lockwood's first-half free-kick saw a dominant Dundee secure their first home win of the season as Hearts dropped to ninth in the league.
Colin Nish spurned two chances to double his side's lead just before half-time, Marius Zaliukas thwarting the Dundee striker's attempts.
The visitors pressed for an equaliser but it was the home side who looked closest to scoring in the second half.
And neither side could add to Lockwood's curling effort.
Dundee went ahead in 21 minutes when Lockwood fired in a spectacular free-kick from the edge of the 18-yard box.
Zalikas headed over for Hearts late on
His left foot shot curled high over the wall and rattled past Jamie MacDonald at his left side just inside the junction of the goal.
Mehdi Taouil threatened to reply for Hearts with a stinging drive which Rab Douglas thwarted with the heel of his hands and then, five minutes later, the Dundee keeper leapt full length to his left to palm a blistering Arvydas Novikovas free-kick away for a corner.
Colin Nish had two good chances to add to Dundee's lead. The first opportunity came just before half-time, when he rounded the Hearts keeper and fired a shot from 18 yards only for Marius Zaliukas to block the attempt.
The Hearts defender thwarted Nish again just after the hour mark, deflecting his shot for a corner.
In the 71st minute Dundee sub John Baird, only minutes on the field, swivelled onto a long ball in the Hearts box to force MacDonald into a sprawling save at his right-hand post.
Hearts though, maintained a barrage of pressure and Zaliukas nodded powerfully over from six yards as full-time neared and then in the last minute of normal time found Douglas well positioned to safely clutch another strong headed effort.
Dundee hung on to take their seventh point of the Scottish Premier League season and only their second win, both victories having come against Hearts.
Dundee's youthful central defensive pairing of Declan Gallagher and Kyle Benedictus were imperious throughout, while Nicky Riley's lung-bursting runs and availability for the out ball were firm reminders that sometimes professional players really do play for the jersey.
A deserved win for a Dundee side who drained themselves of every ounce of effort while Hearts will rue a performance which never matched their midweek efforts 100 yards down the road at Tannadice, where they beat Dundee United on Wednesday to reach the semi-finals of the Scottish Communities League Cup.
Ryan Conroy is caught offside. Jamie MacDonald takes the free kick.
Andy Webster gives away a free kick for an unfair challenge on John Baird. Gary Irvine takes the direct free kick.
The referee blows for offside against Andrew Driver. Rab Douglas takes the free kick.
Ryan Conroy challenges Ryan McGowan unfairly and gives away a free kick. Centre by Ryan McGowan, Marius Zaliukas takes a shot. Comfortable save by Rab Douglas.
Unfair challenge on Jamie Walker by Kevin McBride results in a free kick. Daniel Grainger takes the direct free kick.
Substitution Ryan Conroy joins the action as a substitute, replacing Steven Milne.
Outswinging corner taken by Daniel Grainger.
The official flags John Baird offside. Indirect free kick taken by Marius Zaliukas.
Matthew Lockwood concedes a free kick for a foul on Callum Paterson. Daniel Grainger takes the direct free kick.
Substitution Arvydas Novikovas goes off and Jamie Walker comes on.
Shot by John Baird. Jamie MacDonald makes a save. Corner taken by James McAlister, Declan Gallagher produces a right-footed shot from close range which goes wide of the right-hand upright.
Ryan McGowan gives away a free kick for an unfair challenge on Kevin McBride. Free kick taken by Matthew Lockwood.
Substitution John Baird joins the action as a substitute, replacing Colin Nish.
Substitution Gordon Smith is brought on as a substitute for John Sutton.
Steven Milne challenges Mehdi Taouil unfairly and gives away a free kick. Arvydas Novikovas produces a shot on goal direct from the free kick.
The assistant referee flags for offside against James McAlister. Indirect free kick taken by Jamie MacDonald.
Inswinging corner taken from the right by-line by James McAlister, Andy Webster manages to make a clearance.
Ryan McGowan concedes a free kick for a foul on James McAlister. Matthew Lockwood takes the direct free kick.
James McAlister takes the inswinging corner, clearance made by Andy Webster.
Declan Gallagher restarts play with the free kick.
Substitution (Hearts) makes a substitution, with Andrew Driver coming on for Scott Robinson.
Colin Nish fouled by Darren Barr, the ref awards a free kick.
Inswinging corner taken by Arvydas Novikovas, clearance by Declan Gallagher.
Scott Robinson decides to take the corner short.
Steven Milne is ruled offside. Free kick taken by Jamie MacDonald.
Scott Robinson challenges Nicky Riley unfairly and gives away a free kick. Kyle Benedictus restarts play with the free kick.
The referee gets the second half started.
45:00 +1:21 Half time
Half Time The ref blows to end the first period.
Ryan McGowan challenges James McAlister unfairly and gives away a free kick. Free kick crossed by James McAlister, Daniel Grainger manages to make a clearance.
Free kick awarded for an unfair challenge on John Sutton by Declan Gallagher. Scott Robinson restarts play with the free kick.
Colin Nish takes a shot. Save by Jamie MacDonald.
Foul by James McAlister on Ryan McGowan, free kick awarded. The free kick is swung in left-footed by Daniel Grainger, comfortable save by Rab Douglas.
Matthew Lockwood challenges John Sutton unfairly and gives away a free kick. Daniel Grainger crosses the ball from the free kick left-footed from right channel, clearance made by Declan Gallagher.
The official flags Steven Milne offside. Jamie MacDonald restarts play with the free kick.
Corner taken by Daniel Grainger, clearance made by James McAlister.
Foul by Iain Davidson on Scott Robinson, free kick awarded. Strike comes in from Arvydas Novikovas from the free kick, save by Rab Douglas.
Daniel Grainger has a direct shot on goal from the free kick.
Booking Declan Gallagher goes into the referee's book for unsporting behaviour.
Unfair challenge on Callum Paterson by Declan Gallagher results in a free kick.
Corner taken left-footed by Daniel Grainger from the right by-line, Steven Milne makes a clearance.
Free kick awarded for an unfair challenge on Arvydas Novikovas by Matthew Lockwood. Free kick taken by Mehdi Taouil.
Free kick awarded for a foul by Declan Gallagher on Callum Paterson. Mehdi Taouil restarts play with the free kick.
Inswinging corner taken from the right by-line by Daniel Grainger, Rab Douglas makes a comfortable save.
21:26 Goal scored
Goal! - Matthew Lockwood - Dundee 1 - 0 Hearts Matthew Lockwood hits the back of the net with a brilliant goal direct from the free kick from just outside the penalty box to the top left corner of the goal. Dundee 1-0 Hearts.
Foul by Marius Zaliukas on Gary Irvine, free kick awarded.
The assistant referee signals for offside against Mehdi Taouil. Free kick taken by Kyle Benedictus.
Ryan McGowan fouled by James McAlister, the ref awards a free kick. Jamie MacDonald takes the free kick.
The assistant referee flags for offside against Scott Robinson. Rab Douglas takes the free kick.
Mehdi Taouil challenges Nicky Riley unfairly and gives away a free kick. Free kick crossed right-footed by James McAlister from left channel, clearance by Marius Zaliukas.
The referee penalises Iain Davidson for handball. Free kick taken by Jamie MacDonald.
Corner taken left-footed by Daniel Grainger, John Sutton has a headed effort at goal from close in which goes wide of the left-hand upright.
Mehdi Taouil concedes a free kick for a foul on Steven Milne. Direct free kick taken by Matthew Lockwood.
Darren Barr fouled by Declan Gallagher, the ref awards a free kick. Jamie MacDonald restarts play with the free kick.
James McAlister takes the inswinging corner, clearance by Marius Zaliukas.
Kyle Benedictus challenges John Sutton unfairly and gives away a free kick. Jamie MacDonald takes the free kick.
This page is best viewed in an up-to-date web browser with style sheets (CSS) enabled. While you will be able to view the content of this page in your current browser, you will not be able to get the full visual experience. Please consider upgrading your browser software or enabling style sheets (CSS) if you are able to do so.