Lawrence Shankland scores for Hearts against RangersImage source, PA Media
Image caption,

Lawrence Shankland scored his fourth goal against Rangers this season

At a glance

  • Hearts win to restore three-point lead at top of Scottish Premiership with three games to play

  • Kingsley & Shankland score for hosts in second period after Sterling opener in first half

  • Rangers seven points off leaders and four behind Celtic before Sunday's Old Firm derby

ByAndy Campbell
BBC Scotland

Captain Lawrence Shankland thundered Hearts to a huge victory over Rangers as the Scottish Premiership leaders restored their three-point advantage at the top and all but ended the Ibrox side's title hopes.

Derek McInnes' side lead Celtic by three points with three games to play, with Rangers seven points off the top.

Dujon Sterling's volley deflected off Michael Steinwender and looped over Alexander Schwolow to give Rangers the lead during a first half in which they controlled play.

In the second period, Stephen Kingsley levelled on the rebound after Alexandros Kyziridis' shot had come off a post and it was Kingsley's deflected cross that was superbly converted by Shankland for the winner.

Somewhat predictably, the opening goal came from a set play, with returning Rangers skipper James Tavernier's throw-in helped on by Hearts defender Stuart Findlay's head and makeshift left-back Sterling getting his downward shot away.

Earlier, Hearts' Craig Halkett and Tochi Chukwuani of Rangers had exchanged headers over from dead-ball deliveries.

Kingsley found himself free on the left of the box to convert following Kyziridis' endeavours on the opposite side.

Emmanuel Fernandez's header almost restored Rangers' lead following another Tavernier throw.

And it was Kingsley's spade-work in chasing the ball to the line that was rewarded when Shankland turned in with a fierce left-foot drive near the edge of the box.

Half-time substitute and last week's Edinburgh derby match winner Blair Spittal was a key component in Hearts' resurgence and his sweeping shot required an outstanding Jack Butland save to prevent a third for the hosts.

There was still time for a twist and it almost went the way of Danny Rohl's visitors when substitute Thelo Aasgaard's header bounced off the crossbar. With that ended their hopes of a draw and any real prospect of catching the long-time league leaders.

Successive defeats by Motherwell and Hearts also means Rangers can be counted out for the runners-up spot if they lose to defending champions Celtic on Sunday.

Analysis: Shankland makes the difference again to keep Hearts on course

The most fascinating Scottish top-flight title race in a generation meant Monday's bank holiday meeting at Tynecastle was always likely to be tumultuous and with lasting consequence.

From open play, Rangers were fluid and quick in transition, at least until Hearts scored. Rohl's side did not make the most of the openings that came their way and found fewer available as the match wore on.

Hearts could only improve in the second half and improve they did, finding spaces and overloads more frequently.

If there was going to be a winner, it needed a big-game player to deliver. Enter Shankland.

The Scotland striker had scored both in Hearts' 2-0 September win at Ibrox and what turned out to be the winner when Rangers left Tynecastle on the end of a 2-1 defeat in December.

He was injured when Hearts lost 4-2 to Rangers in Glasgow in February but more than made up for that absence with his latest crucial goal - a 19th for club and country this season, with national manager Steve Clarke watching on from the stand.

And now history beckons, with Hearts three games away from their first top-flight title in 66 years.

Hearts captain Lawrence Shankland next to a graphic of the Scottish Premiership top-six standingsImage source, SNS

What they said

Hearts manager Derek McInnes: "The way the players dug that out, the result, second half - magnificent. The two goals were magnificent. Lawrence comes up with the big moment. The finish is sublime, it's so pure, it's full of class and everything that he is.

"For half-an-hour, Rangers were way ahead of us. We were second best. We needed a big half-time. Thankfully, we organised ourselves enough to get a bit more confidence in the game.

"We asked the players to show more responsibility. We're not top of the league without cause and we needed to start showing that we were the team at the top of the league. I don't think anybody could deny that, second half, we were the better team and very strong and showed a bit more like ourselves."

Rangers head coach Danny Rohl: "We played a strong first half. We deserved to lead.

"Second half, this is football. We knew that they would come with power. They played much, much more direct in behind. We had less pressure on the ball and then you have to defend in critical areas very often. The 2-1, you should never concede such a goal in this area. This is then what we have to improve very quick.

"What I demand from my group now is show personality and courage for the next three games and this is our job to do."

What's next for these clubs?

Hearts visit fourth-placed Motherwell on Saturday (20:00 BST).

Rangers travel to take on Celtic on Sunday (12:00).

Player of the match

Number: 9 L. Shankland
Average rating 8.08
Number: 9 L. Shankland
Average Rating: 8.08
Number: 16 B. Spittal
Average Rating: 7.81
Number: 3 S. Kingsley
Average Rating: 7.58
Number: 15 M. Steinwender
Average Rating: 7.49
Number: 4 C. Halkett
Average Rating: 7.44
Number: 19 S. Findlay
Average Rating: 7.33
Number: 10 Cláudio Braga
Average Rating: 7.29
Number: 6 B. Baningime
Average Rating: 7.27
Number: 49 M. Leonard
Average Rating: 7.26
Number: 25 A. Schwolow
Average Rating: 7.23
Number: 5 J. McCart
Average Rating: 7.18
Number: 89 A. Kyziridis
Average Rating: 7.13
Number: 2 F. Kent
Average Rating: 7.07
Number: 11 P. Kaboré
Average Rating: 7.05
Number: 23 J. Altena
Average Rating: 6.98
Number: 99 I. Chesnokov
Average Rating: 6.72

After the opportunity to rate players has closed, the score displayed represents the average from all the submissions by BBC Sport users.