Skacel converted Craig Thomson’s early cross but missed a second-half chance to put Saturday’s contest beyond doubt as Jim Jefferies’ men bounced back from the midweek loss at Celtic to record a 13th win in the last 16 SPL games.
St Johnstone, who beat Hearts in the Scottish Cup earlier this month, were on the back foot throughout and saw their five-match unbeaten run come to an end.
The result saw Hearts cut the gap to Celtic and Rangers at the top of the table, with the Old Firm duo in Co-operative Insurance Cup semi-final action this weekend.
Hearts, who beat Rangers last weekend and meet them again on Wednesday, had won 10 of the previous 11 league games before a 4-0 defeat at Parkhead hampered their hopes of challenging the Old Firm at the top of the SPL.
Their only previous loss since October had come in the Scottish Cup to Saints and they had amassed 37 points out of a possible 45 in 15 games.
The visitors, though, had only lost at Celtic in their last nine games and defeated Motherwell in midweek.
With Hearts majority shareholder Vladimir Romanov making a rare appearance at Tynecastle the hosts – featuring five changes from the loss at Celtic – were keen to make a swift start and they did just that.
Marian Kello collected Jody Morris’ corner and launched a long kick forward which Suso Santana headed on for Thomson.
Thomson went in behind Alan Maybury, deputising for the suspended Danny Grainger, and sent in an early low cross behind the Saints defence for Skacel to net as he rushed into the area.
It was the midfielder’s eighth of the season.
Santana fluffed an opportunity when Lee Wallace’s cross from the left eluded Skacel and caught the winger by surprise as he failed to control the ball.
Skacel shot wide from the edge of the area after 17 minutes as Hearts continued to press forward, with Thomson and Wallace proving particularly effective coming forward from full-back.
Murray Davidson volleyed wide as he stretched to reach Liam Craig’s cross as Saints had their first opportunity after 26 minutes.
David Obua had a shot from an acute angle palmed away by Peter Enckelman, with Skacel unable to convert the rebound.
Collin Samuel’s shot then did not trouble Kello and Saints boss Derek McInnes made two changes, clearly unhappy with his side’s performance.
Sam Parkin was replaced by Cleveland Taylor and ex-Hearts defender Maybury, who endured a torrid first 39 minutes, by Steven May.
But still Hearts attacked and Gary Glen stabbed wide from Wallace’s cross before half-time and Skacel missed a glorious opportunity to put the result beyond doubt early in the second half.
The midfielder shot straight at a grateful Enckelman when presented with a straightforward opportunity by Wallace.
Santana struck a snap-shot from the edge of the area which Enckelman failed to hold at the first attempt as Hearts continued to search for a second goal.
Stephen Elliott replaced Glen and Andrew Driver came on for Santana to make his first appearance of the season following a thigh injury.
Peter MacDonald, whose late strike earned Saints their cup victory over Hearts, replaced Samuel as McInnes made his third and final change.
But MacDonald was not so fortunate on this occasion as the game concluded on a scrappy note.
Elliott required treatment for a dislocated little finger on his left hand but was able to continue and Skacel was replaced by Ryan Stevenson.
May caught Thomson with a high challenge which enraged Jefferies before Driver was booked.
Elliott shot wide before failing to convert following a fine run by Driver.
Four minutes of stoppage time ensued, but Saints could not find a leveller and Hearts were unable to net a second.